Scheduler
scheduler runs named jobs on a schedule (or immediately) and delivers work to events (PutEvents) and/or queue (SendMessage). It MAY also Produce to streams for scheduled log markers.
Status: Preview — all five schedule operations are live; expressions use UTC; durable state in tables. Job targets are queue (not streams-as-SQS).
Concepts
| Term | Meaning |
|---|---|
| Schedule | Named job with timing expression, state, and target |
| Expression | at(), rate(), or cron() in UTC (see below) |
| Target | Events entry or queue message (optional streams Produce) |
| State | ENABLED, DISABLED, or COMPLETED (one-shot after fire) |
Access
| Hostname | scheduler.eu-central-1.cloud.skippr.io |
| Protocol | Cloud JSON (X-Amz-Target: CloudScheduler.* or AWS-shaped Scheduler.*) |
| Auth | SigV4 service name scheduler via gateway |
| Region | eu-central-1 |
Operations
| Operation | Notes |
|---|---|
CreateSchedule | Name, ScheduleExpression, Target, optional State |
UpdateSchedule | Change expression, target, or state (e.g. disable) |
DeleteSchedule | Remove schedule and list index |
GetSchedule | Full schedule including next FireAt |
ListSchedules | Schedule names for the tenant |
Schedule expressions (UTC)
at(2026-07-26T14:30:00) # one-shot
rate(5 minutes) # recurring (minutes, hours, days)
cron(0 9 * * *) # 09:00 UTC daily (5-field cron)For integration tests you may use immediate: true on create (native JSON) to fire on the next worker tick.
Targets
Queue (native JSON):
{
"target": {
"queue_name": "jobs",
"message_body": "{\"task\":\"run\"}"
}
}Events (native JSON):
{
"target": {
"source": "app.scheduler",
"detail_type": "JobDue",
"detail": "{\"id\":1}"
}
}AWS-shaped Scheduler.CreateSchedule uses PascalCase Target with QueueName/Input or Source/DetailType/Detail.
Quickstart
Create a queue, then a schedule that delivers to it:
export CLOUD_REGION=eu-central-1
export CLOUD_ACCESS_KEY_ID=...
export CLOUD_SECRET_ACCESS_KEY=...
# 1. Create queue
curl -sS "https://queue.eu-central-1.cloud.skippr.io/" \
-H "Content-Type: application/x-amz-json-1.0" \
-H "X-Amz-Target: AmazonSQS.CreateQueue" \
-H "Authorization: Bearer YOUR_JWT" \
--aws-sigv4 "aws:amz:eu-central-1:sqs" \
-d '{"QueueName":"my-jobs"}'
# 2. Create schedule — SigV4 service scheduler
curl -sS "https://scheduler.eu-central-1.cloud.skippr.io/" \
-H "Content-Type: application/x-amz-json-1.0" \
-H "X-Amz-Target: Scheduler.CreateSchedule" \
-H "Authorization: Bearer YOUR_JWT" \
--aws-sigv4 "aws:amz:eu-central-1:scheduler" \
-d '{
"Name": "hourly-job",
"ScheduleExpression": "rate(1 hours)",
"State": "ENABLED",
"Target": { "QueueName": "my-jobs", "Input": "tick" }
}'Use your language AWS SDK with endpoint https://scheduler.eu-central-1.cloud.skippr.io and service name scheduler if you prefer SDK signing over curl.
