summarybulletsownersparticipantsevidencelatestEvidenceTimestampsignificance
Webhook access is available on plans that include operational delivery. If webhook management is unavailable for your API key, use filtered polling endpoints instead.
- subscribe to
radar,signal, or both - manage up to 5 webhook endpoints per account
- receive the same canonical event payloads used elsewhere in the API
How It Works
- You register a webhook with an HTTPS URL and the event types you want (
radar,signal, or both). - Shoal’s event poller checks for new events every ~60 seconds.
- When a matching event is found, Shoal queues a delivery and POSTs the event payload to your URL.
- Your endpoint must respond with a
2xxstatus within 10 seconds. Any other response triggers retries.
Payload Format
Every webhook delivery is a POST request with these headers and body:Headers
Body
globalSummary->summarybulletSummary->bulletseventOwner->ownerseventParticipants->participantsposts->evidencelatestPostTimestamp->latestEvidenceTimestampsignal->significance
Verifying Signatures
Every delivery includes anX-Shoal-Signature header containing an HMAC-SHA256 signature of the request body, using the secret returned when you created the webhook. Always verify this signature to confirm the request came from Shoal.
Python
JavaScript
Retry Policy
Failed deliveries are retried with exponential backoff:
After 5 failed attempts, the delivery is marked as
failed. You can inspect failed deliveries via GET /v1/webhooks/:id.
Auto-Disable
If a webhook accumulates 50 consecutive failed deliveries with no successes in between, it is automatically disabled (active set to false). Re-enable it with PATCH /v1/webhooks/:id after fixing your endpoint.
Limits
Example: Receiving Webhooks
A minimal Express server that receives and verifies Shoal webhook events:JavaScript
Python