Skip to main content
Live. This area is documented as current, user-reliable behavior.

Goal

Schedule backend work without keeping a process alive or relying on request timing.

Prerequisites

  • A queue and job handler

Workflow

1
Pass scheduledAt when a job should run later.
2
Use idempotency keys so rescheduling attempts do not duplicate work.
3
Use recurring schedules for repeated platform tasks when your StackShift plan supports them.

Run later

Trial reminder
await stackshift.queue('notifications').enqueue(
  'sendTrialEndingReminder',
  { customerId: 'cus_123' },
  {
    scheduledAt: '2026-05-12T10:00:00.000Z',
    idempotencyKey: 'trial-ending:cus_123',
  }
)

Recurring jobs

  • Use recurring jobs for daily cleanup, billing sync, report generation, and periodic reconciliation.
  • Keep the job body idempotent because recurring jobs often touch external systems.
  • Use observability to inspect the latest run and previous attempts.

Expected result

Delayed work runs at the intended time and remains visible before execution.

Retries & Failure Handling

Durable Jobs retries transient failures, preserves completed steps, and gives failed work a clear recovery path.

Observability

Inspect each job run through status, attempts, logs, payload, result, errors, and timeline.