Skip to content

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

TermMeaning
ScheduleNamed job with timing expression, state, and target
Expressionat(), rate(), or cron() in UTC (see below)
TargetEvents entry or queue message (optional streams Produce)
StateENABLED, DISABLED, or COMPLETED (one-shot after fire)

Access

Hostnamescheduler.eu-central-1.cloud.skippr.io
ProtocolCloud JSON (X-Amz-Target: CloudScheduler.* or AWS-shaped Scheduler.*)
AuthSigV4 service name scheduler via gateway
Regioneu-central-1

Operations

OperationNotes
CreateScheduleName, ScheduleExpression, Target, optional State
UpdateScheduleChange expression, target, or state (e.g. disable)
DeleteScheduleRemove schedule and list index
GetScheduleFull schedule including next FireAt
ListSchedulesSchedule names for the tenant

Schedule expressions (UTC)

text
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):

json
{
  "target": {
    "queue_name": "jobs",
    "message_body": "{\"task\":\"run\"}"
  }
}

Events (native JSON):

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:

bash
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.