Scheduled events, delivered over HTTP.
Give jscheduler a schedule and a JSON payload. When the minute arrives it POSTs the event to your endpoint and keeps trying until it gets a real answer. One-time, interval, or cron — no SDK, no runtime to host.
Quickstart
$ curl -fsSL https://cli.jscheduler.com/install.sh | bash$ jscheduler auth login --api-key jsk_...$ jscheduler endpoints create --url https://example.com/hooks$ jscheduler events create --name trial.expiring \ --endpoint <endpoint-id-from-the-command-above> \ --kind CRON --cron "0 9 * * MON-FRI"
The same API key works in the CLI and in plain HTTP. Full walkthrough in the docs.
How it works
- 01Define
POST an endpoint ID, a name, a JSON payload, and a schedule. One-time and interval schedules have one-second resolution.
- 02Claim
A worker leases due work with SKIP LOCKED, so more instances add throughput without firing an event twice.
- 03Dispatch
The occurrence enters a durable outbox, then goes to the endpoint explicitly selected by the schedule.
- 04Prove
Every attempt is recorded. Deduplicate on the occurrence id, and redrive anything that ended uncertain.
Schedules
- ONE_TIME
fireAt: 2030-07-13T09:00:00ZOnce, at an exact minute.
- INTERVAL
intervalSeconds: 15Every N seconds from a start time, without drift.
- CRON
0 9 * * MON-FRIFive-field cron, evaluated in UTC.
Delivery
- Retries
Retryable failures are retried with exponential backoff before a delivery is marked failed.
- Idempotency
Every POST carries an Idempotency-Key header equal to the occurrence id. Retries reuse it.
- Uncertain outcomes
Under NO_DUPLICATE_SENDS, an ambiguous network result stops as UNCERTAIN and waits for your redrive rather than risking a second send.
- Endpoint auth
Per-endpoint tokens are encrypted at rest with AES-256-GCM and decrypted only at dispatch time.
Access
jscheduler is invite-only while it is early. Tell us what you would schedule and we will set up an organization and an API key.