When your pipeline includes a callback output node, Ingestly sends the processing results to your webhook URL when a run completes.
Setting up callbacks
- Add a Callback output node to your pipeline
- Configure the URL where you want to receive results
- Optionally add custom headers (for example, an authorization token)
- Save and activate the pipeline
Ingestly sends a POST request to your callback URL with a JSON payload containing the run results:
The data field contains the extracted data matching your pipeline’s output schema.
Webhook signing verification
To verify that webhook requests are genuinely from Ingestly, you can use webhook signing keys.
- Generate a webhook signing key in your organization settings
- Ingestly includes a signature in the request headers
- Verify the signature in your application before processing the payload
Verifying the signature
The X-Ingestly-Signature header contains a timestamp and one or more signatures in the format t=timestamp,v1=signature. During key rotation, the header includes multiple v1= signatures, one for each active key. To verify:
- Parse the header to extract the timestamp (
t=) and signature(s) (v1=)
- Reconstruct the signed payload as
{timestamp}.{raw_body}
- Compute an HMAC-SHA256 hash using your signing key
- Compare the result against each signature using a timing-safe comparison
You must use the raw request body bytes for verification, not a parsed or re-serialized object. If your framework parses the body (e.g., as JSON), the re-serialized output may differ from the original payload and verification will fail. Read the raw body before any middleware processes it.
Retry behavior
If your webhook endpoint returns a non-2xx status code, Ingestly retries the delivery:
- Up to 3 retries with exponential backoff
- Retry intervals: 1 minute, 5 minutes, 30 minutes
- After all retries fail, the callback is marked as failed (the run itself is not affected)
Testing locally
To test webhooks during development, use a tunnel service to expose your local server:
- Start your local webhook endpoint
- Use a tunneling tool to get a public URL
- Configure the callback output with the public URL
- Upload a test document to trigger the pipeline
Use your production webhook signing key verification in development too, to catch integration issues early.