QStash Schedules API
Create and manage CRON-based scheduled messages
Create and manage CRON-based scheduled messages
openapi: 3.0.3
info:
title: QStash Dead Letter Queue Schedules API
description: QStash is a serverless message queue and task scheduling REST API from Upstash that delivers HTTP messages to endpoints reliably without requiring any long-lived connections or infrastructure management. Built entirely on stateless HTTP requests, it is designed for serverless and edge runtimes where traditional message brokers are impractical. QStash supports automatic retries, CRON-based scheduling up to one year in advance, URL group broadcasting for fan-out delivery, FIFO queuing, dead-letter queues, and message deduplication.
version: '2.0'
contact:
name: Upstash Support
url: https://upstash.com/docs/qstash/overall/getstarted
license:
name: Upstash Terms of Service
url: https://upstash.com/trust/terms.pdf
servers:
- url: https://qstash.upstash.io/v2
description: QStash production API
security:
- BearerAuth: []
tags:
- name: Schedules
description: Create and manage CRON-based scheduled messages
paths:
/schedules/{destination}:
post:
operationId: createSchedule
summary: Create or update a schedule
description: Create a CRON-scheduled recurring message delivery. The Upstash-Cron header defines the schedule. Timezone support via CRON_TZ prefix.
tags:
- Schedules
parameters:
- name: destination
in: path
required: true
description: Destination URL, URL Group name, or queue destination
schema:
type: string
- name: Upstash-Cron
in: header
required: true
description: CRON expression (e.g. "0 0 * * *"). Supports timezone prefix like "CRON_TZ=America/New_York 0 4 * * *"
schema:
type: string
- name: Upstash-Schedule-Id
in: header
description: Specify or overwrite a schedule by ID
schema:
type: string
- name: Upstash-Queue-Name
in: header
description: Route scheduled message to a named queue
schema:
type: string
- name: Upstash-Retries
in: header
description: Number of retry attempts per scheduled delivery
schema:
type: integer
- name: Upstash-Delay
in: header
description: Delay each delivery after the scheduled trigger time
schema:
type: string
requestBody:
description: Message payload to deliver on each scheduled invocation
content:
application/json:
schema:
type: object
additionalProperties: true
example:
hello: world
responses:
'200':
description: Schedule created or updated
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduleResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/schedules:
get:
operationId: listSchedules
summary: List all schedules
description: Retrieve a list of all schedules configured for this account.
tags:
- Schedules
responses:
'200':
description: List of schedules
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Schedule'
'401':
$ref: '#/components/responses/Unauthorized'
/schedules/{scheduleId}:
get:
operationId: getSchedule
summary: Get a schedule
description: Retrieve details of a specific schedule by ID.
tags:
- Schedules
parameters:
- name: scheduleId
in: path
required: true
schema:
type: string
responses:
'200':
description: Schedule details
content:
application/json:
schema:
$ref: '#/components/schemas/Schedule'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteSchedule
summary: Delete a schedule
description: Permanently delete a schedule by ID.
tags:
- Schedules
parameters:
- name: scheduleId
in: path
required: true
schema:
type: string
responses:
'200':
description: Schedule deleted successfully
'404':
$ref: '#/components/responses/NotFound'
/schedules/{scheduleId}/pause:
post:
operationId: pauseSchedule
summary: Pause a schedule
description: Pause an active schedule; no messages will be delivered while paused.
tags:
- Schedules
parameters:
- name: scheduleId
in: path
required: true
schema:
type: string
responses:
'200':
description: Schedule paused
'404':
$ref: '#/components/responses/NotFound'
/schedules/{scheduleId}/resume:
post:
operationId: resumeSchedule
summary: Resume a paused schedule
description: Resume a previously paused schedule.
tags:
- Schedules
parameters:
- name: scheduleId
in: path
required: true
schema:
type: string
responses:
'200':
description: Schedule resumed
'404':
$ref: '#/components/responses/NotFound'
components:
responses:
Unauthorized:
description: Missing or invalid authentication token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
Schedule:
type: object
properties:
scheduleId:
type: string
description: Unique schedule identifier
cron:
type: string
description: CRON expression defining the schedule
destination:
type: string
description: Target URL or URL Group
createdAt:
type: integer
description: Unix timestamp when the schedule was created
paused:
type: boolean
description: Whether the schedule is currently paused
ScheduleResponse:
type: object
properties:
scheduleId:
type: string
description: Unique identifier for the created or updated schedule
example: scd_2XavMmRcJHJf7HkNtNqjfVf8uQe
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: Bearer token obtained from the Upstash console at https://console.upstash.com/qstash. Alternatively, pass as query parameter `qstash_token`.
externalDocs:
description: QStash Documentation
url: https://upstash.com/docs/qstash/overall/getstarted