Fasten Health · AsyncAPI Specification
Fasten Health Webhooks
Version
View Spec
View on GitHub
HealthcareFHIRPersonal Health RecordElectronic Medical RecordHealth Data InteroperabilityTEFCAEHI ExportPatient ConsentSelf-HostedOpen-SourceHL7Healthcare ConnectivityAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-14'
method: searched
source: >-
https://docs.connect.fastenhealth.com/webhooks/introduction,
https://docs.connect.fastenhealth.com/webhooks/events,
https://docs.connect.fastenhealth.com/webhooks/delivery,
https://docs.connect.fastenhealth.com/webhooks/verification
spec_type: null
asyncapi_published: false
asyncapi_probe:
- url: https://docs.connect.fastenhealth.com/asyncapi.yaml
status: 404
- url: https://docs.connect.fastenhealth.com/api-reference/asyncapi.yaml
status: 404
note: >-
Fasten Connect has a real, well-documented event surface but publishes NO AsyncAPI document. The
webhook catalog below is captured from the provider's own event reference; no AsyncAPI was
generated on their behalf. Events are the primary completion signal for bulk EHI export, not an
optional extra — the export API is asynchronous by design.
transport: https-webhook
configuration: >-
Endpoints are registered in the Fasten Developer Portal (https://portal.fastenhealth.com), with
separate endpoints and separate signing secrets for test and live modes. Event types are
individually selectable per endpoint.
security:
signature_header: Webhook-Signature
scheme: Standard Webhooks (https://www.standardwebhooks.com/)
secret_source: Signing Secret, revealed on the endpoint's Delivery Logs page in the portal
replay_protection: signed timestamp inside the signature
libraries: >-
Any Standard Webhooks implementation. The docs show JavaScript, Go, Python, Ruby and Java
examples using the community `standardwebhooks` libraries; Fasten ships no first-party
verification SDK.
delivery:
guarantee: at-least-once
deduplication_key: id (UUIDv4, on every event)
retries: 4
failure_conditions:
- non-2xx response
- response slower than 60 seconds
- connection error
auto_disable: true
auto_disable_notice: email alert; manual re-enable in portal under Developers > Webhooks
handler_guidance: respond 200 immediately, then process asynchronously via a queue
log_retention_days: 15
event_count: 7
events:
- type: patient.ehi_export_success
description: Bulk EHI export completed; records are ready to download.
enabled_by_default: true
fields:
- {name: download_links, type: "object[]", required: true, note: "url + export_type + content_type; jsonl/application/fhir+ndjson by default"}
- {name: org_connection_id, type: string}
- {name: task_id, type: string}
- {name: org_id, type: string}
- {name: stats, type: object, required: true, note: "total_resources + total_by_resource_type keyed by FHIR resource type"}
- {name: download_link, type: object, deprecated: true, note: "superseded by download_links"}
- type: patient.ehi_export_failed
description: Bulk EHI export failed.
enabled_by_default: true
fields:
- {name: failure_reason, type: string, required: true, enum_ref: errors/fasten-health-problem-types.yml}
- {name: org_connection_id, type: string}
- {name: task_id, type: string}
- {name: org_id, type: string}
- type: patient.connection_success
description: >-
Patient successfully connected to the health system and the popup window closed. Documented as
the durable backend signal for a completed consent; connection FAILURES are not yet available
as a webhook event.
enabled_by_default: false
enablement: toggle in the Fasten Connect dashboard per webhook endpoint
fields:
- {name: org_connection_id, type: string, required: true}
- {name: endpoint_id, type: string, required: true, note: "may be omitted in TEFCA mode"}
- {name: portal_id, type: string, required: true, note: "may be omitted in TEFCA mode"}
- {name: brand_id, type: string, required: true, note: "may be omitted in TEFCA mode"}
- {name: connection_status, type: string, required: true, enum: [authorized, revoked]}
- {name: platform_type, type: string, required: true, note: EHR type of the connected endpoint}
- {name: request_id, type: string, note: correlation id for support tickets}
- {name: external_id, type: string, note: opaque integrator-supplied patient identifier}
- {name: external_state, type: string, note: identifies a unique connection attempt}
- {name: scope, type: string, note: "SMART on FHIR scope granted; always patient/*.read in TEFCA mode"}
- {name: consent_expires_at, type: string, format: rfc3339}
- {name: tefca_directory_id, type: string, note: present for TEFCA-connected health systems}
- type: patient.authorization_revoked
description: >-
Patient consent revoked or expired, detected when Fasten's periodic token refresh fails.
Fasten may revoke connections in bulk, so handlers must tolerate many events at once.
enabled_by_default: false
enablement: toggle in the Fasten Connect dashboard per webhook endpoint
fields:
- {name: org_connection_id, type: string, required: true}
- {name: endpoint_id, type: string}
- {name: portal_id, type: string}
- {name: brand_id, type: string}
- {name: platform_type, type: string, required: true}
- {name: connection_status, type: string, required: true, note: always "revoked"}
- type: patient.request_health_system
description: Patient asked for a health system that is not yet in the Fasten catalog.
fields:
- {name: email, type: string, required: true}
- {name: name, type: string, required: true}
- {name: website, type: string}
- {name: street_address, type: string}
- type: patient.request_support
status: beta
description: Patient requested support during the connection process.
fields:
- {name: email, type: string, required: true}
- {name: name, type: string}
- {name: body, type: string, required: true, warning: "may contain PII or PHI; format is arbitrary and subject to change"}
- type: webhook.test
description: Manual test event fired from the webhook simulator.
fields:
- {name: hello, type: string}
- {name: random, type: string}
envelope:
fields:
- {name: id, type: string, format: uuidv4, note: unique event id; the documented deduplication key}
note: >-
The introduction page shows the event envelope carrying an `id`; per-event documentation covers
the payload body only.
tooling:
simulator: https://docs.connect.fastenhealth.com/guides/webhook-debugging-simulator
delivery_logs: >-
Per-endpoint delivery logs in the Developer Portal showing response code, body and headers for
the last 15 days.
gaps:
- No AsyncAPI (or CloudEvents) document is published for this event surface.
- Connection FAILURE has no event; only success is emitted.
- >-
Two of the four lifecycle events (patient.connection_success, patient.authorization_revoked)
are off by default and must be enabled per endpoint in the dashboard.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/fasten-health-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.