Delivery Guarantees & Retries
We-Link aims to deliver every webhook reliably. Here's how our delivery system works and how to build resilient integrations.
Delivery Guarantees
- At-least-once delivery — We guarantee that every webhook event will be delivered at least once
- Ordering — Events are delivered in the order they are generated, per account
- Timeout — Your endpoint must respond within 30 seconds or the delivery is considered failed
Retry Behavior
If your server fails to acknowledge a webhook (non-2xx response or timeout), We-Link will retry delivery:
| Retry | Delay |
|---|---|
| 1st retry | 1 minute |
| 2nd retry | 5 minutes |
| 3rd retry | 30 minutes |
| 4th retry | 2 hours |
| 5th retry | 12 hours |
After 5 failed attempts, the webhook is marked as undeliverable.
Best Practices
Respond Quickly
Return a 200 OK immediately upon receiving a webhook, then process the data asynchronously on your side:
app.post("/webhook/welink", (req, res) => {
// Respond immediately
res.status(200).send("OK");
// Process asynchronously
processWebhookAsync(req.body);
});
Handle Duplicates
Since We-Link guarantees at-least-once delivery, you may occasionally receive the same event twice. Use the request_id to deduplicate:
async function processWebhookAsync(payload) {
const { request_id } = payload;
// Check if already processed
if (await isProcessed(request_id)) {
return; // Skip duplicate
}
// Process and mark as handled
await handleEvent(payload);
await markProcessed(request_id);
}
Fallback: Manual Polling
If you suspect you missed a webhook, you can always poll for results:
POST /api/v1/get_response
{
"requestId": "req-12345-abcde"
}
tip
Use polling as a fallback mechanism only. Webhooks are the recommended primary delivery method for real-time updates.