Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tumban.com/llms.txt

Use this file to discover all available pages before exploring further.

Tumban delivers each webhook with up to three attempts. Behaviour by response:
ResponseAction
2xxDelivered. No further attempts.
429 Too Many RequestsRetry. Tumban honours an integer-seconds Retry-After header (capped at 60 s). Without one, falls back to exponential backoff.
Other 4xxNot retried. Tumban gives up — fix your endpoint and replay manually if needed.
5xxRetry with exponential backoff.
Connection error or timeoutRetry with exponential backoff. The HTTP timeout per attempt is 30 s.

Backoff

Exponential delays between retries: 1s, 2s, capped at 30s. Tumban sleeps before retries 2 and 3 only — there is no sleep after the final attempt.

What gets delivered after the final retry

If all three attempts fail, the scan record is left with webhook_delivered_at unset. The scan itself is not affected — results remain available via GET /api/v2/scans/{scan_id}.

Skipping delivery

If a scan is submitted with no callback_url and the organization has no default_callback_url set, Tumban runs the scan to completion but sends no webhook. Read the result by polling GET /api/v2/scans/{scan_id} instead.

Idempotency

Each delivery attempt sends the same body, including the same scan_id. Treat the scan_id as the idempotency key in your handler — repeated deliveries for the same scan should be a no-op once you’ve recorded the result.