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
| Timeout | Value |
|---|---|
| Connect | 10 seconds |
| Headers | 10 seconds |
| Body | 15 seconds |
Ensure your endpoint responds within these limits.