Webhooks
Retries & Timeouts

Retries & Timeouts

Retry Behavior

Retry behavior depends on whether the webhook is synchronous or asynchronous — they use two different delivery paths.

Synchronous — WITHDRAW_REQUEST

This event is delivered inline while AbstraPay waits for your approve/deny response. The inline client retries up to 2 times with a 5-second delay between attempts. Only network-level errors are retried:

  • Connection reset (ECONNRESET)
  • Timeout (ETIMEDOUT)
  • Connection refused (ECONNREFUSED)
  • Host unreachable (EHOSTUNREACH)
  • HTTP 5xx, 408, 429 responses

Application-level errors (non-zero error code in the response) are not retried.

Asynchronous — DEPOSIT and WITHDRAW_COMPLETE

These events are delivered through a durable outbox, not inline. If your endpoint is unreachable or returns an error, the outbox retries up to 5 attempts with exponential backoff (~10s, then 20s, 40s, … capped at 15 minutes between attempts). After the attempts are exhausted, the event is moved to a dead-letter queue for manual retry from the management panel (see Management Panel) — nothing is silently dropped.

⚠️

Make your handler idempotent. Because the outbox retries, the same DEPOSIT or WITHDRAW_COMPLETE event may be delivered to you more than once. Deduplicate on the event's idempotencyKey (or another stable id) and ignore duplicates, so you never credit or debit a user twice.


Timeouts

TimeoutValue
Connect10 seconds
Headers10 seconds
Body15 seconds

Ensure your endpoint responds within these limits.