“my webhook delivery to a third party keeps failing and I need it to retry automatically with backoff”
Retry a failed webhook automatically, with exponential backoff
Hand the delivery to Fliq instead of retrying inline. It re-sends on any non-2xx, backs off exponentially, and keeps a full attempt log — no retry loop in your code.
You call a partner’s API and it 500s, or times out, or rate-limits you. Retrying inline blocks your request and dies if your process restarts. Instead, schedule the call as a Fliq job: it fires (almost) immediately, and on any non-2xx response Fliq retries with exponential backoff until it succeeds or exhausts max_retries.
The request
Create a job that POSTs to the downstream endpoint. Set scheduled_at to now and max_retries to how many attempts you want.
curl -X POST https://api.fliq.sh/jobs \
-H "Authorization: Bearer fliq_sk_your_token" \
-H "Content-Type: application/json" \
-d '{
"url": "https://partner.example.com/webhooks/order-created",
"http_method": "POST",
"scheduled_at": "2026-06-12T10:00:00Z",
"headers": { "Content-Type": "application/json" },
"body": "{\"order_id\":\"ord_123\",\"total\":4999}",
"max_retries": 5
}' const res = await fetch("https://api.fliq.sh/jobs", {
method: "POST",
headers: {
"Authorization": "Bearer fliq_sk_your_token",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://partner.example.com/webhooks/order-created",
http_method: "POST",
scheduled_at: new Date().toISOString(), // fire now
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ order_id: "ord_123", total: 4999 }),
max_retries: 5,
}),
});
const job = await res.json();
console.log(job.id); // job_01hx... That’s it — one POST and the delivery is now Fliq’s problem, not yours.
What Fliq handles for you
- Retries with backoff. Any non-2xx (or a timeout) consumes a retry; Fliq waits, then re-sends, backing off exponentially between attempts. You don’t write a retry loop.
- Crash recovery. The attempt lives in Postgres. If a worker dies mid-flight, a reaper reschedules it — the retry isn’t lost when a process restarts.
- Full history. Every attempt is recorded with its status code and duration, queryable per job:
curl https://api.fliq.sh/jobs/job_01hx.../executions \
-H "Authorization: Bearer fliq_sk_your_token"
- Alerts on permanent failure. Wire up an alert channel and Fliq notifies you only when a job exhausts its retries — the signal that actually matters.
Related
- Retries & Billing — how attempts and backoff work
- Why we built Fliq — the reliability story behind the API
Reference: /docs/retries