“I want to send a summary email every morning at 8am without running a cron server”
Send a daily report email on a cron schedule
Create one schedule with a 5-part cron expression. Fliq calls your report endpoint every day at the time you set — no server, no node-cron, no missed runs after a deploy.
You have an endpoint that builds and sends a digest — /api/reports/daily. You don’t want to keep a box alive just to call it, and an in-process node-cron stops the moment your dyno restarts. A Fliq schedule is a cron expression stored in Postgres: Fliq fires the HTTP call on time, every time.
The request
POST to /schedules with a 5-part cron expression (UTC). 0 8 * * * is every day at 08:00 UTC.
curl -X POST https://api.fliq.sh/schedules \
-H "Authorization: Bearer fliq_sk_your_token" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/api/reports/daily",
"http_method": "POST",
"cron": "0 8 * * *",
"headers": { "Content-Type": "application/json" },
"body": "{\"report\":\"daily-summary\"}",
"max_retries": 3
}' const res = await fetch("https://api.fliq.sh/schedules", {
method: "POST",
headers: {
"Authorization": "Bearer fliq_sk_your_token",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://yourapp.com/api/reports/daily",
http_method: "POST",
cron: "0 8 * * *", // every day, 08:00 UTC
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ report: "daily-summary" }),
max_retries: 3,
}),
});
const schedule = await res.json();
console.log(schedule.next_run_at); // 2026-06-13T08:00:00Z The response includes next_run_at so you can confirm the first fire time immediately.
What Fliq handles for you
- Cron without a server. The schedule lives in Postgres; Fliq’s scheduler claims and fires it. Nothing in your app needs to stay running.
- Retries on the report call. If
/api/reports/dailyis briefly down at 08:00, each spawned run still honoursmax_retrieswith backoff — a flaky deploy window won’t silently skip a day. - History per run. Every daily fire is a separate execution with its own status code and timing, so you can see exactly which mornings the report actually went out.
- Dynamic by API. Change the time or delete the schedule with one call — no redeploy, unlike a cron baked into
wrangler.tomlor a crontab.
Related
- Jobs & Schedules — the schedule object and cron syntax
- Schedule background jobs from a Cloudflare Worker
Reference: /docs/jobs-and-schedules