This page covers the most common issues you may encounter when running Webhook Debugger & Logger and explains how to resolve each one. Issues are grouped by area so you can jump to the section that matches your symptom.Documentation Index
Fetch the complete documentation index at: https://supahooks.ar27111994.dev/llms.txt
Use this file to discover all available pages before exploring further.
Authentication issues
Every request returns 401
Every request returns 401
authKey is configured, all management endpoints and the dashboard require the key. Pass it using one of these methods:authKey you configured in the actor input.Webhook ingest returns 401
Webhook ingest returns 401
authKey is set, webhook ingest (/webhook/:id) also requires authentication — it is not public. Add the key to your provider’s webhook configuration as a header or query parameter.For providers that support custom headers, set:?key=<your-key> to the webhook URL./health and /ready are never protected by authKey. These endpoints are intentionally public so orchestrators and load balancers can probe them regardless of your auth configuration.403: IP blocked
403: IP blocked
allowedIps list. Check your egress IP address and add it to the allowlist in your actor input.https://api.ipify.org to confirm your public egress address.Signature verification failures
Stripe: signatureValid is false
Stripe: signatureValid is false
-
Secret mismatch —
signatureVerificationSecretmust match the signing secret shown in your Stripe dashboard. Stripe signing secrets start withwhsec_. Copy and paste the value directly to avoid whitespace errors. -
Clock skew — Stripe includes a timestamp in its
Stripe-Signatureheader. If the timestamp is older than the configuredtolerance(default: 300 seconds), verification fails. Check that your system clock is accurate and increasetoleranceif needed.
GitHub: signature failing
GitHub: signature failing
signatureVerification.secret exactly matches the secret you entered in the GitHub webhook settings. GitHub uses sha256=<hex> in the X-Hub-Signature-256 header, so the algorithm must be sha256.Double-check for trailing whitespace or newline characters — these are a common source of mismatches when copying secrets from a terminal or text editor.Slack: signature failing
Slack: signature failing
X-Slack-Request-Timestamp header and rejects requests that are too old, even if the HMAC matches. If your system clock is skewed, Slack’s own servers will send timestamps that fall outside your tolerance window.Steps to diagnose:- Verify your system clock is synchronized (NTP).
- Check the
tolerancesetting — the default is 300 seconds. If your environment has a large clock offset, increase this value. - Confirm
signatureVerificationSecretmatches the signing secret from your Slack App configuration under Basic Information > App Credentials > Signing Secret.
Payload issues
413: request body too large
413: request body too large
maxPayloadSize (default: 10 MB, maximum: 100 MB). You have two options:- Increase the limit — raise
maxPayloadSizein your actor input up to104857600(100 MB). - Reduce the payload — strip unnecessary fields or compress the body before sending.
400: JSON Schema validation rejected the payload
400: JSON Schema validation rejected the payload
jsonSchema you configured. To diagnose:- Retrieve the raw payload from
/logs/:logId/payloadto see exactly what was sent. - Validate the payload against your schema using a tool like the JSON Schema Validator.
- Adjust either your schema or the payload structure to align them.
jsonSchema input via hot-reload.Body shows as a string instead of a parsed object
Body shows as a string instead of a parsed object
-
enableJSONParsingisfalse— set it totruein your actor input. When enabled, the actor automatically parsesapplication/jsonbodies into structured objects. -
Missing or incorrect
Content-Typeheader — the actor uses theContent-Typeheader to decide whether to parse the body. Ensure your sender is settingContent-Type: application/json.
Replay and forwarding issues
Replay returns 400: Missing url parameter
Replay returns 400: Missing url parameter
url query parameter is required for every replay request. Add the destination URL to your replay call:Replay returns an SSRF error
Replay returns an SSRF error
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16, and the cloud metadata address 169.254.169.254.Use a publicly routable hostname or IP as your replay destination. If you are testing locally, use a tunnel service to expose your local server with a public URL.Forwarding is not reaching the destination
Forwarding is not reaching the destination
forwardUrlis correct and publicly reachable — confirm the URL responds to POST requests from the public internet.- Circuit breaker — if the destination was unreachable or returning errors, the circuit breaker may have tripped. Wait approximately 30 seconds for it to reset automatically.
maxForwardRetries— the default is 3. If all retries are exhausted without a successful response, the forward attempt is marked as failed.- SSRF protection — forwarding to private or reserved IP ranges is blocked for the same reason as replay (see above).
error or 5xx to be notified immediately when forwarding fails.Streaming issues
SSE stream returns 503
SSE stream returns 503
503 Service Unavailable.To resolve this, close any idle or unused SSE connections. Once the active connection count drops below the limit, new connections will be accepted.No events appearing in the SSE stream
No events appearing in the SSE stream
-
Auth header missing — if
authKeyis configured, the stream endpoint requires authentication. Pass the key as a header: -
Webhook ID has expired — the stream delivers events for all active webhooks in the run. If all webhooks have expired, no events will arrive. Call
GET /infoto confirm you have at least one active webhook and check itsexpiresAttime.
General issues
Webhook URL returns 404
Webhook URL returns 404
- The
retentionHourswindow elapsed and the webhook stopped accepting traffic. - The webhook ID was typed incorrectly.
- The actor was restarted and a new set of webhook IDs was generated.
GET /info to see all currently active webhooks and their expiry times. Use one of the returned IDs for your requests.Logs are not showing recent events
Logs are not showing recent events
/logs endpoint queries DuckDB, which syncs from the Apify Dataset asynchronously. There is typically a short lag between when an event is captured and when it appears in query results.The Apify Dataset is the source of truth. If an event was captured, it exists in the Dataset even before DuckDB reflects it.To check the current sync status, call GET /system/metrics:sync.lastSyncTime, sync.itemsSynced, and sync.errorCount. If errorCount is rising, there may be a sync issue worth investigating./ready returns 503
/ready returns 503
/ready endpoint continues returning 503 after 30 seconds, check the actor logs for initialization errors. Restarting the actor typically resolves transient startup failures./health and /ready are never protected by authKey, so you can always probe them directly without authentication.