For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Go to app
DocumentationAPI Reference
DocumentationAPI Reference
  • API Reference
    • Introduction
    • Users
    • Taskflow
    • AI Task Builder
    • Studies
    • Representative sample studies
    • study-collections
    • Filter Sets
    • Participant Groups
    • Custom Groups
    • Study Distribution
    • Submissions
    • Bonuses
    • Messages
    • Workspaces
    • Projects
    • Surveys
    • Webhooks
      • Subscribing
      • Receiving
      • Event Delivery and Retry Logic
      • Persistent Failures and Disabling Logic
      • Idempotency and the X-Event-ID Header
      • Handling event order with X-Timestamp
      • Verifying
      • GETList all subscribable event types
      • GETList all secrets
      • POSTCreate/replace a secret
      • GETList all subscriptions
      • POSTCreate a subscription
      • GETRetrieve a subscription
      • POSTConfirm a subscription
      • DELDelete a subscription
      • PATCHUpdate a subscription
      • GETGet subscription events
    • Invitations
    • Reward Recommendations
    • Testing
    • Well Known Endpoints
Go to app
LogoLogo
On this page
  • When Retries Apply
  • Retry Behavior
  • After Retries Are Used Up
API ReferenceWebhooks

Event Delivery & Retry Logic

|View as Markdown|Open in Claude|
Was this page helpful?
Previous

Receiving

Next

Persistent Failures and Disabling Logic

We are committed to reliable event delivery, even in the face of temporary network issues or service disruptions. Our system automatically retries failed webhook deliveries using exponential backoff with full jitter to maximize success without overwhelming your infrastructure.

When Retries Apply

Retries run only when the delivery fails with a non-2xx HTTP response or an HTTP request failure (e.g. connection errors, timeouts). Other errors are not retried.

Retry Behavior

We make up to 13 delivery attempts in total (1 initial attempt + 12 retries). The first retry happens after 1 minute; subsequent retries use exponential backoff (the maximum wait doubles with each retry), with full jitter so the actual wait before each retry is random between 0 and that maximum — helping spread load and prevent retry bursts.

AttemptMax delay before retry (full jitter; actual delay is 0..max)
InitialImmediate
Retry 11 min
Retry 22 min
Retry 34 min
Retry 4+Doubles each time (8, 16, 32 … up to 2048 min)

After Retries Are Used Up

If all 13 attempts fail (non-2xx or HTTP failure), the delivery is marked failed. Any other type of error does not trigger retries. Delivery stops after 13 attempts or the 48-hour cut-off, whichever happens first (with backoff and jitter, the cut-off may be reached before all 13 attempts are used).

We use exponential backoff with full jitter to help ensure high delivery success without retry storms or system overloads.