Same question for each
Max delay, cancel, retries, logs, alerts, free tier and starting price, taken from each vendor’s own pricing or docs page.
Comparison, checked October 2026
To call a URL hours or days from now and cancel it if plans change, the dedicated services differ mainly on how far ahead they go and how they charge. Posthook’s docs allow up to 365 days ahead with no plan restriction stated, and QStash up to a year on pay as you go (7 days on Free). Webhook Scheduler goes to 7 days on Free and 365 on paid plans. Cronhooks is the cheapest paid plan and the only one here with recurring schedules. In Make, Sleep stops at 5 minutes; n8n’s Wait node documents no maximum.
curl https://webhookscheduler.com/api/v1/schedule \
-H "Authorization: Bearer wh_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/webhook",
"body": { "event": "trial.ends" },
"runAt": "YYYY-MM-DDT09:00:00.000Z"
}'Max delay, cancel, retries, logs, alerts, free tier and starting price, taken from each vendor’s own pricing or docs page.
Checked in October 2026, with every source linked below. A dash means the vendor’s pages do not say.
Webhook Scheduler wrote this page. We kept the wording neutral and point out where another option fits better.
All four dedicated services (Webhook Scheduler, QStash, Cronhooks, Posthook) let you schedule a one-time HTTP call and cancel it through an API before it runs. They differ in three ways. How far ahead: QStash pay as you go and Posthook go to a year, Webhook Scheduler to 365 days on paid plans. How they charge: per message (QStash, retries included in the count), per hook scheduled (Posthook, retries not counted), per schedule (Cronhooks) or per webhook a month (Webhook Scheduler). And what you see after a failure.
Make and n8n are workflow tools rather than schedulers. Make’s Sleep module stops at 300 seconds, so longer waits need a Data Store and a second scenario that polls on a schedule. n8n’s Wait node pauses an execution and stores it in the database for waits over 65 seconds.
| Service | Max delay | Cancel before it runs | Retries |
|---|---|---|---|
| Webhook Scheduler | 7 days on Free, 365 days on paid plans | Yes: API call or dashboard, by job id or reference | Exponential backoff: 4 on Free, 10 on Pro, 14 on Scale |
| Upstash QStash | 7 days on Free, 1 year on pay as you go | Yes: DELETE a message by id | 3 by default, exponential backoff; each retry is billed as a message |
| Cronhooks | — | Yes: delete the schedule by API (pause and resume too) | Retry count and fixed interval, on one-time schedules |
| Posthook | 365 days with postIn (no limit stated for postAt) | Yes: DELETE a hook, plus bulk cancel | 3 fixed on Free; 5 to 15 with exponential backoff on paid plans; not billed |
| Make (Sleep, or Data Store + scheduled scenario) | Sleep: 300 seconds. Data Store workaround: any date, checked at each scheduled run | Workaround: delete the Data Store record | — |
| n8n (Wait node) | No maximum documented | Stop the waiting execution (API: POST /executions/{id}/stop); can also resume on a webhook call | “Retry On Fail” per node |
| Service | Logs | Failure alerts | Free tier | Paid from |
|---|---|---|---|---|
| Webhook Scheduler | Every attempt: status, response body, latency. Kept 7 / 30 / 90 days | Email on final failure, long retries and recovery; flags other webhooks to the same failing URL | 100 webhooks a month | $29/month (100,000 webhooks) |
| Upstash QStash | 3 days on Free, 7 on pay as you go, 14 on fixed plans | Failure callback once retries are used up, then dead-letter queue | 1,000 messages a day | $1 per 100,000 messages (pay as you go) |
| Cronhooks | — | Email on Free, email and Slack on paid plans | 5 schedules, one-time only | $5/month (100 schedules, recurring included) |
| Posthook | 7 days on Free, 30 / 60 / 90 days on paid plans | Email on Free; Slack on paid; webhook alerts on Scale | 1,000 hooks a month | $39/month (20,000 hooks) |
| Make (Sleep, or Data Store + scheduled scenario) | Scenario run history | — | 1,000 credits a month; scheduled runs at least 15 minutes apart | — |
| n8n (Wait node) | Execution history (7 days on Cloud Starter) | — | Cloud trial with 1,000 executions; self-hosted Community Edition | €20/month billed annually (Cloud Starter, 2,500 executions) |
Prices are the lowest paid plan listed on each vendor’s pricing page, before tax. Plans change: check the sources below before you decide.
Recurring jobs on a cron schedule: Cronhooks or QStash. Webhook Scheduler and Posthook focus on one-time calls.
High volume, pay per use, already on Upstash: QStash. Keep in mind that each retry counts as a message.
Delays longer than a few days on a free plan: Posthook’s docs state 365 days with no plan restriction. QStash Free and Webhook Scheduler Free stop at 7 days.
Make or n8n workflows that wait for days and must be cancelable: any of the four services works from an HTTP module. Our Make guide shows the native Data Store method and the HTTP method side by side, with what each costs in credits.
Leaving Pipedream’s delay step: see replacing $.flow.delay. Deeper one-to-one pages: QStash, Cronhooks, cron jobs.
Competitor facts come only from these vendor pages, checked on October 24, 2026. Webhook Scheduler figures come from our pricing page.
QStash on pay as you go and Posthook (with postIn) both go up to a year. Webhook Scheduler goes to 365 days on paid plans. Posthook’s docs give that limit without a plan restriction; QStash Free and Webhook Scheduler Free stop at 7 days.
All four dedicated services: QStash and Posthook delete by id, Cronhooks deletes or pauses a schedule, and Webhook Scheduler cancels by job id or by your own reference. In Make you delete the Data Store record; in n8n you stop the waiting execution.
On QStash, yes: each retry counts as an additional message. Posthook counts only the hook you schedule. Webhook Scheduler counts the webhooks you schedule each month.
Not in one run: the Sleep module stops at 300 seconds. Make suggests splitting the flow into two scenarios, or you can have the first scenario schedule an HTTP call to the second one.
Checked in October 2026 against each vendor’s own pricing and docs pages, linked in the Sources section. A dash means the vendor does not publish that detail.
Start with the free plan, test a real delivery, then upgrade when the workflow becomes production critical.
Try a live webhook