Skip to content

Deliveries & redelivery

Every outgoing webhook is logged. Open Dashboard → Webhooks to see a table of recent deliveries, with one row per event attempt.

Each row shows:

  • Time — when the event was created.
  • Event — the event type (license.created, license.refunded, etc.).
  • URL — your configured License Webhook URL at the time of delivery.
  • Status — one of:
    • Delivered (green) — your endpoint returned 2xx.
    • Retrying (amber) — last attempt failed, the next retry is scheduled.
    • Failed (red) — all attempts exhausted. Keylight has given up automatically retrying.
  • Actions — for non-succeeded rows, a Redeliver button.

Filter chips at the top let you narrow to a single status.

Keylight retries failed deliveries on this schedule, then gives up:

AttemptWhenWhat’s stored on the row
1At event timelast_status, last_response_snippet, attempt_count = 1
2+1 minuteupdated; row stays Retrying
3+5 minutesupdated; row stays Retrying
4+30 minutessuccess → Delivered  ·  non-2xx → Failed

A delivery is Delivered the first time your endpoint returns any 2xx. Failed rows can still be replayed manually with the Redeliver button — for example, after you’ve fixed a bug in your handler.

Click Redeliver on any non-succeeded row to make Keylight send the exact same envelope to your endpoint again — same id, same body, same signature.

This is the right tool for:

  • Replaying after fixing a bug in your handler (your handler should be idempotent on event.id, so replaying is safe).
  • Diagnosing why a particular event failed — every attempt is captured in the row’s last_status and last_response_snippet.

For privacy and storage, Keylight does not keep:

  • The headers of your endpoint’s response (only the status code and a 500-character snippet of the body).
  • The full response body if it exceeds 500 characters.
  • Any other request you made to your server. Webhook deliveries are scoped to the Keylight → you direction only.
SymptomLikely causeFix
last_status = 401 and last_response_snippet mentions signatureYour handler rejected the HMACRecompute the secret from Settings → Integrations and confirm constant-time comparison
last_status = 404Your URL has changedUpdate License Webhook URL in Settings → Integrations
last_status = 500 and last_error is emptyYour handler threwInspect your server logs — X-Keylight-Delivery-Id in the headers gives you the row to correlate
last_error mentions DNS / TLS / connection refusedEndpoint down or unreachable from CloudflareConfirm the URL is publicly reachable over HTTPS
All events show Failed within minutes of each otherEndpoint outageOnce recovered, filter to Failed and Redeliver in batches