Skip to main content

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:

RetryDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes
4th retry2 hours
5th retry12 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.