Find the cause
- Open Dashboard → Jobs and filter on Status → Failed (or Retrying).
- Click the job. The panel at the top names the problem, explains it and gives the next step: the same words as the entries below.
- The Delivery timeline lists every attempt with its status code, duration and the first 1,500 characters of your endpoint’s answer.
With alerts on (the default), you also get one email per webhook that cannot be delivered, with the same diagnosis and a fix link. Choose when in Settings → Alerts.
A delivery failed
A delivery succeeds when your endpoint answers with a 2xx status within 10 seconds. Anything else is a failed attempt. Find the status code of the last attempt:
Timed out (no status code)
Retried automaticallyYour endpoint did not answer before the delivery timeout. This is usually a slow handler or a temporary outage.
- In Make
- Rare: a Custom webhook answers as soon as it receives the call.
- In your code
- Your handler did not answer within the delivery timeout. Answer
200first, then do the slow work in the background.
Fix: Retries continue automatically. Make the handler respond quickly (acknowledge first, then do the work).
No response (no status code)
Retried automaticallyThe request never reached a working HTTP server: the host could not be resolved, refused the connection, or dropped it.
- In n8n
- A self-hosted instance that is down, restarting or not reachable from the internet.
- In your code
- The domain does not resolve, the server is down, or it does not accept HTTPS connections on port 443.
Fix: Retries continue automatically. Check that the domain resolves publicly and the server accepts HTTPS.
HTTP 3xx Redirect
Retried automaticallyYour endpoint answered with a redirect. Webhook Scheduler never follows redirects, so a 3xx counts as a failed attempt and is retried like a 5xx, with the same answer each time.
- In your code
- Usually
httptohttps, a missing or extra trailing slash, or a domain that moved. Use the final URL, the one the redirect points to.
Fix: Use the final URL, the one the redirect points to.
HTTP 401 Unauthorized or 403 Forbidden
Not retriedYour endpoint refused the request. Webhook Scheduler removes Authorization and Cookie headers before delivery, so it cannot send those credentials. On Make or n8n, the webhook itself may require authentication.
- In n8n
- The Webhook node has authentication set (Header Auth, Basic Auth...). Send the header it expects under a name other than Authorization, or turn its authentication off and check the signature in the workflow.
- In your code
- Your auth middleware runs on the webhook route. Exempt it and verify Webhook-Signature instead.
Fix: Send the secret in a custom header your receiver checks (any name except Authorization or Cookie), turn authentication off on that webhook, or verify the Webhook-Signature header instead, then edit and reschedule.
HTTP 404 Not found
Not retriedThe request reached your server, but no route exists at this URL. Retrying the same URL would fail the same way, so it was not retried.
- In n8n
- Workflow 2 is not active, or the URL is the Test URL instead of the Production URL.
- In Make
- The address is mistyped or belongs to a deleted webhook.
- In your code
- A typo in the path, or the route is not deployed on that host.
Fix: Check the path for typos and that the route is deployed, then edit and reschedule.
HTTP 410 Gone
Not retriedThe endpoint says this URL is gone for good. On Make or n8n, that usually means the scenario or its webhook was deleted or turned off. Retrying the same URL would fail the same way, so it was not retried.
- In Make
- The Custom webhook of scenario 2 was deleted, or the scenario was turned off for good. Copy the address from scenario 2 again.
- In n8n
- The webhook was removed from the workflow. Copy the Production URL again.
Fix: Copy the webhook address from your scenario again (or check the route is deployed), then edit and reschedule.
HTTP 400 or 422 Rejected payload
Not retriedYour server received the request but rejected its body or format. The response body below usually says which field is wrong.
- In your code
- Your validation refused the JSON body. Every delivery is sent with Content-Type: application/json.
Fix: Adjust the JSON payload to what the receiver expects, then edit and reschedule.
HTTP 405 Method not allowed
Not retriedThe URL exists, but it does not accept this HTTP method. Many pages only accept GET; webhook receivers usually expect POST.
- In Make
- A Custom webhook accepts POST: check the method of the scheduled webhook.
- In n8n
- The Webhook node’s HTTP Method must match the method you schedule (POST by default).
Fix: Use the method your receiver expects, or point to its webhook route, then edit and reschedule.
HTTP 429 Rate limited or 425 Too early
Retried automaticallyYour server asked to try again later. The delivery is retried with backoff.
- In your code
- Many webhooks scheduled for the same second hit your rate limit. Spread runAt by a few seconds, or raise the limit for this route.
Fix: No action needed unless every attempt is rate limited; then raise the receiver limit.
HTTP 5xx Server error
Retried automaticallyYour server failed while handling the request. This is often temporary, such as a deploy or a crash.
- In your code
- Your handler threw an error or your server was restarting. Your logs at the attempt’s time say which.
Fix: Retries continue automatically. Check your server logs for this request.
Blocked target (not sent)
Not retriedThe URL resolved to a private, local or otherwise unsafe address, so the request was not sent.
- In your code
- The URL resolves to a private, local or reserved address. See Target URL rules.
Fix: Use a public HTTPS endpoint, then edit and reschedule.
Payload too large (not sent)
Not retriedThe JSON payload is larger than the delivery limit, so the request was not sent.
- In your code
- The JSON body is over 100 KB. Send an ID and let the receiver look up the rest.
Fix: Send a smaller payload (for example an ID your receiver can look up), then edit and reschedule.
What is retried, and when it stops
Timeouts, no response, 3xx, 408, 425, 429 and 5xx are usually temporary: the job goes to Retrying and is tried again, 30 seconds after the first failure, then 1 minute, 2, 4 and so on (doubling, at most 6 hours apart). Other 4xx answers would fail the same way every time, so the job goes to Failed at once.
When the last retry fails, the job is Failed and nothing is sent again on its own. A Make scenario or n8n workflow that is down for 10 minutes on Free misses the webhook: fix it, then resend as below.
Fix and resend
A failed job is never changed. Every way to resend creates a new job, with a new ID, and the failed one stays in your history.
Edit and reschedule
On the job page (or in the ··· menu of its row in Jobs), click Edit and reschedule. The schedule form opens with the same URL, method, payload and headers: correct what was wrong, pick a time, and schedule. Use it for every “Not retried” failure above.
Run again
Run again sends the exact same request 30 seconds from now, as a new job. It suits a temporary failure that is fixed now (your server is back up). The job page hides it after a definitive 4xx, since the same request would fail the same way. It works on Delivered and Canceled jobs too, and each run counts toward your monthly quota.
Fix N webhooks: several webhooks share the broken URL
When a webhook fails for a reason tied to its URL (404, 410, a domain that does not resolve, a blocked address; or 5xx, refused connections and timeouts once every retry is used), other webhooks still scheduled to the same URL would likely fail too. The Overview then says so, for example “A webhook to hook.eu1.make.com/…k3f9 couldn’t be delivered (HTTP 410). 2 other scheduled webhooks use the same URL and may be affected.”, with a Fix 3 webhooks button. The alert email has the same link.
Paste the new URL (for example the new Make webhook address). Every scheduled webhook on the old URL switches to it and keeps its ID and time, so a scenario that cancels by ID keeps working. Leave Also resend the failed webhook checked to send the failed one to the new URL in 30 seconds. There is no undo.
Mark handled
Fixed it another way, or it does not matter? Mark handled removes the failure from the Overview’s incidents. It stays in Jobs.
API errors: when our API refuses your request
These are answers from webhookscheduler.com/api/v1/… to your call, not from your endpoint. Nothing was scheduled. Every error is JSON with an error message; most add a code, and validation errors add an issues array naming each field.
runAt must be in the future, an invalid url, a reference with a space or #, a lowercase method or criticality, a header value that is not a string, a body over 100 KB.Still stuck?
Send the job ID (or the request you made, without your API key) via Contact.