Webhooks

Console

Webhooks

The Webhooks page allows you to set up real-time notifications and automate downstream actions whenever key events occur on the platform.

Webhooks make it easy to integrate job results with your existing healthcare systems, analytics pipelines, or custom applications, ensuring timely delivery of processed data.

What Are Webhooks?

A webhook is a secure HTTP callback that sends an event notification to a URL you specify.

When a job completes, Curiflow automatically sends a structured JSON payload to your endpoint - eliminating the need for constant polling.

Typical events include:

  • Job Success – Notifies you when a document has been successfully converted to FHIR format.
  • Job Failed – Alerts you of any errors during processing.

Security Feature: Each webhook request includes an X-CURIFLOW-SIGNATURE header , allowing you to verify that the callback originates from Curiflow and ensuring secure, trusted delivery.

Setting Up a Webhook

  1. Navigate to Console → Webhooks → Create Webhook.
  2. Provide:
    • Endpoint URL where notifications will be sent.
    • Event Triggers (Job Success, Job Failed, Batch Completed, etc.).
    • Optional authentication token for added security.
  3. Save and test the webhook to ensure your endpoint receives events correctly.
  4. Verify incoming requests using the X-CURIFLOW-SIGNATURE header to confirm the callback is from Curiflow.

Webhook Signature Validation

For enhanced security, all webhook callbacks include HMAC-SHA256 signatures that you can validate to ensure authenticity and prevent tampering.

Key Security Features

  • HMAC-SHA256 signature verification using your webhook secret
  • Base64 encoded signatures for easy handling
  • Timestamp validation to prevent replay attacks
  • Constant-time comparison to prevent timing attacks

Webhook Headers

  • X-CURIFLOW-SIGNATURE: HMAC-SHA256 signature (base64 encoded)
  • Content-Type: application/json
  • X-CURIFLOW-TIMESTAMP: Unix timestamp of when the webhook was sent

Validation Steps

1

Compare Timestamps

Check that the webhook was received within an acceptable time window (5 minutes).

2

Recompute Platform Signature

Generate the expected signature using your webhook secret and the payload.

3

Compare Signatures

Use constant-time comparison to verify the signature.

Common Issues

IssueSolution
Signature mismatchUse raw request body, not parsed JSON
Missing headerCheck header names are exactly X-CURIFLOW-SIGNATURE (case-sensitive)
Invalid secretVerify webhook secret from console API keys page
Stale webhookCheck timestamp is within 10-minute tolerance window