VICIfast

Help / Reseller program

Debugging webhook delivery failures

Read the per-endpoint delivery log, decode HTTP errors, and replay failed events.

Click an endpoint at /dashboard/reseller/webhooks to open its delivery log — the last 100 attempts with status, HTTP code, response body excerpt, and retry schedule. The log is the first place to look when an upstream system stops receiving events.

Log columns

  • Event — the event type and a short payload preview. Click to expand the full JSON we POSTed.

  • StatusPENDING (queued), SUCCESS (2xx returned), FAILED (non-2xx but retryable), EXHAUSTED (8 attempts up, no longer retried).

  • HTTP — your endpoint's response code; missing means we couldn't reach it (DNS, TLS, connection refused).

  • Attempts — how many tries so far out of 8. The next-attempt timestamp shows when we'll retry.

  • Response excerpt — first 500 bytes of your endpoint's response body. Often contains the actual error message from your framework.

Common failure patterns

401 / 403 — signature mismatch

Your verification logic is rejecting the request. The most common cause: hashing a re-stringified copy of the body instead of the raw bytes. Frameworks like Express need app.use(express.raw()) on the webhook route — JSON middleware mutates the payload before you hash it. Fix the verifier, then hit "Replay" on a failed delivery to confirm.

404 — endpoint moved

Edit the endpoint URL in the dashboard. Existing PENDING deliveries pick up the new URL on their next retry.

5xx — your service was down

We back off exponentially: 1 min, 5 min, 30 min, 2 hours, 12 hours, 24 hours, 48 hours, 72 hours. As long as your endpoint recovers within that window the event lands. If it doesn't, the delivery flips to EXHAUSTED and stays in the log for audit but won't fire again.

Connection / TLS errors

Cert expired, DNS pointing at the wrong host, firewall blocking our egress IPs. The "Response excerpt" column will say ECONNREFUSED, certificate has expired, etc. Fix the underlying infra issue, then "Replay" failed deliveries.

Manually replaying a delivery

Each row has a Replay action that re-queues the same payload + delivery id. The Delivery-Id is unique per attempt-set so your side can dedupe — replaying intentionally reuses the original id, which means if you've already processed it, your idempotency layer will short-circuit and that's expected.

Rotating the signing secret

Delete the endpoint and add a fresh one. The new endpoint gets a new secret revealed once at creation time. Outstanding deliveries from the deleted endpoint stay in the log for audit but won't fire — recreate any URL you need on the new endpoint.

What we don't retry

If your endpoint returns 410 (Gone), we mark the delivery EXHAUSTED immediately and stop retrying that event. Use 410 from your side when you've intentionally taken the endpoint down for good.

Tags: reseller, webhooks, integrations, debugging