Testing with webhook.site
For quick testing, use webhook.site to get a temporary endpoint URL. It shows you the exact payload Reducto sends.Submitting jobs
Include your webhook URL in the async configuration:/parse_async, /extract_async, /split_async, /pipeline_async.
Webhook payload
When the job completes, your endpoint receives:status is either Completed or Failed. Use job_id to retrieve results with client.job.get().
Handling webhooks
Validating requests
Since direct webhooks lack cryptographic signing, validate requests using a secret token in metadata:Troubleshooting
Webhook not received
Webhook not received
- Verify your endpoint URL is publicly accessible (not localhost)
- Ensure your endpoint returns 2xx status codes
- Check your server logs for incoming requests
Webhook received but job retrieval fails
Webhook received but job retrieval fails
Job IDs expire after 12 hours. Retrieve results promptly after receiving the webhook.
Duplicate webhooks received
Duplicate webhooks received
Reducto retries failed deliveries. Make your handler idempotent by tracking processed job IDs.
Best practices
- Use HTTPS for your webhook endpoint
- Validate requests using the token-in-metadata pattern
- Return quickly: Return 2xx immediately, process results asynchronously
- Be idempotent: Handle duplicate deliveries gracefully
- Log everything: Direct webhooks have no dashboard, so log for debugging