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