Webhooks are available subject to prior agreement and may involve an additional fee.
When to use webhooks (vs polling / SQS)
Use webhooks if you:- Want an event-driven integration without Amazon SQS
- Already operate webhook receivers for other systems
- Prefer HTTP callbacks over queue-based delivery
- Need notifications specifically for Adaptive Decision completion
- Are AWS-native and want queue-based scaling and durability
- Need notifications for fraud / quality / classification outputs
- Want the simplest integration and lowest operational complexity
How it works (high level)
- You provide Resistant AI with a callback URL (your public HTTPS endpoint).
- Resistant AI (via Svix) sends a webhook when Adaptive Decision completes for a submission.
- Your receiver verifies the webhook signature and acknowledges the event.
- Your system fetches the full decision result from the Documents API:
GET /v2/submission/{submission_id}/decision
Setup requirements
To enable webhooks, you will provide:- Callback URL: a public HTTPS endpoint that can receive
POSTrequests - Signature verification: you should verify Svix signatures (recommended)
Security: signature headers
Webhook requests include these headers:webhook-idwebhook-timestampwebhook-signature
- validate the signature matches your expected signing secret
- validate timestamp tolerance to prevent replay attacks
Keep signature verification strict. Do not accept unsigned events.
Events and payloads
Webhooks are delivered with an event object containing:typeversiontenant_idpayload
Supported event types
Your webhook integration currently receives:documents.adaptive_decision.finished
Fraud/quality/classification events are not currently delivered via webhooks.
Example payload: adaptive decision finished
This is an example shape. Always treat the webhook as a notification, then fetch the authoritative result from/decision.
- Verify signature
- Deduplicate (see below)
- Call
GET {result_url}(or build it fromsubmission_id) to fetch the full decision payload
Operational notes
Retries and idempotency
Svix retries delivery using exponential backoff on failures. Your receiver should be idempotent:- treat webhooks as at-least-once delivery
- deduplicate using a stable key such as:
- the
webhook-idheader, or (submission_id, event_type, version)tuple
- the
Updating configuration
If you need to:- update your callback URL, or
- rotate / update signing configuration,
Testing
During onboarding, you can request a test event to validate delivery and signature verification.Troubleshooting
Webhooks not arriving
- Confirm your callback URL is publicly reachable over HTTPS
- Check firewall/WAF rules and request logs on your side
- Confirm you have provided the correct endpoint to Resistant AI
Signature verification failing
- Confirm you are using the correct signing secret for your endpoint
- Confirm your clock is accurate (timestamp validation can fail if system clock is skewed)
- Log
webhook-id,webhook-timestamp, andwebhook-signaturefor debugging
Duplicate events
- Expect duplicates under retry conditions; implement idempotency and deduplication (see above)
I need notifications for fraud/quality/classification
- Use Polling (default) or Amazon SQS (optional add-on), as webhooks currently notify only
/decision.