Cloudflare Workers cron (UTC) or a Sume schedule with a timezone?
Worker cron triggers run on UTC and take up to 15 minutes to propagate. Sume schedules take an IANA timezone and a skip-or-reject overlap rule.

Use a Sume schedule when the clock is yours to define in local time, and a Worker cron trigger when other logic must run first. Cloudflare's docs say Cron Triggers execute on UTC and that adding, updating or deleting one can take up to 15 minutes to propagate. A Sume schedule takes a 5-field cron expression with an IANA timezone, so local time is built in.
Side by side
| Question | Cloudflare Cron Triggers | Sume schedule |
|---|---|---|
| Time basis | UTC only | IANA timezone chosen per schedule |
| Syntax | Five fields plus most Quartz-style extensions (L, W, #) | 5-field cron expression |
| Change latency | Up to 15 minutes to propagate | Edits are made in the dashboard |
| Overlap | The page does not address overlapping runs | Only one run active at a time; skip or reject |
| Default spend ceiling | Not applicable | $1.00 per run unless set; a per-request value can only lower it |
When the Worker owns the clock
Choose this when something must happen before Sume runs, such as checking inventory, and a plain cron schedule cannot express it. Create the Sume schedule with the API trigger, since its trigger type is fixed when you create it, and enable api_trigger_enabled. Your key needs actions:read and actions:write. The Worker then calls:
Remember the other fixed choice. A Sume schedule's trigger, cron or API, is set when it is created, and create and edit are dashboard-only, so decide up front which clock owns the run. A schedule meant for a Worker is best created as an API-trigger schedule. A cron schedule can also enable api_trigger_enabled, but its trigger type stays cron.
curl -sS -X POST "https://api.sume.com/v1/actions/$ACTION_ID/runs" \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"on_active_run":"reject"}'Pick the overlap rule on purpose
Cloudflare's page does not say what happens when a run is still going at the next tick, so a Worker needs its own guard. Sume gives you one: skip returns 200 with status skipped and skip_reason of previous_run_active, and records a run row, while reject returns 409 action_run_in_progress and records none. Use reject when a dropped trigger should look like an error in the Worker's logs, and skip when overlap is harmless.
Because Worker triggers can lag behind a change by up to 15 minutes, do not use a freshly edited cron string to test a deadline. Run the API call by hand first, and check the receipt's status_url until next_action is no longer poll_status.
A note on defaults
A scheduled run has a $1.00 default ceiling, and a request can only lower it. Sending a value is therefore a safe way to tighten a single run, never to loosen it. Keep the key in a Worker secret, and rotate it if a log ever captures the header.
Sources
More in Integrations
- GitHub Actions repository variable for the image model id: no commit
Keep the Sume image model id in a GitHub Actions repository variable, so a gpt-image-1 replacement is a settings change or one gh command, not a pull request.
- Intercom outbound message with a Sume avatar clip: email or in-app
Intercom's create-message API sends in_app, email or whatsapp with an HTML or plain body. It documents no video field, so link a Sume clip. How to set it up.
- jobs_wait for 20 transcription jobs in one MCP call
The hosted MCP jobs_wait takes up to 20 job_ids, wait_for all or any, and include_results returns each finished transcript. Retry slices of 55 seconds.
- jobs_wait outcomes: wait_slice_expired, operator_stopped, omitted
What each jobs_wait answer means on Sume's hosted MCP and what your agent should do next: call again, stop waiting on stopped ids, or read omitted results.
Written by Sume