Trasys
Webhooks

Delivery Logs & Retries

Understand the webhook delivery log, Trasys's two-attempt retry policy with a 60-second backoff, and how to debug and re-test failed webhook deliveries.

Delivery log

Every attempt Trasys makes to deliver a webhook is recorded. You can view the log in the dashboard by clicking an endpoint row and expanding the delivery history.

Each record shows:

FieldDescription
EventThe event type that was delivered
Attempt1 (initial) or 2 (retry)
StatusHTTP status your endpoint returned, or 0 for network/timeout errors
DurationRound-trip time in milliseconds
SuccessWhether the response was 2xx
BodyFirst 500 characters of your endpoint's response body
TimeWhen the delivery was attempted

Retry policy

Trasys uses a two-attempt delivery policy:

  1. Attempt 1 — fires immediately when the event occurs.
  2. Attempt 2 — fires 60 seconds later if attempt 1 did not receive a 2xx response or timed out.

After two failed attempts, no further retries are made. You can inspect the failed deliveries in the log and use the Test button to re-send a test.ping event to verify your endpoint is reachable.

The retry queue is database-backed, so pending retries survive API server restarts.

Trasys does not guarantee exactly-once delivery. Under rare conditions (e.g., network timeout where the server received but could not respond), your endpoint may receive the same event twice. Make your handlers idempotent using the incidentId or ruleId in the payload.

Timeout

Each delivery attempt has a 10-second timeout. If your endpoint does not respond within 10 seconds, the attempt is marked as failed (status: 0, body: "Timed out after 10s").

Best practice: return 200 immediately and process the event asynchronously.

app.post('/webhook', (req, res) => {
  res.sendStatus(200);          // respond fast
  processEventAsync(req.body);  // handle in background
});

Test delivery

You can send a test.ping event to any endpoint from the dashboard without waiting for a real event. The test delivery is logged just like a real one.

Test payload:

{
  "event": "test.ping",
  "data": {
    "type": "test.ping",
    "message": "Test webhook from Trasys",
    "timestamp": "2026-06-18T10:00:00.000Z",
    "projectId": "..."
  },
  "attempt": 1
}

Viewing via API

GET /webhooks/:projectId/endpoints/:endpointId/deliveries

Returns the last 50 delivery records for an endpoint (requires user session auth).

On this page