W

Webhook Delivery Log

See every outbound webhook Cheqpoint sent — delivery status, HTTP response codes, attempt count, and timestamps.

What is the Webhook Delivery Log?Growth+

Every time Cheqpoint fires a webhook — when a request is submitted, approved, rejected, or an SLA is breached — the delivery attempt is logged. The Webhook Delivery Log in Settings → Webhooks gives you a table view of every attempt: what was sent, whether it succeeded, and how many retries were needed.

This is particularly useful when your integration is failing silently — the log surfaces the HTTP response code and timestamp so you can pinpoint the problem without combing through server logs.

What each row shows

ColumnWhat it means
DateWhen the delivery attempt was made.
TypeThe event type — e.g. request.submitted, request.approved, sla.breached.
StatusHTTP response code from your server. 2xx = success, 4xx/5xx = failure.
URLThe target URL the webhook was sent to.
AttemptsHow many times Cheqpoint tried to deliver this event. 1 = delivered first try, 2+ = retries were needed.

Retry behaviour

When a webhook fails (non-2xx response or no response), Cheqpoint retries automatically with exponential back-off. The number of attempts depends on your plan:

PlanMax attemptsDelivery log
Free1 (no retry)
Starter1 (no retry)
Growth3Yes
Business5Yes
Enterprise5Yes

Retries run every 5 minutes via the background job. A delivery is marked permanently failed after the maximum attempts are exhausted.

SDK: retryable flag

When polling for a decision, the approval status endpoint returns an optional retryable field. If a request was rejected because of a timeout or SLA breach (not because a human declined it), retryable is true. This signals to your SDK integration that it's safe to re-submit the request rather than treating it as a final human rejection.

GET /api/approvals/:id — response example
{
  "id": "req_abc123",
  "status": "REJECTED",
  "retryable": true,          // timeout or SLA breach — safe to resubmit
  "decisionReasonCode": "sla_breached",
  "decidedAt": "2026-07-02T09:31:00Z"
}

retryable is false (or absent) when a human explicitly rejected the request — in that case, re-submitting is the wrong behaviour.

Troubleshooting common failures

Status 401 / 403

Your receiving endpoint requires authentication. Add a shared secret as a query param or header and validate it server-side.

Status 500 from your server

Your webhook handler is throwing. Check your server logs for the payload Cheqpoint sent — it's available in the Developer → Request Logs page.

No attempts logged at all

The request may not have had a callbackUrl / webhookUrl set, or outbound webhooks aren't configured. Check Integrations → your integration → Notification URLs.

Attempts = 1, status 200, but my app didn't process it

A 200 response means your server received and acknowledged the payload. The processing failure is downstream — check your own application logs.