Health Gorilla · AsyncAPI Specification
Health Gorilla Webhooks
Version
View Spec
View on GitHub
HealthInteroperabilityFHIRClinical DataLab OrderingTEFCAQHINHealth Information ExchangeLab ResultsClinical DocumentsSMART on FHIRPatient RecordsHL7AsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-14'
method: searched
source: https://developer.healthgorilla.com/reference/webhooks-notifications
description: >-
Health Gorilla operates a real event surface built on FHIR R4 Subscription
resources with rest-hook and websocket channels. It publishes no AsyncAPI
document — searched the docs, the llms.txt index, the GitHub org and
/asyncapi.yaml on every host, all misses — so this artifact captures the
webhook catalog the provider does document: channels, criteria, supported
resources, payload media types, HMAC signing, delivery retry policy and
subscription lifecycle. No AsyncAPI was fabricated.
spec_type: none
asyncapi_published: false
asyncapi_probe:
- {url: 'https://api.healthgorilla.com/asyncapi.yaml', http_status: 404, fetched: '2026-08-14'}
- {url: 'https://developer.healthgorilla.com/asyncapi.yaml', http_status: 404, fetched: '2026-08-14'}
transport:
mechanism: FHIR R4 Subscription
endpoint: https://api.healthgorilla.com/fhir/R4/Subscription
interactions: [create, read, update (FHIR Patch), delete, search-type]
search_params: [status, type]
fhir_versions: [R4, STU3]
docs: https://developer.healthgorilla.com/reference/subscribing-to-events
channels:
- type: rest-hook
description: HTTPS POST delivery of the triggering resource to a customer endpoint.
requirements:
- Endpoint must use HTTPS
- TLS 1.2 or higher required
- Self-signed or invalid certificates cause delivery failure
- Plain http:// endpoints are rejected
payload_media_types:
- application/fhir+json
- application/hg-event+json
- application/hg-ocr+json
- 'none (no payload — poll with _lastUpdated instead)'
user_agent: HealthGorilla-FHIR-Webhook
- type: websocket
description: Event-driven notifications over a persistent connection.
auth: OAuth 2.0 access token required
endpoint_discovery: declared in the FHIR CapabilityStatement
events:
criteria_model: >-
The Subscription.criteria field is a FHIR search expression naming the
resource type and optional attribute filters. Health Gorilla asks integrators
to agree criteria with their integration team.
examples:
- {resource: DocumentReference, criteria: 'DocumentReference?status=current'}
- {resource: Encounter, criteria: 'Encounter?status=finished'}
- {resource: AllergyIntolerance, criteria: 'AllergyIntolerance?clinical-status=active'}
- {resource: Observation, criteria: 'Observation?code=XXX'}
- {resource: Immunization, criteria: 'Immunization?status=completed'}
- {resource: Bundle, criteria: 'Bundle?message.event=admin-notify', family: ADT}
- {resource: Patient, criteria: Patient.P360, family: Patient360 document import}
supported_resources:
- DiagnosticReport
- DocumentReference
- Condition
- AllergyIntolerance
- Immunization
- MedicationRequest
- MedicationStatement
- Observation
- Encounter
- CarePlan
- Goal
- Procedure
- Coverage
trigger: resource matching the criteria is created or updated
note: Additional resources and criteria may be enabled per configuration.
event_families:
- name: Clinical resource notifications
description: Fires when a matching clinical resource is created or updated.
payload: full FHIR resource (application/fhir+json)
- name: ADT notifications
description: Admission, discharge and transfer message events delivered as FHIR Bundles.
criteria: 'Bundle?message.event=admin-notify'
search_params:
- {name: message.event, type: token, values: [admin-notify], required: true}
- {name: message.focus, type: reference, description: Patient logical ID, required: false}
- {name: _lastUpdated, type: date, required: false}
- {name: _offset, type: number, default: 0, required: false}
- {name: _count, type: number, default: 100, required: false}
- {name: eventType, type: string, description: HL7 v2 event codes A01 through A62, required: false}
docs: https://developer.healthgorilla.com/docs/adt-network
- name: Patient360 document import
description: Fires when new documents are imported for a patient via Patient360 retrieval, single import, or batch import.
criteria: Patient.P360
payload_shape: '{"resource": "Patient", "id": "Patient/<id>"}'
- name: Lightweight event pointer
description: Minimal reference payload naming only the resource type and id, for clients that re-fetch.
media_type: application/hg-event+json
payload_shape: '{"resource": "RequestGroup", "id": "RequestGroup/<id>"}'
security:
signing:
algorithm: HMAC-SHA512
signature_header: X-Hg-Signature
signature_prefix: sha512=
signed_headers: [Date, X-Hg-EventId, Digest]
string_to_sign: "<Date>\\n<X-Hg-EventId>\\n<Digest>"
verification: >-
Compute the HMAC-SHA512 of the constructed string using the configured
signing secret, prefix with sha512=, and compare to X-Hg-Signature.
notification_headers: [Date, Digest, X-Hg-EventId, X-Hg-EventCreated, X-Hg-Signature]
delivery_headers: [Content-Type, User-Agent, X-Hg-EventId]
outbound_oauth:
supported: true
grant_type: client-credentials
extension_url: https://www.healthgorilla.com/fhir/StructureDefinition/subscription-channelRestHookOAuth
required_attributes: [clientId, clientSecret, endpoint]
optional_attributes: [scope, header]
note: >-
Credentials used to authenticate Health Gorilla to the customer's webhook
endpoint must be issued by the customer's own organization, not the OAuth
credentials Health Gorilla issues for API access.
docs: https://developer.healthgorilla.com/reference/webhook-delivery-security
delivery:
success_statuses: [200, 202]
failure_conditions:
- non-2xx response status
- request timeout
- 4xx or 5xx from the endpoint
- invalid or expired SSL certificate
- endpoint unreachable or DNS resolution failure
retry_policy:
strategy: exponential backoff
attempts:
- {attempt: 1, delay: ~5 seconds}
- {attempt: 2, delay: ~30 seconds}
- {attempt: 3, delay: ~2 minutes}
- {attempt: final, delay: ~10 minutes}
after_final: event is discarded and will not be redelivered
subscription_retry:
interval: every 15 minutes
note: >-
Documented separately on the Subscribing to Events page as the
subscription-level redelivery cadence, alongside the per-event backoff above.
consumer_idempotency:
required: recommended
strategies:
- Track resource.id plus meta.lastUpdated to detect duplicates.
- Store hashes or delivery timestamps to prevent double ingestion.
reconciliation: >-
Webhook delivery is not guaranteed. Periodically reconcile against the API
using the FHIR _lastUpdated search parameter to catch missed events.
docs: https://developer.healthgorilla.com/reference/handling-failures-retries
lifecycle:
active_subscription_limit: 30
limit_increase: available on request
over_limit_status: 422
auto_disable_conditions:
- Last successful delivery is 3 days old or older AND delivery has failed more than 10 times
- No successful delivery has ever occurred AND delivery has failed more than 20 times
re_enable: A disabled subscription must be re-enabled before notifications resume.
polling_fallback:
supported: true
mechanism: FHIR search with the _lastUpdated parameter
posture: >-
Health Gorilla states webhooks are the preferred method and polling should
only be used when webhook delivery is not feasible.
docs: https://developer.healthgorilla.com/reference/polling
related:
- conventions/health-gorilla-conventions.yml
- fhir/health-gorilla-fhir.yml
- errors/health-gorilla-problem-types.yml
x-evidence:
- {url: 'https://developer.healthgorilla.com/reference/webhooks-notifications.md', http_status: 200, fetched: '2026-08-14'}
- {url: 'https://developer.healthgorilla.com/reference/subscribing-to-events.md', http_status: 200, fetched: '2026-08-14'}
- {url: 'https://developer.healthgorilla.com/reference/webhook-delivery-security.md', http_status: 200, fetched: '2026-08-14'}
- {url: 'https://developer.healthgorilla.com/reference/handling-failures-retries.md', http_status: 200, fetched: '2026-08-14'}