Create one job
Send a target URL, JSON body, and future run time to the scheduling API.
Quickstart
This quickstart takes you from account creation to a real scheduled HTTPS delivery with retries, logs, cancellation, and dashboard monitoring.
curl -X POST https://webhookscheduler.com/api/v1/schedule \
-H "Content-Type: application/json" \
-H "Authorization: Bearer wh_live_YOUR_KEY" \
-d '{
"url": "https://api.example.com/webhook",
"method": "POST",
"body": { "event": "trial.reminder" },
"runAt": "YYYY-MM-DDT09:00:00.000Z",
"idempotencyKey": "trial-reminder:user_123"
}'Send a target URL, JSON body, and future run time to the scheduling API.
Open the dashboard to inspect queued, delivered, failed, retrying, and canceled jobs.
Use HTTPS targets, idempotency keys, retries, and visible logs from the start.
Start from the webhook scheduler tool or create a free account directly. The dashboard is where you confirm jobs, inspect delivery attempts, and manage API keys.
Open /dashboard/api-keys, create one API key, and store it in your backend environment. Never expose live API keys in frontend code or public no-code pages.
Use POST /api/v1/schedule to create a delayed HTTP job. The request body contains the public HTTPS URL, method, JSON payload, optional idempotency key, and ISO run time.
await fetch("https://webhookscheduler.com/api/v1/schedule", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${process.env.WEBHOOK_SCHEDULER_API_KEY}`
},
body: JSON.stringify({
url: "https://api.example.com/webhook",
method: "POST",
body: { event: "trial.reminder" },
runAt: new Date(Date.now() + 60 * 60 * 1000).toISOString(),
idempotencyKey: "trial-reminder:user_123"
})
});After scheduling, open the dashboard to see status, target host, timing, attempts, response code, latency, and retry state. Use the job detail page when a customer or automation needs proof of what happened.
Pending jobs can be canceled before dispatch. Timeouts, network errors, 408, 425, 429, and 5xx responses retry with exponential backoff according to your plan; other 4xx responses are final and are not retried. Each attempt stays visible for debugging.
import fetch from "node-fetch";
export async function scheduleWebhook() {
return fetch("https://webhookscheduler.com/api/v1/schedule", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${process.env.WEBHOOK_SCHEDULER_API_KEY!}`
},
body: JSON.stringify({
url: "https://api.example.com/webhook",
body: { event: "follow_up" },
runAt: new Date(Date.now() + 10 * 60 * 1000).toISOString()
})
});
}Yes. Use /try to schedule a real delivery, cancel it while pending, or watch the HTTP result without creating an account.
Yes, as long as the destination is a public HTTPS webhook URL and the payload is valid JSON.
Transient failures do: timeouts, network errors, 408, 425, 429, and 5xx responses retry with exponential backoff according to plan limits. Other 4xx responses are final and are not retried. Each attempt is visible in the dashboard.
Start with the free plan, test a real delivery, then upgrade when the workflow becomes production critical.
Try a webhook