From 62ef2ef21063bc4152852b7ce0774bff562d8deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tokg=C3=B6z?= Date: Wed, 28 Oct 2026 21:20:04 +0300 Subject: [PATCH 1/2] docs: reorganize DLQ bulk action API reference --- _snippets/qstash-dlq-message-type.mdx | 2 +- docs.json | 324 ++++++++- .../dlq/delete/delete-list-of-ids.mdx | 37 + .../dlq/retry/retry-list-of-ids.mdx | 46 ++ qstash/features/dlq.mdx | 6 + qstash/openapi.yaml | 422 +++++++++-- qstash/overall/changelog.mdx | 4 +- .../dlq/delete/delete-list-of-ids.mdx | 37 + .../dlq/restart/restart-list-of-ids.mdx | 42 ++ .../dlq/resume/resume-list-of-ids.mdx | 44 ++ workflow/features/dlq.mdx | 4 +- workflow/howto/failures.mdx | 4 +- workflow/openapi.yaml | 657 ++++++++++-------- 13 files changed, 1259 insertions(+), 370 deletions(-) create mode 100644 qstash/api-reference/dlq/delete/delete-list-of-ids.mdx create mode 100644 qstash/api-reference/dlq/retry/retry-list-of-ids.mdx create mode 100644 workflow/api-reference/dlq/delete/delete-list-of-ids.mdx create mode 100644 workflow/api-reference/dlq/restart/restart-list-of-ids.mdx create mode 100644 workflow/api-reference/dlq/resume/resume-list-of-ids.mdx diff --git a/_snippets/qstash-dlq-message-type.mdx b/_snippets/qstash-dlq-message-type.mdx index 70ef260d3..0e91240f4 100644 --- a/_snippets/qstash-dlq-message-type.mdx +++ b/_snippets/qstash-dlq-message-type.mdx @@ -60,7 +60,7 @@ The unique id within the DLQ. Use this to remove the message from the DLQ - [DELETE /v2/dlq/\{dlqId}](/qstash/api-reference/dlq/delete-a-dlq-message) + [DELETE /v2/dlq/\{dlqId}](/qstash/api-reference/dlq/delete/delete-single-id) diff --git a/docs.json b/docs.json index 98369b6d5..15d05166f 100644 --- a/docs.json +++ b/docs.json @@ -1675,7 +1675,109 @@ "openapi": { "source": "qstash/openapi.yaml", "directory": "qstash/api-reference" - } + }, + "pages": [ + { + "group": "Messages", + "pages": [ + "POST /v2/publish/{destination}", + "POST /v2/enqueue/{queueName}/{destination}", + "POST /v2/batch", + "GET /v2/messages/{messageId}", + "DELETE /v2/messages/{messageId}", + "POST /v2/messages/{messageId}/retry", + "DELETE /v2/messages" + ] + }, + { + "group": "Bulk Actions", + "pages": [ + "GET /v2/bulkActions", + "GET /v2/bulkActions/{actionId}" + ] + }, + { + "group": "Queues", + "pages": [ + "POST /v2/queues", + "GET /v2/queues", + "GET /v2/queues/{queueName}", + "DELETE /v2/queues/{queueName}", + "POST /v2/queues/{queueName}/pause", + "POST /v2/queues/{queueName}/resume" + ] + }, + { + "group": "Schedules", + "pages": [ + "POST /v2/schedules/{destination}", + "GET /v2/schedules", + "GET /v2/schedules/{scheduleId}", + "DELETE /v2/schedules/{scheduleId}", + "POST /v2/schedules/{scheduleId}/pause", + "POST /v2/schedules/{scheduleId}/resume" + ] + }, + { + "group": "URL Groups", + "pages": [ + "GET /v2/topics", + "GET /v2/topics/{urlGroupName}", + "DELETE /v2/topics/{urlGroupName}", + "POST /v2/topics/{urlGroupName}/endpoints", + "DELETE /v2/topics/{urlGroupName}/endpoints" + ] + }, + { + "group": "DLQ", + "pages": [ + "GET /v2/dlq", + "GET /v2/dlq/{dlqId}", + { + "group": "Delete", + "pages": [ + "POST /v2/dlq/bulkDelete", + "DELETE /v2/dlq", + "DELETE /v2/dlq/{dlqId}", + "qstash/api-reference/dlq/delete/delete-list-of-ids" + ] + }, + { + "group": "Retry", + "pages": [ + "POST /v2/dlq/bulkRetry", + "POST /v2/dlq/retry", + "POST /v2/dlq/retry/{dlqId}", + "qstash/api-reference/dlq/retry/retry-list-of-ids" + ] + } + ] + }, + { + "group": "Flow Control", + "pages": [ + "GET /v2/flowControl", + "GET /v2/flowControl/{flowControlKey}", + "POST /v2/flowControl/{flowControlKey}/pause", + "POST /v2/flowControl/{flowControlKey}/resume", + "POST /v2/flowControl/{flowControlKey}/pin", + "POST /v2/flowControl/{flowControlKey}/unpin", + "POST /v2/flowControl/{flowControlKey}/resetRate", + "GET /v2/globalParallelism" + ] + }, + { + "group": "Signing Keys", + "pages": [ + "GET /v2/keys", + "POST /v2/keys/rotate" + ] + }, + { + "group": "Logs", + "pages": ["GET /v2/logs"] + } + ] } ] }, @@ -1944,7 +2046,105 @@ "openapi": { "source": "workflow/openapi.yaml", "directory": "workflow/api-reference" - } + }, + "pages": [ + { + "group": "Trigger", + "pages": [ + "POST /v2/trigger/{workflowUrl}", + "POST /v2/batch/trigger" + ] + }, + { + "group": "Runs", + "pages": [ + "DELETE /v2/workflows/runs/{workflowRunId}", + "DELETE /v2/workflows/runs", + "POST /v2/messages/{messageId}/retry" + ] + }, + { + "group": "Bulk Actions", + "pages": [ + "GET /v2/workflows/bulkActions", + "GET /v2/workflows/bulkActions/{actionId}" + ] + }, + { + "group": "Logs", + "pages": ["GET /v2/workflows/logs"] + }, + { + "group": "DLQ", + "pages": [ + "GET /v2/workflows/dlq", + "GET /v2/workflows/dlq/{dlqId}", + { + "group": "Delete", + "pages": [ + "POST /v2/workflows/dlq/bulkDelete", + "DELETE /v2/workflows/dlq", + "DELETE /v2/workflows/dlq/{dlqId}", + "workflow/api-reference/dlq/delete/delete-list-of-ids" + ] + }, + { + "group": "Resume", + "pages": [ + "POST /v2/workflows/dlq/bulkResume", + "POST /v2/workflows/dlq/resume", + "POST /v2/workflows/dlq/resume/{dlqId}", + "workflow/api-reference/dlq/resume/resume-list-of-ids" + ] + }, + { + "group": "Restart", + "pages": [ + "POST /v2/workflows/dlq/bulkRestart", + "POST /v2/workflows/dlq/restart", + "POST /v2/workflows/dlq/restart/{dlqId}", + "workflow/api-reference/dlq/restart/restart-list-of-ids" + ] + }, + { + "group": "Failure Callback", + "pages": [ + "POST /v2/workflows/dlq/callback/{dlqId}", + "DELETE /v2/workflows/dlq/callback/{dlqId}" + ] + } + ] + }, + { + "group": "Flow Control", + "pages": [ + "GET /v2/flowControl", + "GET /v2/flowControl/{flowControlKey}", + "POST /v2/flowControl/{flowControlKey}/pause", + "POST /v2/flowControl/{flowControlKey}/resume", + "POST /v2/flowControl/{flowControlKey}/pin", + "POST /v2/flowControl/{flowControlKey}/unpin", + "POST /v2/flowControl/{flowControlKey}/resetRate", + "GET /v2/globalParallelism", + "GET /v2/keys/rotate" + ] + }, + { + "group": "Signing Keys", + "pages": [ + "GET /v2/keys", + "POST /v2/keys/rotate" + ] + }, + { + "group": "Notify", + "pages": [ + "POST /v2/notify/{eventId}", + "POST /v2/notify/{workflowRunId}/{eventId}", + "GET /v2/waiters/{eventId}" + ] + } + ] }, "workflow/sdk/workflow-js", "workflow/sdk/workflow-py" @@ -2743,6 +2943,126 @@ "source": "/workflow/api-refence/:slug*", "destination": "/workflow/api-reference/:slug*" }, + { + "source": "/qstash/api-reference/dlq/bulk-delete-dlq-messages", + "destination": "/qstash/api-reference/dlq/delete/delete-pagination-api" + }, + { + "source": "/qstash/api-reference/dlq/bulk-retry-dlq-messages", + "destination": "/qstash/api-reference/dlq/retry/retry-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/bulk-delete-failed-workflow-runs", + "destination": "/workflow/api-reference/dlq/delete/delete-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/bulk-resume-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/resume/resume-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/bulk-restart-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/restart/restart-pagination-api" + }, + { + "source": "/qstash/api-reference/dlq/pagination-bulk-delete-dlq-messages", + "destination": "/qstash/api-reference/dlq/delete/delete-pagination-api" + }, + { + "source": "/qstash/api-reference/dlq/pagination-bulk-retry-dlq-messages", + "destination": "/qstash/api-reference/dlq/retry/retry-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/pagination-bulk-delete-failed-workflow-runs", + "destination": "/workflow/api-reference/dlq/delete/delete-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/pagination-bulk-resume-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/resume/resume-pagination-api" + }, + { + "source": "/workflow/api-reference/dlq/pagination-bulk-restart-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/restart/restart-pagination-api" + }, + { + "source": "/qstash/api-reference/async-dlq/bulk-delete-dlq-messages", + "destination": "/qstash/api-reference/dlq/delete/delete-bulk-action" + }, + { + "source": "/qstash/api-reference/async-dlq/bulk-retry-dlq-messages", + "destination": "/qstash/api-reference/dlq/retry/retry-bulk-action" + }, + { + "source": "/workflow/api-reference/async-dlq/bulk-delete-failed-workflow-runs", + "destination": "/workflow/api-reference/dlq/delete/delete-bulk-action" + }, + { + "source": "/workflow/api-reference/async-dlq/bulk-resume-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/resume/resume-bulk-action" + }, + { + "source": "/workflow/api-reference/async-dlq/bulk-restart-workflows-from-dlq", + "destination": "/workflow/api-reference/dlq/restart/restart-bulk-action" + }, + { + "source": "/qstash/api-reference/dlq-by-id/delete-dlq-messages-by-id", + "destination": "/qstash/api-reference/dlq/delete/delete-list-of-ids" + }, + { + "source": "/qstash/api-reference/dlq-by-id/retry-dlq-messages-by-id", + "destination": "/qstash/api-reference/dlq/retry/retry-list-of-ids" + }, + { + "source": "/workflow/api-reference/dlq-by-id/delete-failed-workflow-runs-by-id", + "destination": "/workflow/api-reference/dlq/delete/delete-list-of-ids" + }, + { + "source": "/workflow/api-reference/dlq-by-id/resume-workflows-from-dlq-by-id", + "destination": "/workflow/api-reference/dlq/resume/resume-list-of-ids" + }, + { + "source": "/workflow/api-reference/dlq-by-id/restart-workflows-from-dlq-by-id", + "destination": "/workflow/api-reference/dlq/restart/restart-list-of-ids" + }, + { + "source": "/qstash/api-reference/dlq/delete-a-dlq-message", + "destination": "/qstash/api-reference/dlq/delete/delete-single-id" + }, + { + "source": "/qstash/api-reference/dlq/retry-a-dlq-message", + "destination": "/qstash/api-reference/dlq/retry/retry-single-id" + }, + { + "source": "/workflow/api-reference/dlq/delete-failed-workflow-run", + "destination": "/workflow/api-reference/dlq/delete/delete-single-id" + }, + { + "source": "/workflow/api-reference/dlq/resume-workflow-from-dlq", + "destination": "/workflow/api-reference/dlq/resume/resume-single-id" + }, + { + "source": "/workflow/api-reference/dlq/restart-workflow-from-dlq", + "destination": "/workflow/api-reference/dlq/restart/restart-single-id" + }, + { + "source": "/qstash/api-reference/dlq/delete-single-id", + "destination": "/qstash/api-reference/dlq/delete/delete-single-id" + }, + { + "source": "/qstash/api-reference/dlq/retry-single-id", + "destination": "/qstash/api-reference/dlq/retry/retry-single-id" + }, + { + "source": "/workflow/api-reference/dlq/delete-single-id", + "destination": "/workflow/api-reference/dlq/delete/delete-single-id" + }, + { + "source": "/workflow/api-reference/dlq/resume-single-id", + "destination": "/workflow/api-reference/dlq/resume/resume-single-id" + }, + { + "source": "/workflow/api-reference/dlq/restart-single-id", + "destination": "/workflow/api-reference/dlq/restart/restart-single-id" + }, { "source": "/box/sdks/ts/getting-started", "destination": "/box/overall/quickstart" diff --git a/qstash/api-reference/dlq/delete/delete-list-of-ids.mdx b/qstash/api-reference/dlq/delete/delete-list-of-ids.mdx new file mode 100644 index 000000000..83764538c --- /dev/null +++ b/qstash/api-reference/dlq/delete/delete-list-of-ids.mdx @@ -0,0 +1,37 @@ +--- +title: "Multiple IDs" +description: "Delete specific QStash DLQ messages by their DLQ IDs." +api: "DELETE https://qstash-eu-central-1.upstash.io/v2/dlq" +authMethod: "bearer" +--- + +Pass one or more `dlqIds` to delete only those DLQ entries. + +## Request + + + DLQ IDs to delete. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + + +## Response + +Number of DLQ entries deleted. + + + +```sh curl +curl -X DELETE 'https://qstash-eu-central-1.upstash.io/v2/dlq?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` + + + + + +```json 200 OK +{ + "deleted": 2 +} +``` + + diff --git a/qstash/api-reference/dlq/retry/retry-list-of-ids.mdx b/qstash/api-reference/dlq/retry/retry-list-of-ids.mdx new file mode 100644 index 000000000..c70c777c2 --- /dev/null +++ b/qstash/api-reference/dlq/retry/retry-list-of-ids.mdx @@ -0,0 +1,46 @@ +--- +title: "Multiple IDs" +description: "Retry specific QStash DLQ messages by their DLQ IDs." +api: "POST https://qstash-eu-central-1.upstash.io/v2/dlq/retry" +authMethod: "bearer" +--- + +Pass one or more `dlqIds` to retry only those DLQ entries. + +A new message is created for each entry with the original body and headers, then the original entry is removed from the DLQ. + + +## Query parameters + + + DLQ IDs to retry. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + + +## Response + +Publish responses in the same order as the supplied IDs. Each includes a `messageId` and may include `deduplicated`. +Empty; this request does not paginate. + + + +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/dlq/retry?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' \ + -H 'Upstash-Retries: 0' +``` + + + + + +```json 200 OK +{ + "cursor": "", + "responses": [ + { "messageId": "" }, + { "messageId": "" } + ] +} +``` + + diff --git a/qstash/features/dlq.mdx b/qstash/features/dlq.mdx index 060e6be4b..721329815 100644 --- a/qstash/features/dlq.mdx +++ b/qstash/features/dlq.mdx @@ -18,6 +18,12 @@ You can manually republish messages from the dead letter queue in the console. 1. **Retry** - Republish the message and remove it from the dead letter queue. Republished messages are just like any other message and will be retried automatically if they fail. 2. **Delete** - Delete the message from the dead letter queue. +## Bulk actions + +To act on every DLQ message matching a filter, use the dedicated [Retry Async Bulk](/qstash/api-reference/dlq/retry/retry-bulk-action) or [Delete Async Bulk](/qstash/api-reference/dlq/delete/delete-bulk-action) `POST` endpoint. Each returns an action ID you can use to [check progress](/qstash/api-reference/bulk-actions/get-a-bulk-action). + +To act on specific DLQ entries, use [Retry Multiple IDs](/qstash/api-reference/dlq/retry/retry-list-of-ids) or [Delete Multiple IDs](/qstash/api-reference/dlq/delete/delete-list-of-ids). + ## Limitations Dead letter queues are subject only to a retention period that depends on your plan. Messages are deleted when their retention period expires. See the “Max DLQ Retention” row on the [QStash Pricing](https://upstash.com/pricing/qstash) page. diff --git a/qstash/openapi.yaml b/qstash/openapi.yaml index 156093383..185a0d2bd 100644 --- a/qstash/openapi.yaml +++ b/qstash/openapi.yaml @@ -59,6 +59,23 @@ components: type: string description: Error message + DLQBulkActionCreated: + type: object + required: + - actionId + - total + example: + actionId: action_... + total: 42 + properties: + actionId: + type: string + description: ID used to check the background action's progress. + total: + type: integer + format: int64 + description: Number of DLQ messages matching the filters when the action was created. + Message: type: object properties: @@ -554,7 +571,7 @@ components: description: The ID of the bulk action. kind: type: string - enum: [cancel] + enum: [cancel, dlq_delete, dlq_retry] description: The kind of the bulk action. state: type: string @@ -569,7 +586,7 @@ components: total: type: integer format: int64 - description: The number of in-progress messages that matched the filter when the bulk action was created. + description: The number of messages that matched the filter when the bulk action was created. processed: type: integer format: int64 @@ -589,10 +606,163 @@ components: items: type: string description: | - The filter the bulk action was created with. Keys are the filter parameter names of the bulk cancel request, such as `queueName`, `label` or `fromDate`, and values are the given values. + The filter the bulk action was created with. Keys are the request's filter parameter names, such as `queueName`, `label` or `fromDate`, and values are the given values. example: queueName: [my-queue] label: [label_1, label_2] + parameters: + DLQOverrideMethod: + name: Upstash-Method + in: header + schema: + type: string + enum: [GET, POST, PUT, PATCH, DELETE] + description: Override the HTTP method used to deliver each retried message. + DLQOverrideTimeout: + name: Upstash-Timeout + in: header + schema: + type: string + description: Override the delivery timeout for each retried message, such as `30s` or `2m`. + DLQOverrideRetries: + name: Upstash-Retries + in: header + schema: + type: integer + description: Override the number of delivery retries for each retried message. Use `0` to disable retries. + DLQOverrideRetryDelay: + name: Upstash-Retry-Delay + in: header + schema: + type: string + description: Override the retry delay expression for each retried message. + DLQOverrideDelay: + name: Upstash-Delay + in: header + schema: + type: string + description: Delay each retried message's delivery. Format is ``, such as `10s` or `5m`. + DLQOverrideNotBefore: + name: Upstash-Not-Before + in: header + schema: + type: integer + description: Delay delivery until this Unix timestamp in seconds. Takes precedence over `Upstash-Delay`. + DLQOverrideLabel: + name: Upstash-Label + in: header + schema: + type: string + description: Override the labels on each retried message. Use a comma-separated list for multiple labels. + DLQOverrideFlowControlKey: + name: Upstash-Flow-Control-Key + in: header + schema: + type: string + description: Override the flow control key for each retried message. Set `Upstash-Flow-Control-Value` to define its limits. + DLQOverrideFlowControlValue: + name: Upstash-Flow-Control-Value + in: header + schema: + type: string + description: Override the flow control limits in the format `parallelism=, rate=, period=`. + DLQOverrideCallback: + name: Upstash-Callback + in: header + schema: + type: string + description: Override the success or failure callback URL for each retried message. + DLQOverrideFailureCallback: + name: Upstash-Failure-Callback + in: header + schema: + type: string + description: Override the failure callback URL for each retried message. + DLQMessageIdFilter: + name: messageId + in: query + schema: + type: string + description: Filter by message ID. + DLQUrlFilter: + name: url + in: query + schema: + type: array + items: + type: string + description: Filter by destination URL. Supports multiple values. + DLQTopicNameFilter: + name: topicName + in: query + schema: + type: array + items: + type: string + description: Filter by URL Group name. Supports multiple values. + DLQScheduleIdFilter: + name: scheduleId + in: query + schema: + type: array + items: + type: string + description: Filter by schedule ID. Supports multiple values. + DLQQueueNameFilter: + name: queueName + in: query + schema: + type: array + items: + type: string + description: Filter by queue name. Supports multiple values. + DLQResponseStatusFilter: + name: responseStatus + in: query + schema: + type: array + items: + type: integer + description: Filter by the last delivery attempt's HTTP response status. Supports multiple values. + DLQFromDateFilter: + name: fromDate + in: query + schema: + type: integer + format: int64 + description: Inclusive start of the DLQ date range, in Unix milliseconds. + DLQToDateFilter: + name: toDate + in: query + schema: + type: integer + format: int64 + description: Inclusive end of the DLQ date range, in Unix milliseconds. + DLQCallerIpFilter: + name: callerIp + in: query + schema: + type: array + items: + type: string + description: Filter by publisher IP address. Supports multiple values. + DLQLabelFilter: + name: label + in: query + schema: + type: array + items: + type: string + description: Filter by message label. Supports multiple values. + DLQFlowControlKeyFilter: + name: flowControlKey + in: query + schema: + type: array + items: + type: string + description: Filter by flow control key. Supports multiple values. + paths: /v2/publish/{destination}: post: @@ -1427,12 +1597,6 @@ paths: - Sending the same filters again while an identical bulk action is still in progress does not start a new one. The in-progress bulk action is returned instead. - Up to 1000 bulk actions can be in progress at the same time. Beyond that, a `412` is returned. - - For multi-value filters, a message matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - - parameters: - name: messageIds in: query @@ -1594,12 +1758,12 @@ paths: /v2/bulkActions: get: summary: List Bulk Actions - description: List the bulk actions created by filter-based message cancels + description: List all created bulk actions tags: - Bulk Actions x-mint: content: | - A bulk action is created for every filter-based [bulk cancel](/qstash/api-reference/messages/bulk-cancel-messages) request, and tracks the progress of the cancellation running in the background. + Bulk actions track filter-based [message cancels](/qstash/api-reference/messages/bulk-cancel-messages) and DLQ [delete bulk actions](/qstash/api-reference/dlq/delete/delete-bulk-action) or [retry bulk actions](/qstash/api-reference/dlq/retry/retry-bulk-action). Bulk actions are kept for 7 days after they are created. @@ -1664,7 +1828,7 @@ paths: required: true schema: type: string - description: The ID of the bulk action, as returned by a filter-based bulk cancel with `async=true`. + description: The ID returned by a filter-based bulk cancel or asynchronous DLQ action. responses: '200': description: Bulk action details @@ -2394,13 +2558,6 @@ paths: description: List and paginate through all messages currently in the DLQ tags: - DLQ - x-mint: - content: | - - For multi-value filters, a message matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - parameters: - name: cursor in: query @@ -2504,25 +2661,23 @@ paths: items: $ref: '#/components/schemas/DLQMessage' delete: - summary: Bulk Delete DLQ messages - description: Delete multiple messages from the DLQ + summary: Delete Sync Bulk + description: Delete one page of messages from the DLQ and use the returned cursor to continue tags: - DLQ x-mint: + href: /qstash/api-reference/dlq/delete/delete-pagination-api + metadata: + title: Sync Bulk + sidebarTitle: Sync Bulk + description: Delete DLQ Messages with Pagination content: | - - For multi-value filters, a message matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - + + The synchronous pagination API is deprecated. It’s recommended to use Async Bulk endpoint to process all matching entries in a bulk action. + + + This paginated request processes at most `count` matching messages and returns a `cursor` for the next page. parameters: - - name: dlqIds - in: query - schema: - type: array - items: - type: string - description: List of DLQ IDs to delete. If provided, other filters are ignored. - name: cursor in: query schema: @@ -2594,12 +2749,7 @@ paths: items: type: string description: | - Filter DLQ messages by label. Supports multiple values. You can pass multiple values to match messages with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` - - `label=label_1,label_2` + Filter DLQ messages by label. Supports multiple values. - name: flowControlKey in: query schema: @@ -2630,6 +2780,103 @@ paths: deleted: type: integer description: The number of messages that were deleted. + /v2/dlq/bulkDelete: + post: + summary: Delete Async Bulk + description: Create a bulk action that deletes every QStash DLQ message matching the query filters. Omit all filters to delete the entire DLQ. + tags: + - DLQ + x-mint: + href: /qstash/api-reference/dlq/delete/delete-bulk-action + metadata: + title: Async Bulk + sidebarTitle: Async Bulk + description: Delete all matching QStash DLQ messages in a bulk action. + content: | + The request returns after creating the action. Use its `actionId` with [Get a Bulk Action](/qstash/api-reference/bulk-actions/get-a-bulk-action) to check progress. + + Identical filters submitted while an action is already in-progress return the existing action. + + parameters: + - $ref: '#/components/parameters/DLQMessageIdFilter' + - $ref: '#/components/parameters/DLQUrlFilter' + - $ref: '#/components/parameters/DLQTopicNameFilter' + - $ref: '#/components/parameters/DLQScheduleIdFilter' + - $ref: '#/components/parameters/DLQQueueNameFilter' + - $ref: '#/components/parameters/DLQResponseStatusFilter' + - $ref: '#/components/parameters/DLQFromDateFilter' + - $ref: '#/components/parameters/DLQToDateFilter' + - $ref: '#/components/parameters/DLQCallerIpFilter' + - $ref: '#/components/parameters/DLQLabelFilter' + - $ref: '#/components/parameters/DLQFlowControlKeyFilter' + responses: + '200': + description: The background action was created or an identical in-progress action was returned. + content: + application/json: + schema: + $ref: '#/components/schemas/DLQBulkActionCreated' + '412': + description: Too many bulk actions are already in progress. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /v2/dlq/bulkRetry: + post: + summary: Retry Async Bulk + description: Create a bulk action that retries every QStash DLQ message matching the query filters. Omit all filters to retry the entire DLQ. + tags: + - DLQ + x-mint: + href: /qstash/api-reference/dlq/retry/retry-bulk-action + metadata: + title: Async Bulk + sidebarTitle: Async Bulk + description: Retry all matching QStash DLQ messages in a bulk action. + content: | + Each retry creates a new message with the original body and headers, then removes the original DLQ entry. + + The request returns after creating the action. Use its `actionId` with [Get a Bulk Action](/qstash/api-reference/bulk-actions/get-a-bulk-action) to check progress. + + Identical filters submitted while an action is already in-progress return the existing action. + + parameters: + - $ref: '#/components/parameters/DLQMessageIdFilter' + - $ref: '#/components/parameters/DLQUrlFilter' + - $ref: '#/components/parameters/DLQTopicNameFilter' + - $ref: '#/components/parameters/DLQScheduleIdFilter' + - $ref: '#/components/parameters/DLQQueueNameFilter' + - $ref: '#/components/parameters/DLQResponseStatusFilter' + - $ref: '#/components/parameters/DLQFromDateFilter' + - $ref: '#/components/parameters/DLQToDateFilter' + - $ref: '#/components/parameters/DLQCallerIpFilter' + - $ref: '#/components/parameters/DLQLabelFilter' + - $ref: '#/components/parameters/DLQFlowControlKeyFilter' + - $ref: '#/components/parameters/DLQOverrideMethod' + - $ref: '#/components/parameters/DLQOverrideTimeout' + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideNotBefore' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideCallback' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' + responses: + '200': + description: The background action was created or an identical in-progress action was returned. + content: + application/json: + schema: + $ref: '#/components/schemas/DLQBulkActionCreated' + '412': + description: Too many bulk actions are already in progress. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' /v2/dlq/{dlqId}: get: summary: Get a DLQ message @@ -2660,10 +2907,16 @@ paths: $ref: '#/components/schemas/Error' delete: - summary: Delete a DLQ message + summary: Delete Single ID description: Manually remove a message from the DLQ tags: - DLQ + x-mint: + href: /qstash/api-reference/dlq/delete/delete-single-id + metadata: + title: Single ID + sidebarTitle: Single ID + description: Delete one QStash DLQ message by its DLQ ID. parameters: - name: dlqId in: path @@ -2684,21 +2937,19 @@ paths: $ref: '#/components/schemas/Error' /v2/dlq/retry/{dlqId}: post: - summary: Retry a DLQ message + summary: Retry Single ID description: Retry delivery of a message from the DLQ tags: - DLQ x-mint: + href: /qstash/api-reference/dlq/retry/retry-single-id + metadata: + title: Single ID + sidebarTitle: Single ID + description: Retry one QStash DLQ message by its DLQ ID. content: | When a DLQ message is retried, a new message with the same body and headers is created and scheduled for delivery. The original DLQ message is then removed from the DLQ. - - - You can pass all configuration headers to override the configuration of the original message. - - For example, if the retry count of the original message is 5, you can set it to 0 for the retried message by passing `Upstash-Retries: 0 ` header to this request. - Check out publish documentation for complete list of configuration options you can pass. - parameters: - name: dlqId in: path @@ -2707,6 +2958,17 @@ paths: type: string description: | The DLQ ID of the message you want to retry. + - $ref: '#/components/parameters/DLQOverrideMethod' + - $ref: '#/components/parameters/DLQOverrideTimeout' + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideNotBefore' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideCallback' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: '201': description: Message retry initiated successfully @@ -2723,35 +2985,39 @@ paths: $ref: '#/components/schemas/Error' /v2/dlq/retry: post: - summary: Bulk Retry DLQ messages - description: Retry delivery of multiple messages from the DLQ + summary: Retry Sync Bulk + description: Retry one page of DLQ messages and use the returned cursor to continue tags: - DLQ x-mint: + href: /qstash/api-reference/dlq/retry/retry-pagination-api + metadata: + title: Sync Bulk + sidebarTitle: Sync Bulk + description: Resume Failed Messages with Pagination content: | - When DLQ messages are retried, new messages with the same body and headers are created and scheduled for delivery. - The original DLQ messages are then removed from the DLQ. + + The synchronous pagination API is deprecated. It’s recommended to use Async Bulk endpoint to process all matching entries in a bulk action. + - - You can pass all configuration headers to override the configuration of the original messages. + This paginated request processes at most `count` matching messages and returns a `cursor` for the next page. - For example, if the retry count of the original messages is 5, you can set it to 0 for the retried messages by passing `Upstash-Retries: 0 ` header to this request. - Check out publish documentation for complete list of configuration options you can pass. - + When DLQ messages are retried, new messages with the same body and headers are created and scheduled for delivery. + The original DLQ messages are then removed from the DLQ. - - For multi-value filters, a message matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - parameters: - - name: dlqIds + - name: cursor in: query schema: - type: array - items: - type: string - description: List of DLQ IDs to retry. If provided, other filters are ignored. + type: string + description: Cursor returned by the previous page. Omit for the first page. + - name: count + in: query + schema: + type: integer + default: 100 + maximum: 100 + description: Maximum number of messages to retry in this request. - name: messageId in: query schema: @@ -2818,12 +3084,7 @@ paths: items: type: string description: | - Filter DLQ messages by label. Supports multiple values. You can pass multiple values to match messages with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` - - `label=label_1,label_2` + Filter DLQ messages by label. Supports multiple values. - name: flowControlKey in: query schema: @@ -2831,9 +3092,20 @@ paths: items: type: string description: Filter DLQ messages by Flow Control Key. Supports multiple values. + - $ref: '#/components/parameters/DLQOverrideMethod' + - $ref: '#/components/parameters/DLQOverrideTimeout' + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideNotBefore' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideCallback' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: - '201': - description: Messages retry initiated successfully + '200': + description: Messages retried successfully content: application/json: schema: diff --git a/qstash/overall/changelog.mdx b/qstash/overall/changelog.mdx index 37bd0b00b..b9bd7ce7a 100644 --- a/qstash/overall/changelog.mdx +++ b/qstash/overall/changelog.mdx @@ -191,7 +191,7 @@ title: Changelog - [Batch publish messages](/qstash/api-reference/messages/batch-messages) -- [Bulk delete](/qstash/api-reference/dlq/bulk-delete-dlq-messages) for DLQ +- [Bulk delete](/qstash/api-reference/dlq/delete/delete-pagination-api) for DLQ @@ -202,7 +202,7 @@ title: Changelog - Put last response in DLQ -- DLQ [get message](/qstash/api-reference/dlq/delete-a-dlq-message) +- DLQ [get message](/qstash/api-reference/dlq/get-a-dlq-message) - Pass schedule ID to the header when calling the user's endpoint - Added more information to [callbacks](/qstash/features/callbacks) diff --git a/workflow/api-reference/dlq/delete/delete-list-of-ids.mdx b/workflow/api-reference/dlq/delete/delete-list-of-ids.mdx new file mode 100644 index 000000000..0330561f0 --- /dev/null +++ b/workflow/api-reference/dlq/delete/delete-list-of-ids.mdx @@ -0,0 +1,37 @@ +--- +title: "Multiple IDs" +description: "Delete specific failed Workflow runs by their DLQ IDs." +api: "DELETE https://qstash-eu-central-1.upstash.io/v2/workflows/dlq" +authMethod: "bearer" +--- + +Pass one or more `dlqIds` to delete only those DLQ entries. + +## Query parameters + + + DLQ IDs to delete. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + + +## Response + +Number of DLQ entries deleted. + + + +```sh curl +curl -X DELETE 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` + + + + + +```json 200 OK +{ + "deleted": 2 +} +``` + + diff --git a/workflow/api-reference/dlq/restart/restart-list-of-ids.mdx b/workflow/api-reference/dlq/restart/restart-list-of-ids.mdx new file mode 100644 index 000000000..a7757598b --- /dev/null +++ b/workflow/api-reference/dlq/restart/restart-list-of-ids.mdx @@ -0,0 +1,42 @@ +--- +title: "Multiple IDs" +description: "Restart specific failed Workflow runs by their DLQ IDs." +api: "POST https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/restart" +authMethod: "bearer" +--- + +Pass one or more `dlqIds` to restart those failed workflow runs from their first steps. + +## Query parameters + + + DLQ IDs to restart. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + + +## Response + +Results for the restarted entries. Each includes a new `workflowRunId` and `workflowCreatedAt` in Unix milliseconds. Entries excluded by supplied filters are absent. +Empty; this request does not paginate. + + + +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/restart?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` + + + + + +```json 200 OK +{ + "workflowRuns": [ + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 }, + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 } + ], + "cursor": "" +} +``` + + diff --git a/workflow/api-reference/dlq/resume/resume-list-of-ids.mdx b/workflow/api-reference/dlq/resume/resume-list-of-ids.mdx new file mode 100644 index 000000000..16d86a110 --- /dev/null +++ b/workflow/api-reference/dlq/resume/resume-list-of-ids.mdx @@ -0,0 +1,44 @@ +--- +title: "Multiple IDs" +description: "Resume specific failed Workflow runs by their DLQ IDs." +api: "POST https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/resume" +authMethod: "bearer" +--- + +Pass one or more `dlqIds` to resume those failed workflow runs from their failed steps. + +## Query parameters + + + DLQ IDs to resume. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + + + + +## Response + +Results for the resumed entries. Each includes a new `workflowRunId` and `workflowCreatedAt` in Unix milliseconds. Entries excluded by supplied filters are absent. +Empty; this request does not paginate. + + + +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/resume?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` + + + + + +```json 200 OK +{ + "workflowRuns": [ + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 }, + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 } + ], + "cursor": "" +} +``` + + diff --git a/workflow/features/dlq.mdx b/workflow/features/dlq.mdx index b157b4530..797adecee 100644 --- a/workflow/features/dlq.mdx +++ b/workflow/features/dlq.mdx @@ -35,4 +35,6 @@ Once a workflow run is in the DLQ, you can take the following actions: - **[Re-run Failure Function](/workflow/features/dlq/callback)** – execute the workflow's failure handling logic again. - **[Delete](/workflow/features/dlq/delete)** – remove the DLQ entry if no action is required. -You can apply these actions in bulk to multiple DLQ entries. Check the individual action pages for more details. \ No newline at end of file +You can apply these actions in bulk to multiple DLQ entries. For all matching runs in a bulk action, use the dedicated [Delete Async Bulk](/workflow/api-reference/dlq/delete/delete-bulk-action), [Resume Async Bulk](/workflow/api-reference/dlq/resume/resume-bulk-action), or [Restart Async Bulk](/workflow/api-reference/dlq/restart/restart-bulk-action) `POST` endpoint. Each returns an action ID you can use to [check progress](/workflow/api-reference/bulk-actions/get-a-bulk-action). + +For specific entries, use [Delete Multiple IDs](/workflow/api-reference/dlq/delete/delete-list-of-ids), [Resume Multiple IDs](/workflow/api-reference/dlq/resume/resume-list-of-ids), or [Restart Multiple IDs](/workflow/api-reference/dlq/restart/restart-list-of-ids). diff --git a/workflow/howto/failures.mdx b/workflow/howto/failures.mdx index 07e9e8845..cf220b128 100644 --- a/workflow/howto/failures.mdx +++ b/workflow/howto/failures.mdx @@ -161,11 +161,11 @@ If you don't want to verify the signature, you can remove `QSTASH_CURRENT_SIGNIN When a workflow run fails and is moved to the Dead Letter Queue (DLQ), you have several options to handle it manually via the REST API: -### [Resume](/workflow/api-reference/dlq/resume-workflow-from-dlq) +### [Resume](/workflow/api-reference/dlq/resume/resume-single-id) - **What it does:** Continues a failed workflow run from exactly where it failed, preserving all successful step results. - **When to use:** Use this if you want to retry only the failed/pending steps without re-executing the entire workflow. -### [Restart](/workflow/api-reference/dlq/restart-workflow-from-dlq) +### [Restart](/workflow/api-reference/dlq/restart/restart-single-id) - **What it does:** Starts the failed workflow run over from the beginning, discarding all previous step results. - **When to use:** Use this if you want a clean execution, or if the failure may have been caused by a corrupted state that requires a fresh start. diff --git a/workflow/openapi.yaml b/workflow/openapi.yaml index 32e985a11..029d6035d 100644 --- a/workflow/openapi.yaml +++ b/workflow/openapi.yaml @@ -41,6 +41,23 @@ components: type: string description: Error message + DLQBulkActionCreated: + type: object + required: + - actionId + - total + example: + actionId: action_... + total: 42 + properties: + actionId: + type: string + description: ID used to check the background action's progress. + total: + type: integer + format: int64 + description: Number of failed workflow runs matching the filters when the action was created. + FlowControlKey: type: object properties: @@ -494,7 +511,7 @@ components: description: The ID of the bulk action. kind: type: string - enum: [cancel] + enum: [cancel, dlq_delete, dlq_resume, dlq_restart] description: The kind of the bulk action. state: type: string @@ -509,7 +526,7 @@ components: total: type: integer format: int64 - description: The number of in-progress workflow runs that matched the filter when the bulk action was created. + description: The number of workflow runs that matched the filter when the bulk action was created. processed: type: integer format: int64 @@ -529,11 +546,122 @@ components: items: type: string description: | - The filter the bulk action was created with. Keys are the filter parameter names of the bulk cancel request, such as `workflowUrl`, `label` or `fromDate`, and values are the given values. + The filter the bulk action was created with. Keys are the request's filter parameter names, such as `workflowUrl`, `label` or `fromDate`, and values are the given values. example: - workflowUrl: [https://example.com/api/workflow] + workflowUrl: ["https://example.com/api/workflow"] label: [label_1, label_2] + parameters: + DLQOverrideRetries: + name: Upstash-Retries + in: header + schema: + type: integer + description: Override the number of retries for the workflow steps. + DLQOverrideDelay: + name: Upstash-Delay + in: header + schema: + type: string + description: Override the delay before executing the workflow. Format is `` (for example, `10s` or `5m`). + DLQOverrideRetryDelay: + name: Upstash-Retry-Delay + in: header + schema: + type: string + description: Override the retry delay expression for the workflow steps. + DLQOverrideFlowControlKey: + name: Upstash-Flow-Control-Key + in: header + schema: + type: string + description: Override the flow control key for the workflow. + DLQOverrideFlowControlValue: + name: Upstash-Flow-Control-Value + in: header + schema: + type: string + description: Override the flow control configuration in the format `parallelism=, rate=, period=`. + DLQOverrideLabel: + name: Upstash-Label + in: header + schema: + type: string + description: Override the workflow labels. Use a comma-separated list for multiple labels, such as `label_1,label_2`. + DLQOverrideFailureCallback: + name: Upstash-Failure-Callback + in: header + schema: + type: string + description: Override the failure callback URL for the workflow. + DLQFromDateFilter: + name: fromDate + in: query + schema: + type: integer + format: int64 + description: Inclusive start of the DLQ date range, in Unix milliseconds. + DLQToDateFilter: + name: toDate + in: query + schema: + type: integer + format: int64 + description: Inclusive end of the DLQ date range, in Unix milliseconds. + DLQWorkflowUrlFilter: + name: workflowUrl + in: query + schema: + type: array + items: + type: string + description: Filter by workflow URL. Supports multiple values. + DLQWorkflowRunIdFilter: + name: workflowRunId + in: query + schema: + type: string + description: Filter by workflow run ID. + DLQWorkflowCreatedAtFilter: + name: workflowCreatedAt + in: query + schema: + type: integer + format: int64 + description: Filter by workflow creation time, in Unix milliseconds. + DLQLabelFilter: + name: label + in: query + schema: + type: array + items: + type: string + description: Filter by workflow label. Supports multiple values. + DLQFailureFunctionStateFilter: + name: failureFunctionState + in: query + schema: + type: array + items: + type: string + description: Filter by failure function state. Supports multiple values. + DLQCallerIpFilter: + name: callerIp + in: query + schema: + type: array + items: + type: string + description: Filter by publisher IP address. Supports multiple values. + DLQFlowControlKeyFilter: + name: flowControlKey + in: query + schema: + type: array + items: + type: string + description: Filter by flow control key. Supports multiple values. + paths: /v2/trigger/{workflowUrl}: post: @@ -835,7 +963,6 @@ paths: - Sending the same filters again while an identical bulk action is still in progress does not start a new one. The in-progress bulk action is returned instead. - Up to 1000 bulk actions can be in progress at the same time. Beyond that, a `412` is returned. - For multi-value filters, a workflow run matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). parameters: - in: query name: workflowRunIds @@ -898,12 +1025,7 @@ paths: items: type: string description: | - Optional label to filter workflow runs to cancel. Supports multiple values. You can pass multiple values to match workflow runs with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` - - `label=label_1,label_2` + Optional label to filter workflow runs to cancel. Supports multiple values. - in: query name: host required: false @@ -1017,12 +1139,12 @@ paths: /v2/workflows/bulkActions: get: summary: List Bulk Actions - description: List the bulk actions created by filter-based workflow run cancels + description: List all created bulk actions tags: - Bulk Actions x-mint: content: | - A bulk action is created for every filter-based [bulk cancel](/workflow/api-reference/runs/bulk-cancel-workflow-runs) request, and tracks the progress of the cancellation running in the background. + Bulk actions track filter-based [workflow run cancels](/workflow/api-reference/runs/bulk-cancel-workflow-runs) and DLQ [deletes](/workflow/api-reference/dlq/delete/delete-bulk-action), [resumes](/workflow/api-reference/dlq/resume/resume-bulk-action), and [restarts](/workflow/api-reference/dlq/restart/restart-bulk-action). Bulk actions are kept for 7 days after they are created. @@ -1087,7 +1209,7 @@ paths: required: true schema: type: string - description: The ID of the bulk action, as returned by a filter-based bulk cancel with `async=true`. + description: The ID returned by a filter-based bulk cancel or asynchronous DLQ action. responses: "200": description: Bulk action details @@ -1215,11 +1337,7 @@ paths: style: form explode: true description: | - Filter workflow run by label. Supports multi-value filtering. You can pass multiple values to match workflow runs with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` + Filter workflow run by label. Supports multi-value filtering. - in: query name: flowControlKey required: false @@ -1286,13 +1404,6 @@ paths: Failed workflows end up in the DLQ after exhausting all retry attempts. You can filter, paginate, and inspect these failures to understand what went wrong and decide whether to resume, restart, or delete them. - x-mint: - content: | - - For multi-value filters, a workflow run matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - parameters: - in: query name: cursor @@ -1351,12 +1462,7 @@ paths: items: type: string description: | - Filter by label assigned to the workflow run. Supports multiple values. You can pass multiple values to match workflow runs with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` - - `label=label_1,label_2` + Filter by label assigned to the workflow run. Supports multiple values. - in: query name: failureFunctionState required: false @@ -1426,30 +1532,23 @@ paths: delete: tags: - DLQ - summary: Bulk Delete Failed Workflow Runs + summary: Delete Sync Bulk description: | Delete multiple failed workflow runs from the DLQ. When a workflow run fails, it is moved to the DLQ. You can manually remove a failed workflow run from the DLQ using this endpoint. This is useful for cleaning up failed runs that you no longer wish to retry or analyze. - You can either specify specific DLQ IDs to delete, or use filters to delete matching workflows. - When using filters without DLQ IDs, the operation supports pagination via cursor. x-mint: + href: /workflow/api-reference/dlq/delete/delete-pagination-api + metadata: + title: Sync Bulk + sidebarTitle: Sync Bulk + description: Delete Failed Workflow Runs with Pagination content: | - - For multi-value filters, a workflow run matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - + + The synchronous pagination API is deprecated. It’s recommended to use Async Bulk endpoint to process all matching entries in a bulk action. + parameters: - - in: query - name: dlqIds - required: false - schema: - type: array - items: - type: string - description: List of specific DLQ IDs to delete. If provided, other filters are ignored. - in: query name: cursor required: false @@ -1505,12 +1604,7 @@ paths: items: type: string description: | - Filter by label assigned to the workflow run. Supports multiple values. You can pass multiple values to match workflow runs with any of the given labels (OR logic). - - Examples: - - `label=my_label` - - `label=label_1&label=label_2` - - `label=label_1,label_2` + Filter by label assigned to the workflow run. Supports multiple values. - in: query name: failureFunctionState required: false @@ -1557,7 +1651,7 @@ paths: description: The number of workflow runs that were deleted. cursor: type: string - description: Pagination cursor for the next batch. Only present when using filters without DLQ IDs. + description: Pagination cursor for the next batch, when more results remain. "400": description: Bad Request content: @@ -1576,6 +1670,141 @@ paths: application/json: schema: $ref: "#/components/schemas/Error" + /v2/workflows/dlq/bulkDelete: + post: + tags: + - DLQ + summary: Delete Async Bulk + description: Create a bulk action that deletes every failed workflow run matching the query filters. + x-mint: + href: /workflow/api-reference/dlq/delete/delete-bulk-action + metadata: + title: Async Bulk + sidebarTitle: Async Bulk + description: Delete all matching failed Workflow runs in a bulk action. + content: | + The request returns after creating the action. Use its `actionId` with [Get a Bulk Action](/workflow/api-reference/bulk-actions/get-a-bulk-action) to check progress. + + Identical filters submitted while an action is already in-progress return the existing action. + + parameters: + - $ref: '#/components/parameters/DLQFromDateFilter' + - $ref: '#/components/parameters/DLQToDateFilter' + - $ref: '#/components/parameters/DLQWorkflowUrlFilter' + - $ref: '#/components/parameters/DLQWorkflowRunIdFilter' + - $ref: '#/components/parameters/DLQWorkflowCreatedAtFilter' + - $ref: '#/components/parameters/DLQLabelFilter' + - $ref: '#/components/parameters/DLQFailureFunctionStateFilter' + - $ref: '#/components/parameters/DLQCallerIpFilter' + - $ref: '#/components/parameters/DLQFlowControlKeyFilter' + responses: + '200': + description: The background action was created or an identical in-progress action was returned. + content: + application/json: + schema: + $ref: '#/components/schemas/DLQBulkActionCreated' + '412': + description: Too many bulk actions are already in progress. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /v2/workflows/dlq/bulkResume: + post: + tags: + - DLQ + summary: Resume Async Bulk + description: Create a bulk action that resumes every failed workflow run matching the query filters. Omit all filters to resume the entire Workflow DLQ. + x-mint: + href: /workflow/api-reference/dlq/resume/resume-bulk-action + metadata: + title: Async Bulk + sidebarTitle: Async Bulk + description: Resume all matching failed Workflow runs in a bulk action. + content: | + The request returns after creating the action. Use its `actionId` with [Get a Bulk Action](/workflow/api-reference/bulk-actions/get-a-bulk-action) to check progress. Each run continues from its failed step. + + Identical filters submitted while an action is already in-progress return the existing action. + + parameters: + - $ref: '#/components/parameters/DLQFromDateFilter' + - $ref: '#/components/parameters/DLQToDateFilter' + - $ref: '#/components/parameters/DLQWorkflowUrlFilter' + - $ref: '#/components/parameters/DLQWorkflowRunIdFilter' + - $ref: '#/components/parameters/DLQWorkflowCreatedAtFilter' + - $ref: '#/components/parameters/DLQLabelFilter' + - $ref: '#/components/parameters/DLQFailureFunctionStateFilter' + - $ref: '#/components/parameters/DLQCallerIpFilter' + - $ref: '#/components/parameters/DLQFlowControlKeyFilter' + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' + responses: + '200': + description: The background action was created or an identical in-progress action was returned. + content: + application/json: + schema: + $ref: '#/components/schemas/DLQBulkActionCreated' + '412': + description: Too many bulk actions are already in progress. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /v2/workflows/dlq/bulkRestart: + post: + tags: + - DLQ + summary: Restart Async Bulk + description: Create a bulk action that restarts every failed workflow run matching the query filters. + x-mint: + href: /workflow/api-reference/dlq/restart/restart-bulk-action + metadata: + title: Async Bulk + sidebarTitle: Async Bulk + description: Restart all matching failed Workflow runs in a bulk action. + content: | + Each restarted run begins at its first step. + + The request returns after creating the action. Use its `actionId` with [Get a Bulk Action](/workflow/api-reference/bulk-actions/get-a-bulk-action) to check progress. + + Identical filters submitted while an action is already in-progress return the existing action. + parameters: + - $ref: '#/components/parameters/DLQFromDateFilter' + - $ref: '#/components/parameters/DLQToDateFilter' + - $ref: '#/components/parameters/DLQWorkflowUrlFilter' + - $ref: '#/components/parameters/DLQWorkflowRunIdFilter' + - $ref: '#/components/parameters/DLQWorkflowCreatedAtFilter' + - $ref: '#/components/parameters/DLQLabelFilter' + - $ref: '#/components/parameters/DLQFailureFunctionStateFilter' + - $ref: '#/components/parameters/DLQCallerIpFilter' + - $ref: '#/components/parameters/DLQFlowControlKeyFilter' + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' + responses: + '200': + description: The background action was created or an identical in-progress action was returned. + content: + application/json: + schema: + $ref: '#/components/schemas/DLQBulkActionCreated' + '412': + description: Too many bulk actions are already in progress. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' /v2/workflows/dlq/{dlqId}: get: tags: @@ -1624,12 +1853,18 @@ paths: delete: tags: - DLQ - summary: Delete Failed Workflow Run + summary: Delete Single ID description: | Delete a specific failed workflow run from the DLQ. Use this endpoint to remove a workflow from the DLQ after you have addressed the issue or determined that the workflow should not be retried. + x-mint: + href: /workflow/api-reference/dlq/delete/delete-single-id + metadata: + title: Single ID + sidebarTitle: Single ID + description: Delete one failed Workflow run by its DLQ ID. parameters: - in: path name: dlqId @@ -1664,8 +1899,13 @@ paths: post: tags: - DLQ - summary: Resume Workflow from DLQ + summary: Resume Single ID x-mint: + href: /workflow/api-reference/dlq/resume/resume-single-id + metadata: + title: Single ID + sidebarTitle: Single ID + description: Resume one failed Workflow run by its DLQ ID. content: | When a workflow run fails, it's automatically moved to the DLQ (Dead Letter Queue) where it can be analyzed and resumed. The resume feature allows you to continue a failed workflow run from exactly where it failed, without re-executing successfully completed steps. @@ -1689,53 +1929,13 @@ paths: schema: type: string description: The DLQ ID of the workflow run to resume. - - in: header - name: Upstash-Retries - required: false - schema: - type: integer - description: Override the number of retries for the remaining workflow steps. - - in: header - name: Upstash-Delay - required: false - schema: - type: string - description: Override the delay before executing the next workflow step. Format is `` (e.g., "10s", "5m"). - - in: header - name: Upstash-Retry-Delay - required: false - schema: - type: string - description: Override the retry delay expression for the remaining workflow steps. - - in: header - name: Upstash-Flow-Control-Key - required: false - schema: - type: string - description: Override the flow control key for the remaining workflow steps. - - in: header - name: Upstash-Flow-Control-Value - required: false - schema: - type: string - description: Override the flow control configuration in the format `parallelism=, rate=, period=`. - - in: header - name: Upstash-Label - required: false - schema: - type: string - description: | - Override the label(s) for the remaining workflow steps. - - You can assign multiple labels by providing a comma-separated list. - - Example: `label_1,label_2` - - in: header - name: Upstash-Failure-Callback - required: false - schema: - type: string - description: Override the failure callback URL for the remaining workflow steps. + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: "200": description: Workflow resumed successfully @@ -1779,7 +1979,7 @@ paths: post: tags: - DLQ - summary: Bulk Resume Workflows from DLQ + summary: Resume Sync Bulk description: | When a workflow run fails, it's automatically moved to the DLQ (Dead Letter Queue) where it can be analyzed and resumed. The resume feature allows you to continue a failed workflow run from exactly where it failed, without re-executing successfully completed steps. @@ -1789,6 +1989,7 @@ paths: When a workflow is resumed, it continues execution from the last failed step. A new workflow run ID is generated, but the workflow maintains the state and results from previously completed steps. + This request processes one page and returns a cursor for the next page. For all matching runs in a bulk action, use [Async Bulk](/workflow/api-reference/dlq/resume/resume-bulk-action). You can make changes to the workflow code as long as these changes come after the failed steps. However, making changes before the failed step will break the code and is not allowed. @@ -1796,21 +1997,17 @@ paths: For more details, check out [Handle workflow route code changes](/workflow/howto/changes) page. x-mint: + href: /workflow/api-reference/dlq/resume/resume-pagination-api + metadata: + title: Sync Bulk + sidebarTitle: Sync Bulk + description: Resume Failed Workflow Runs with Pagination content: | - - For multi-value filters, a workflow run matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - + + The synchronous pagination API is deprecated. It’s recommended to use Async Bulk endpoint to process all matching entries in a bulk action. + + parameters: - - in: query - name: dlqIds - required: false - schema: - type: array - items: - type: string - description: List of specific DLQ IDs to resume. If provided, other filters are ignored. - in: query name: cursor required: false @@ -1822,7 +2019,7 @@ paths: required: false schema: type: integer - description: Maximum number of workflows to resume. If not provided, all matching workflows will be resumed. + description: Maximum number of workflows to resume in this page. Defaults to 100. - in: query name: fromDate required: false @@ -1904,53 +2101,13 @@ paths: items: type: string description: Filter workflows by Flow Control Key. Supports multiple values. - - in: header - name: Upstash-Retries - required: false - schema: - type: integer - description: Override the number of retries for the remaining workflow steps. - - in: header - name: Upstash-Delay - required: false - schema: - type: string - description: Override the delay before executing the next workflow step. Format is `` (e.g., "10s", "5m"). - - in: header - name: Upstash-Retry-Delay - required: false - schema: - type: string - description: Override the retry delay expression for the remaining workflow steps. - - in: header - name: Upstash-Flow-Control-Key - required: false - schema: - type: string - description: Override the flow control key for the remaining workflow steps. - - in: header - name: Upstash-Flow-Control-Value - required: false - schema: - type: string - description: Override the flow control configuration in the format `parallelism=, rate=, period=`. - - in: header - name: Upstash-Label - required: false - schema: - type: string - description: | - Override the label(s) for the remaining workflow steps. - - You can assign multiple labels by providing a comma-separated list. - - Example: `label_1,label_2` - - in: header - name: Upstash-Failure-Callback - required: false - schema: - type: string - description: Override the failure callback URL for the remaining workflow steps. + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: "200": description: Workflows resumed successfully @@ -2003,12 +2160,18 @@ paths: post: tags: - DLQ - summary: Restart Workflow from DLQ + summary: Restart Single ID description: | Restart a failed workflow run from the DLQ. The workflow will start from the beginning. Unlike resume, which continues from where the workflow failed, restart executes the entire workflow from the first step. A new workflow run ID is generated and all steps will be executed again. + x-mint: + href: /workflow/api-reference/dlq/restart/restart-single-id + metadata: + title: Single ID + sidebarTitle: Single ID + description: Restart one failed Workflow run by its DLQ ID. parameters: - in: path name: dlqId @@ -2016,53 +2179,13 @@ paths: schema: type: string description: The DLQ ID of the workflow run to restart. - - in: header - name: Upstash-Retries - required: false - schema: - type: integer - description: Override the number of retries for the workflow steps. - - in: header - name: Upstash-Delay - required: false - schema: - type: string - description: Override the delay before executing the workflow. Format is `` (e.g., "10s", "5m"). - - in: header - name: Upstash-Retry-Delay - required: false - schema: - type: string - description: Override the retry delay expression for the workflow steps. - - in: header - name: Upstash-Flow-Control-Key - required: false - schema: - type: string - description: Override the flow control key for the workflow. - - in: header - name: Upstash-Flow-Control-Value - required: false - schema: - type: string - description: Override the flow control configuration in the format `parallelism=, rate=, period=`. - - in: header - name: Upstash-Label - required: false - schema: - type: string - description: | - Override the label(s) for the workflow. - - You can assign multiple labels by providing a comma-separated list. - - Example: `label_1,label_2` - - in: header - name: Upstash-Failure-Callback - required: false - schema: - type: string - description: Override the failure callback URL for the workflow. + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: "200": description: Workflow restarted successfully @@ -2106,7 +2229,7 @@ paths: post: tags: - DLQ - summary: Bulk Restart Workflows from DLQ + summary: Restart Sync Bulk description: | Restart multiple failed workflow runs from the DLQ. Each workflow will start from the beginning. @@ -2115,22 +2238,19 @@ paths: A maximum of 50 workflow runs can be restarted per request. If more runs are available, a cursor is returned, which can be used in subsequent requests to continue the operation. When no cursor is returned, all entries have been processed. Each restarted workflow run is assigned a new random Run ID. + For all matching runs in a bulk action, use [Async Bulk](/workflow/api-reference/dlq/restart/restart-bulk-action). + To restart specific entries, use [Multiple IDs](/workflow/api-reference/dlq/restart/restart-list-of-ids). x-mint: + href: /workflow/api-reference/dlq/restart/restart-pagination-api + metadata: + title: Sync Bulk + sidebarTitle: Sync Bulk + description: Restart Failed Workflow Runs with Pagination content: | - - For multi-value filters, a workflow run matches if its value equals any of the given values (OR logic), and multiple filters are combined with AND logic. - - Multiple values can be passed either by repeating the query parameter (`label=label_1&label=label_2`) or as a single comma-separated value (`label=label_1,label_2`). - + + The synchronous pagination API is deprecated. It’s recommended to use Async Bulk endpoint to process all matching entries in a bulk action. + parameters: - - in: query - name: dlqIds - required: false - schema: - type: array - items: - type: string - description: List of specific DLQ IDs to restart. If provided, other filters are ignored. - in: query name: cursor required: false @@ -2142,7 +2262,7 @@ paths: required: false schema: type: integer - description: Maximum number of workflows to restart. If not provided, all matching workflows will be restarted. + description: Maximum number of workflows to restart in this page (up to 50). - in: query name: fromDate required: false @@ -2224,53 +2344,13 @@ paths: items: type: string description: Filter workflows by Flow Control Key. Supports multiple values. - - in: header - name: Upstash-Retries - required: false - schema: - type: integer - description: Override the number of retries for the workflow steps. - - in: header - name: Upstash-Delay - required: false - schema: - type: string - description: Override the delay before executing the workflows. Format is `` (e.g., "10s", "5m"). - - in: header - name: Upstash-Retry-Delay - required: false - schema: - type: string - description: Override the retry delay expression for the workflow steps. - - in: header - name: Upstash-Flow-Control-Key - required: false - schema: - type: string - description: Override the flow control key for the workflows. - - in: header - name: Upstash-Flow-Control-Value - required: false - schema: - type: string - description: Override the flow control configuration in the format `parallelism=, rate=, period=`. - - in: header - name: Upstash-Label - required: false - schema: - type: string - description: | - Override the label(s) for the workflows. - - You can assign multiple labels by providing a comma-separated list. - - Example: `label_1,label_2` - - in: header - name: Upstash-Failure-Callback - required: false - schema: - type: string - description: Override the failure callback URL for the workflows. + - $ref: '#/components/parameters/DLQOverrideRetries' + - $ref: '#/components/parameters/DLQOverrideDelay' + - $ref: '#/components/parameters/DLQOverrideRetryDelay' + - $ref: '#/components/parameters/DLQOverrideFlowControlKey' + - $ref: '#/components/parameters/DLQOverrideFlowControlValue' + - $ref: '#/components/parameters/DLQOverrideLabel' + - $ref: '#/components/parameters/DLQOverrideFailureCallback' responses: "200": description: Workflows restarted successfully @@ -2324,12 +2404,14 @@ paths: tags: - DLQ summary: Retry Failure Callback - description: | - If the failure callback for a workflow run has failed, you can use this endpoint to manually trigger the failure callback again. - This is useful for ensuring that your system is notified of workflow failures even if the original callback attempt did not succeed. + x-mint: + content: | + If the failure callback for a workflow run has failed, you can use this endpoint to manually trigger the failure callback again. + This is useful for ensuring that your system is notified of workflow failures even if the original callback attempt did not succeed. + + The state of the failure callback for each workflow run is included in the DLQ message response as failureCallbackInfo.state. + You can filter for all workflow runs with a failed failure callback by using the failureCallbackState filter when listing workflow runs in the DLQ with the `/v2/workflows/dlq` endpoint. - The state of the failure callback for each workflow run is included in the DLQ message response as failureCallbackInfo.state. - You can filter for all workflow runs with a failed failure callback by using the failureCallbackState filter when listing workflow runs in the DLQ with the `/v2/workflows/dlq` endpoint. parameters: - in: path name: dlqId @@ -2380,14 +2462,15 @@ paths: tags: - DLQ summary: Cancel In-Progress Failure Callback - description: | - Cancel an in-progress failure callback for a failed workflow. + x-mint: + content: | + Cancel an in-progress failure callback for a failed workflow. - When you retry a failed failure callback using the POST endpoint, it enters an in-progress state. - This endpoint allows you to cancel that in-progress callback before it completes. + When you retry a failed failure callback using the POST endpoint, it enters an in-progress state. + This endpoint allows you to cancel that in-progress callback before it completes. - The callback must be in an in-progress state. If there's no in-progress callback, - the request will fail with a 400 error. + The callback must be in an in-progress state. If there's no in-progress callback, + the request will fail with a 400 error. parameters: - in: path name: dlqId From 45f99be5585bda018353296e323fd2624be1d1f7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 18:58:19 +0000 Subject: [PATCH 2/2] chore(llms): regenerate llms.txt and llms-full.txt --- llms-full.txt | 599 ++++++++++++-------------------------------------- llms.txt | 84 +------ 2 files changed, 145 insertions(+), 538 deletions(-) diff --git a/llms-full.txt b/llms-full.txt index 55526efc8..5e488b682 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -15447,263 +15447,81 @@ npx upstash -# Get a Bulk Action -Source: https://upstash.com/docs/qstash/api-reference/bulk-actions/get-a-bulk-action +# Multiple IDs +Source: https://upstash.com/docs/qstash/api-reference/dlq/delete/delete-list-of-ids -/qstash/openapi.yaml get /v2/bulkActions/{actionId} -Retrieve the details and progress of a bulk action +Pass one or more `dlqIds` to delete only those DLQ entries. -# List Bulk Actions -Source: https://upstash.com/docs/qstash/api-reference/bulk-actions/list-bulk-actions - -/qstash/openapi.yaml get /v2/bulkActions -List the bulk actions created by filter-based message cancels - -# Bulk Delete DLQ messages -Source: https://upstash.com/docs/qstash/api-reference/dlq/bulk-delete-dlq-messages - -/qstash/openapi.yaml delete /v2/dlq -Delete multiple messages from the DLQ - -# Bulk Retry DLQ messages -Source: https://upstash.com/docs/qstash/api-reference/dlq/bulk-retry-dlq-messages - -/qstash/openapi.yaml post /v2/dlq/retry -Retry delivery of multiple messages from the DLQ - -# Delete a DLQ message -Source: https://upstash.com/docs/qstash/api-reference/dlq/delete-a-dlq-message - -/qstash/openapi.yaml delete /v2/dlq/{dlqId} -Manually remove a message from the DLQ - -# Get a DLQ message -Source: https://upstash.com/docs/qstash/api-reference/dlq/get-a-dlq-message - -/qstash/openapi.yaml get /v2/dlq/{dlqId} -Get a specific message from the DLQ - -# List DLQ messages -Source: https://upstash.com/docs/qstash/api-reference/dlq/list-dlq-messages - -/qstash/openapi.yaml get /v2/dlq -List and paginate through all messages currently in the DLQ - -# Retry a DLQ message -Source: https://upstash.com/docs/qstash/api-reference/dlq/retry-a-dlq-message - -/qstash/openapi.yaml post /v2/dlq/retry/{dlqId} -Retry delivery of a message from the DLQ - -# Get Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/get-flow-control-key - -/qstash/openapi.yaml get /v2/flowControl/{flowControlKey} -Get details of a specific Flow Control key - -# Get Global Parallelism -Source: https://upstash.com/docs/qstash/api-reference/flow-control/get-global-parallelism - -/qstash/openapi.yaml get /v2/globalParallelism -Returns the current global parallelism usage across all flow control keys - -# List Flow Control Keys -Source: https://upstash.com/docs/qstash/api-reference/flow-control/list-flow-control-keys - -/qstash/openapi.yaml get /v2/flowControl -List all Flow Control keys - -# Pause Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/pause-flow-control-key - -/qstash/openapi.yaml post /v2/flowControl/{flowControlKey}/pause -Pauses the delivery of messages associated with a specific flow-control key. - -# Pin Configuration for Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/pin-configuration-for-flow-control-key - -/qstash/openapi.yaml post /v2/flowControl/{flowControlKey}/pin -Pins a processing configuration for a specific flow-control key. - -# Reset Rate for Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/reset-rate-for-flow-control-key - -/qstash/openapi.yaml post /v2/flowControl/{flowControlKey}/resetRate -Resets the rate configuration state for a specific flow-control key. - -# Resume Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/resume-flow-control-key - -/qstash/openapi.yaml post /v2/flowControl/{flowControlKey}/resume -Resumes the delivery of messages associated with a specific flow-control key. - -# Unpin Configuration for Flow Control Key -Source: https://upstash.com/docs/qstash/api-reference/flow-control/unpin-configuration-for-flow-control-key - -/qstash/openapi.yaml post /v2/flowControl/{flowControlKey}/unpin -Removes the pinned configuration for a specific flow-control key. - -# List Logs -Source: https://upstash.com/docs/qstash/api-reference/logs/list-logs - -/qstash/openapi.yaml get /v2/logs -Paginate through logs of published messages - -# Batch Messages -Source: https://upstash.com/docs/qstash/api-reference/messages/batch-messages - -/qstash/openapi.yaml post /v2/batch -Send multiple messages in a single request - -# Bulk Cancel Messages -Source: https://upstash.com/docs/qstash/api-reference/messages/bulk-cancel-messages - -/qstash/openapi.yaml delete /v2/messages -Delete all pending messages - -# Cancel a Message -Source: https://upstash.com/docs/qstash/api-reference/messages/cancel-a-message - -/qstash/openapi.yaml delete /v2/messages/{messageId} -Cancel a pending message - -# Enqueue a Message -Source: https://upstash.com/docs/qstash/api-reference/messages/enqueue-a-message - -/qstash/openapi.yaml post /v2/enqueue/{queueName}/{destination} -Enqueue a message to the specified queue - -# Get a Message -Source: https://upstash.com/docs/qstash/api-reference/messages/get-a-message - -/qstash/openapi.yaml get /v2/messages/{messageId} -Retrieve details of a specific message - -# Publish a Message -Source: https://upstash.com/docs/qstash/api-reference/messages/publish-a-message - -/qstash/openapi.yaml post /v2/publish/{destination} -Publish a message to the specified destination - -# Retry a Message Now -Source: https://upstash.com/docs/qstash/api-reference/messages/retry-a-message-now - -/qstash/openapi.yaml post /v2/messages/{messageId}/retry -Deliver a delayed message, or a message waiting for its next retry, immediately - -# Delete a queue -Source: https://upstash.com/docs/qstash/api-reference/queues/delete-a-queue - -/qstash/openapi.yaml delete /v2/queues/{queueName} -Deletes a queue - -# Get a Queue -Source: https://upstash.com/docs/qstash/api-reference/queues/get-a-queue - -/qstash/openapi.yaml get /v2/queues/{queueName} -Get details of a specific queue - -# List Queues -Source: https://upstash.com/docs/qstash/api-reference/queues/list-queues - -/qstash/openapi.yaml get /v2/queues -List all your queues - -# Pause Queue -Source: https://upstash.com/docs/qstash/api-reference/queues/pause-queue - -/qstash/openapi.yaml post /v2/queues/{queueName}/pause -Pause a queue to stop the delivery of enqueued messages - -# Resume Queue -Source: https://upstash.com/docs/qstash/api-reference/queues/resume-queue - -/qstash/openapi.yaml post /v2/queues/{queueName}/resume -Resumes a queue to starts the delivery of enqueued messages - -# Upsert a Queue -Source: https://upstash.com/docs/qstash/api-reference/queues/upsert-a-queue - -/qstash/openapi.yaml post /v2/queues -Updates or creates a queue - -# Create a Schedule -Source: https://upstash.com/docs/qstash/api-reference/schedules/create-a-schedule - -/qstash/openapi.yaml post /v2/schedules/{destination} -Create a schedule to send messages periodically - -# Delete a Schedule -Source: https://upstash.com/docs/qstash/api-reference/schedules/delete-a-schedule - -/qstash/openapi.yaml delete /v2/schedules/{scheduleId} -Delete a schedule +## Request -# Get a Schedule -Source: https://upstash.com/docs/qstash/api-reference/schedules/get-a-schedule + + DLQ IDs to delete. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + -/qstash/openapi.yaml get /v2/schedules/{scheduleId} -Get details of a specific schedule +## Response -# List schedules -Source: https://upstash.com/docs/qstash/api-reference/schedules/list-schedules +Number of DLQ entries deleted. -/qstash/openapi.yaml get /v2/schedules -List all schedules + -# Pause a Schedule -Source: https://upstash.com/docs/qstash/api-reference/schedules/pause-a-schedule +```sh curl +curl -X DELETE 'https://qstash-eu-central-1.upstash.io/v2/dlq?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` -/qstash/openapi.yaml post /v2/schedules/{scheduleId}/pause -Pause a Schedule + -# Resume a Schedule -Source: https://upstash.com/docs/qstash/api-reference/schedules/resume-a-schedule + -/qstash/openapi.yaml post /v2/schedules/{scheduleId}/resume -Resume a paused Schedule +```json 200 OK +{ + "deleted": 2 +} +``` -# Get Signing Keys -Source: https://upstash.com/docs/qstash/api-reference/signing-keys/get-signing-keys + -/qstash/openapi.yaml get /v2/keys -Retrieve your current and next signing keys +# Multiple IDs +Source: https://upstash.com/docs/qstash/api-reference/dlq/retry/retry-list-of-ids -# Rotate Signing Keys -Source: https://upstash.com/docs/qstash/api-reference/signing-keys/rotate-signing-keys +Pass one or more `dlqIds` to retry only those DLQ entries. -/qstash/openapi.yaml post /v2/keys/rotate -Rotate your signing keys +A new message is created for each entry with the original body and headers, then the original entry is removed from the DLQ. -# Delete a URL Group -Source: https://upstash.com/docs/qstash/api-reference/url-groups/delete-a-url-group +## Query parameters -/qstash/openapi.yaml delete /v2/topics/{urlGroupName} -Delete a topic and all its endpoints + + DLQ IDs to retry. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + -# Get a URL Group -Source: https://upstash.com/docs/qstash/api-reference/url-groups/get-a-url-group +## Response -/qstash/openapi.yaml get /v2/topics/{urlGroupName} -Retrieve details of a specific URL Group +Publish responses in the same order as the supplied IDs. Each includes a `messageId` and may include `deduplicated`. +Empty; this request does not paginate. -# List URL Groups -Source: https://upstash.com/docs/qstash/api-reference/url-groups/list-url-groups + -/qstash/openapi.yaml get /v2/topics -List all your URL Groups +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/dlq/retry?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' \ + -H 'Upstash-Retries: 0' +``` -# Remove Endpoints -Source: https://upstash.com/docs/qstash/api-reference/url-groups/remove-endpoints + -/qstash/openapi.yaml delete /v2/topics/{urlGroupName}/endpoints -Remove one or more endpoints from a URL Group + -# Upsert URL Group and Endpoint -Source: https://upstash.com/docs/qstash/api-reference/url-groups/upsert-url-group-and-endpoint +```json 200 OK +{ + "cursor": "", + "responses": [ + { "messageId": "" }, + { "messageId": "" } + ] +} +``` -/qstash/openapi.yaml post /v2/topics/{urlGroupName}/endpoints -Add an endpoint to a URL Group + # API Rate Limit Response Source: https://upstash.com/docs/qstash/api/api-ratelimiting @@ -16770,6 +16588,12 @@ You can manually republish messages from the dead letter queue in the console. 1. **Retry** - Republish the message and remove it from the dead letter queue. Republished messages are just like any other message and will be retried automatically if they fail. 2. **Delete** - Delete the message from the dead letter queue. +## Bulk actions + +To act on every DLQ message matching a filter, use the dedicated [Retry Async Bulk](/docs/qstash/api-reference/dlq/retry/retry-bulk-action) or [Delete Async Bulk](/docs/qstash/api-reference/dlq/delete/delete-bulk-action) `POST` endpoint. Each returns an action ID you can use to [check progress](/docs/qstash/api-reference/bulk-actions/get-a-bulk-action). + +To act on specific DLQ entries, use [Retry Multiple IDs](/docs/qstash/api-reference/dlq/retry/retry-list-of-ids) or [Delete Multiple IDs](/docs/qstash/api-reference/dlq/delete/delete-list-of-ids). + ## Limitations Dead letter queues are subject only to a retention period that depends on your plan. Messages are deleted when their retention period expires. See the “Max DLQ Retention” row on the [QStash Pricing](https://upstash.com/pricing/qstash) page. @@ -20755,7 +20579,7 @@ Source: https://upstash.com/docs/qstash/overall/changelog * [Batch publish messages](/docs/qstash/api-reference/messages/batch-messages) -* [Bulk delete](/docs/qstash/api-reference/dlq/bulk-delete-dlq-messages) for DLQ +* [Bulk delete](/docs/qstash/api-reference/dlq/delete/delete-pagination-api) for DLQ @@ -20766,7 +20590,7 @@ Source: https://upstash.com/docs/qstash/overall/changelog * Put last response in DLQ -* DLQ [get message](/docs/qstash/api-reference/dlq/delete-a-dlq-message) +* DLQ [get message](/docs/qstash/api-reference/dlq/get-a-dlq-message) * Pass schedule ID to the header when calling the user's endpoint * Added more information to [callbacks](/docs/qstash/features/callbacks) @@ -109783,262 +109607,117 @@ Isaac Newton, an English polymath, was a key figure in the Scientific Revolution Marie Curie, a Polish-French physicist and chemist, conducted pioneering research on radioactivity and was the first woman to win a Nobel Prize. She is the only person to win Nobel Prizes in two scientific fields and her work has had a lasting impact on physics and chemistry. ``` -# Get a Bulk Action -Source: https://upstash.com/docs/workflow/api-reference/bulk-actions/get-a-bulk-action - -/workflow/openapi.yaml get /v2/workflows/bulkActions/{actionId} -Retrieve the details and progress of a bulk action - -# List Bulk Actions -Source: https://upstash.com/docs/workflow/api-reference/bulk-actions/list-bulk-actions - -/workflow/openapi.yaml get /v2/workflows/bulkActions -List the bulk actions created by filter-based workflow run cancels - -# Bulk Delete Failed Workflow Runs -Source: https://upstash.com/docs/workflow/api-reference/dlq/bulk-delete-failed-workflow-runs - -/workflow/openapi.yaml delete /v2/workflows/dlq -Delete multiple failed workflow runs from the DLQ. - -When a workflow run fails, it is moved to the DLQ. You can manually remove a failed workflow run from the DLQ using this endpoint. This is useful for cleaning up failed runs that you no longer wish to retry or analyze. - -You can either specify specific DLQ IDs to delete, or use filters to delete matching workflows. -When using filters without DLQ IDs, the operation supports pagination via cursor. - -# Bulk Restart Workflows from DLQ -Source: https://upstash.com/docs/workflow/api-reference/dlq/bulk-restart-workflows-from-dlq - -/workflow/openapi.yaml post /v2/workflows/dlq/restart -Restart multiple failed workflow runs from the DLQ. Each workflow will start from the beginning. - -Unlike resume, which continues from where workflows failed, restart executes the entire workflows -from the first step. New workflow run IDs are generated and all steps will be executed again. - -A maximum of 50 workflow runs can be restarted per request. If more runs are available, a cursor is returned, which can be used in subsequent requests to continue the operation. When no cursor is returned, all entries have been processed. -Each restarted workflow run is assigned a new random Run ID. - -# Bulk Resume Workflows from DLQ -Source: https://upstash.com/docs/workflow/api-reference/dlq/bulk-resume-workflows-from-dlq - -/workflow/openapi.yaml post /v2/workflows/dlq/resume -When a workflow run fails, it's automatically moved to the DLQ (Dead Letter Queue) where it can be analyzed and resumed. - The resume feature allows you to continue a failed workflow run from exactly where it failed, without re-executing successfully completed steps. - - This is particularly useful for long-running workflows where you don't want to lose progress from successful steps when a single step fails. - - When a workflow is resumed, it continues execution from the last failed step. A new workflow run ID is generated, - but the workflow maintains the state and results from previously completed steps. - - - You can make changes to the workflow code as long as these changes come after the failed steps. - However, making changes before the failed step will break the code and is not allowed. - - For more details, check out [Handle workflow route code changes](/workflow/howto/changes) page. - - -# Cancel In-Progress Failure Callback -Source: https://upstash.com/docs/workflow/api-reference/dlq/cancel-in-progress-failure-callback - -/workflow/openapi.yaml delete /v2/workflows/dlq/callback/{dlqId} -Cancel an in-progress failure callback for a failed workflow. - -When you retry a failed failure callback using the POST endpoint, it enters an in-progress state. -This endpoint allows you to cancel that in-progress callback before it completes. - -The callback must be in an in-progress state. If there's no in-progress callback, -the request will fail with a 400 error. - -# Delete Failed Workflow Run -Source: https://upstash.com/docs/workflow/api-reference/dlq/delete-failed-workflow-run - -/workflow/openapi.yaml delete /v2/workflows/dlq/{dlqId} -Delete a specific failed workflow run from the DLQ. - -Use this endpoint to remove a workflow from the DLQ after you have addressed the issue -or determined that the workflow should not be retried. - -# Get Failed Workflow Run -Source: https://upstash.com/docs/workflow/api-reference/dlq/get-failed-workflow-run - -/workflow/openapi.yaml get /v2/workflows/dlq/{dlqId} -Get details of a specific failed workflow run from the DLQ. - -# List Failed Workflow Runs -Source: https://upstash.com/docs/workflow/api-reference/dlq/list-failed-workflow-runs - -/workflow/openapi.yaml get /v2/workflows/dlq -List and paginate through all failed workflow runs currently in the DLQ. - -Failed workflows end up in the DLQ after exhausting all retry attempts. You can filter, -paginate, and inspect these failures to understand what went wrong and decide whether to -resume, restart, or delete them. - -# Restart Workflow from DLQ -Source: https://upstash.com/docs/workflow/api-reference/dlq/restart-workflow-from-dlq - -/workflow/openapi.yaml post /v2/workflows/dlq/restart/{dlqId} -Restart a failed workflow run from the DLQ. The workflow will start from the beginning. - -Unlike resume, which continues from where the workflow failed, restart executes the entire workflow -from the first step. A new workflow run ID is generated and all steps will be executed again. - -# Resume Workflow from DLQ -Source: https://upstash.com/docs/workflow/api-reference/dlq/resume-workflow-from-dlq - -/workflow/openapi.yaml post /v2/workflows/dlq/resume/{dlqId} - -# Retry Failure Callback -Source: https://upstash.com/docs/workflow/api-reference/dlq/retry-failure-callback - -/workflow/openapi.yaml post /v2/workflows/dlq/callback/{dlqId} -If the failure callback for a workflow run has failed, you can use this endpoint to manually trigger the failure callback again. -This is useful for ensuring that your system is notified of workflow failures even if the original callback attempt did not succeed. - -The state of the failure callback for each workflow run is included in the DLQ message response as failureCallbackInfo.state. -You can filter for all workflow runs with a failed failure callback by using the failureCallbackState filter when listing workflow runs in the DLQ with the `/v2/workflows/dlq` endpoint. - -# Get Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/get-flow-control-key - -/workflow/openapi.yaml get /v2/flowControl/{flowControlKey} -Get details of a specific Flow Control key - -# Get Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/get-flow-control-key-1 - -/workflow/openapi.yaml get /v2/keys/rotate -Get details of a specific Flow Control key. - -Flow Control keys are used to manage concurrency and rate limiting for workflow steps. -This endpoint returns the current waitlist size for the specified flow control key, -which indicates how many workflow steps are currently waiting due to flow control constraints. - -# Get Global Parallelism -Source: https://upstash.com/docs/workflow/api-reference/flow-control/get-global-parallelism +# Multiple IDs +Source: https://upstash.com/docs/workflow/api-reference/dlq/delete/delete-list-of-ids -/workflow/openapi.yaml get /v2/globalParallelism -Returns the current global parallelism usage across all flow control keys +Pass one or more `dlqIds` to delete only those DLQ entries. -# List Flow Control Keys -Source: https://upstash.com/docs/workflow/api-reference/flow-control/list-flow-control-keys +## Query parameters -/workflow/openapi.yaml get /v2/flowControl -List all Flow Control keys - -# Pause Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/pause-flow-control-key - -/workflow/openapi.yaml post /v2/flowControl/{flowControlKey}/pause -Pauses the delivery of messages associated with a specific flow-control key. - -# Pin Configuration for Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/pin-configuration-for-flow-control-key - -/workflow/openapi.yaml post /v2/flowControl/{flowControlKey}/pin -Pins a processing configuration for a specific flow-control key. - -# Reset Rate for Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/reset-rate-for-flow-control-key + + DLQ IDs to delete. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + -/workflow/openapi.yaml post /v2/flowControl/{flowControlKey}/resetRate -Resets the rate configuration state for a specific flow-control key. +## Response -# Resume Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/resume-flow-control-key +Number of DLQ entries deleted. -/workflow/openapi.yaml post /v2/flowControl/{flowControlKey}/resume -Resumes the delivery of messages associated with a specific flow-control key. + -# Unpin Configuration for Flow Control Key -Source: https://upstash.com/docs/workflow/api-reference/flow-control/unpin-configuration-for-flow-control-key +```sh curl +curl -X DELETE 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` -/workflow/openapi.yaml post /v2/flowControl/{flowControlKey}/unpin -Removes the pinned configuration for a specific flow-control key. + -# List Workflow Run Logs -Source: https://upstash.com/docs/workflow/api-reference/logs/list-workflow-run-logs + -/workflow/openapi.yaml get /v2/workflows/logs +```json 200 OK +{ + "deleted": 2 +} +``` -# List Waiters -Source: https://upstash.com/docs/workflow/api-reference/notify/list-waiters + -/workflow/openapi.yaml get /v2/waiters/{eventId} -List all active waiters for a specific event ID. +# Multiple IDs +Source: https://upstash.com/docs/workflow/api-reference/dlq/restart/restart-list-of-ids -Returns information about all workflow runs that are currently waiting for the specified event. +Pass one or more `dlqIds` to restart those failed workflow runs from their first steps. -# Notify Event -Source: https://upstash.com/docs/workflow/api-reference/notify/notify-event +## Query parameters -/workflow/openapi.yaml post /v2/notify/{eventId} -Notify an event to all waiters listening for that event ID. + + DLQ IDs to restart. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + -This endpoint broadcasts an event to all active waiters that are waiting for the specified event. -Each waiting workflow step receives the event data and continues execution. +## Response -**Important:** This is an "unsafe notify" operation - if there are no active waiters when the -notification is sent, the event is lost and will not be delivered later. For guaranteed delivery -within a specific workflow run, use the `/v2/notify/{workflowRunId}/{eventId}` endpoint instead. +Results for the restarted entries. Each includes a new `workflowRunId` and `workflowCreatedAt` in Unix milliseconds. Entries excluded by supplied filters are absent. +Empty; this request does not paginate. -# Notify Workflow Run Event -Source: https://upstash.com/docs/workflow/api-reference/notify/notify-workflow-run-event + -/workflow/openapi.yaml post /v2/notify/{workflowRunId}/{eventId} -Notify an event to a specific workflow run's waiters. +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/restart?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` -This endpoint sends an event notification to waiters within a specific workflow run. -Unlike the general notify endpoint, this uses a "safe notify" mechanism that guarantees -delivery even if no waiter is currently active. + -**Safe Notify Behavior:** -- If a waiter is currently active, it receives the notification immediately -- If no waiter is active, the notification is saved in the database -- When a waiter becomes active later, it will consume the saved notification -- This ensures events are never lost due to timing issues + -# Batch Trigger Workflow Runs -Source: https://upstash.com/docs/workflow/api-reference/runs/batch-trigger-workflow-runs +```json 200 OK +{ + "workflowRuns": [ + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 }, + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 } + ], + "cursor": "" +} +``` -/workflow/openapi.yaml post /v2/batch/trigger -Start multiple workflow runs in a single request. + -# Bulk Cancel Workflow Runs -Source: https://upstash.com/docs/workflow/api-reference/runs/bulk-cancel-workflow-runs +# Multiple IDs +Source: https://upstash.com/docs/workflow/api-reference/dlq/resume/resume-list-of-ids -/workflow/openapi.yaml delete /v2/workflows/runs -Cancel all matching workflow runs. +Pass one or more `dlqIds` to resume those failed workflow runs from their failed steps. -# Cancel Workflow Run -Source: https://upstash.com/docs/workflow/api-reference/runs/cancel-workflow-run +## Query parameters -/workflow/openapi.yaml delete /v2/workflows/runs/{workflowRunId} -Cancel an ongoing workflow run. + + DLQ IDs to resume. Repeat the parameter (`dlqIds=id1&dlqIds=id2`) or pass comma-separated values. + -# Retry a Step Now -Source: https://upstash.com/docs/workflow/api-reference/runs/retry-a-step-now +## Response -/workflow/openapi.yaml post /v2/messages/{messageId}/retry -Execute a workflow step that is waiting for its next retry immediately +Results for the resumed entries. Each includes a new `workflowRunId` and `workflowCreatedAt` in Unix milliseconds. Entries excluded by supplied filters are absent. +Empty; this request does not paginate. -# Trigger Workflow Run -Source: https://upstash.com/docs/workflow/api-reference/runs/trigger-workflow-run + -/workflow/openapi.yaml post /v2/trigger/{workflowUrl} -Start a new workflow run. +```sh curl +curl -X POST 'https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/resume?dlqIds=&dlqIds=' \ + -H 'Authorization: Bearer ' +``` -# Get Signing Keys -Source: https://upstash.com/docs/workflow/api-reference/signing-keys/get-signing-keys + -/workflow/openapi.yaml get /v2/keys -Retrieve your current and next signing keys + -# Rotate Signing Keys -Source: https://upstash.com/docs/workflow/api-reference/signing-keys/rotate-signing-keys +```json 200 OK +{ + "workflowRuns": [ + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 }, + { "workflowRunId": "", "workflowCreatedAt": 1720000000000 } + ], + "cursor": "" +} +``` -/workflow/openapi.yaml post /v2/keys/rotate -Rotate your signing keys + # Caveats Source: https://upstash.com/docs/workflow/basics/caveats @@ -112730,7 +112409,9 @@ Once a workflow run is in the DLQ, you can take the following actions: * **[Re-run Failure Function](/docs/workflow/features/dlq/callback)** – execute the workflow's failure handling logic again. * **[Delete](/docs/workflow/features/dlq/delete)** – remove the DLQ entry if no action is required. -You can apply these actions in bulk to multiple DLQ entries. Check the individual action pages for more details. +You can apply these actions in bulk to multiple DLQ entries. For all matching runs in a bulk action, use the dedicated [Delete Async Bulk](/docs/workflow/api-reference/dlq/delete/delete-bulk-action), [Resume Async Bulk](/docs/workflow/api-reference/dlq/resume/resume-bulk-action), or [Restart Async Bulk](/docs/workflow/api-reference/dlq/restart/restart-bulk-action) `POST` endpoint. Each returns an action ID you can use to [check progress](/docs/workflow/api-reference/bulk-actions/get-a-bulk-action). + +For specific entries, use [Delete Multiple IDs](/docs/workflow/api-reference/dlq/delete/delete-list-of-ids), [Resume Multiple IDs](/docs/workflow/api-reference/dlq/resume/resume-list-of-ids), or [Restart Multiple IDs](/docs/workflow/api-reference/dlq/restart/restart-list-of-ids). # Rerun Failure Function Source: https://upstash.com/docs/workflow/features/dlq/callback @@ -114490,11 +114171,11 @@ If you don't want to verify the signature, you can remove `QSTASH_CURRENT_SIGNIN When a workflow run fails and is moved to the Dead Letter Queue (DLQ), you have several options to handle it manually via the REST API: -### [Resume](/docs/workflow/api-reference/dlq/resume-workflow-from-dlq) +### [Resume](/docs/workflow/api-reference/dlq/resume/resume-single-id) * **What it does:** Continues a failed workflow run from exactly where it failed, preserving all successful step results. * **When to use:** Use this if you want to retry only the failed/pending steps without re-executing the entire workflow. -### [Restart](/docs/workflow/api-reference/dlq/restart-workflow-from-dlq) +### [Restart](/docs/workflow/api-reference/dlq/restart/restart-single-id) * **What it does:** Starts the failed workflow run over from the beginning, discarding all previous step results. * **When to use:** Use this if you want a clean execution, or if the failure may have been caused by a corrupted state that requires a fresh start. diff --git a/llms.txt b/llms.txt index 445da8970..fd04c1b05 100644 --- a/llms.txt +++ b/llms.txt @@ -190,49 +190,8 @@ Search these docs: GET https://upstash.com/docs/search?q= returns JSON { - [upstash_redis_database](https://upstash.com/docs/devops/terraform/resources/upstash_redis_database.md): Create and manage Upstash Redis databases. - [upstash_team](https://upstash.com/docs/devops/terraform/resources/upstash_team.md): Create and manage teams on Upstash. - [Overview](https://upstash.com/docs/introduction.md): Serverless data and messaging for developers: Redis, Vector, QStash, Workflow, Search, Box, and Blob, with SDKs, integrations, and a full-featured console. -- [Get a Bulk Action](https://upstash.com/docs/qstash/api-reference/bulk-actions/get-a-bulk-action.md): Retrieve the details and progress of a bulk action -- [List Bulk Actions](https://upstash.com/docs/qstash/api-reference/bulk-actions/list-bulk-actions.md): List the bulk actions created by filter-based message cancels -- [Bulk Delete DLQ messages](https://upstash.com/docs/qstash/api-reference/dlq/bulk-delete-dlq-messages.md): Delete multiple messages from the DLQ -- [Bulk Retry DLQ messages](https://upstash.com/docs/qstash/api-reference/dlq/bulk-retry-dlq-messages.md): Retry delivery of multiple messages from the DLQ -- [Delete a DLQ message](https://upstash.com/docs/qstash/api-reference/dlq/delete-a-dlq-message.md): Manually remove a message from the DLQ -- [Get a DLQ message](https://upstash.com/docs/qstash/api-reference/dlq/get-a-dlq-message.md): Get a specific message from the DLQ -- [List DLQ messages](https://upstash.com/docs/qstash/api-reference/dlq/list-dlq-messages.md): List and paginate through all messages currently in the DLQ -- [Retry a DLQ message](https://upstash.com/docs/qstash/api-reference/dlq/retry-a-dlq-message.md): Retry delivery of a message from the DLQ -- [Get Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/get-flow-control-key.md): Get details of a specific Flow Control key -- [Get Global Parallelism](https://upstash.com/docs/qstash/api-reference/flow-control/get-global-parallelism.md): Returns the current global parallelism usage across all flow control keys -- [List Flow Control Keys](https://upstash.com/docs/qstash/api-reference/flow-control/list-flow-control-keys.md): List all Flow Control keys -- [Pause Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/pause-flow-control-key.md): Pauses the delivery of messages associated with a specific flow-control key. -- [Pin Configuration for Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/pin-configuration-for-flow-control-key.md): Pins a processing configuration for a specific flow-control key. -- [Reset Rate for Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/reset-rate-for-flow-control-key.md): Resets the rate configuration state for a specific flow-control key. -- [Resume Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/resume-flow-control-key.md): Resumes the delivery of messages associated with a specific flow-control key. -- [Unpin Configuration for Flow Control Key](https://upstash.com/docs/qstash/api-reference/flow-control/unpin-configuration-for-flow-control-key.md): Removes the pinned configuration for a specific flow-control key. -- [List Logs](https://upstash.com/docs/qstash/api-reference/logs/list-logs.md): Paginate through logs of published messages -- [Batch Messages](https://upstash.com/docs/qstash/api-reference/messages/batch-messages.md): Send multiple messages in a single request -- [Bulk Cancel Messages](https://upstash.com/docs/qstash/api-reference/messages/bulk-cancel-messages.md): Delete all pending messages -- [Cancel a Message](https://upstash.com/docs/qstash/api-reference/messages/cancel-a-message.md): Cancel a pending message -- [Enqueue a Message](https://upstash.com/docs/qstash/api-reference/messages/enqueue-a-message.md): Enqueue a message to the specified queue -- [Get a Message](https://upstash.com/docs/qstash/api-reference/messages/get-a-message.md): Retrieve details of a specific message -- [Publish a Message](https://upstash.com/docs/qstash/api-reference/messages/publish-a-message.md): Publish a message to the specified destination -- [Retry a Message Now](https://upstash.com/docs/qstash/api-reference/messages/retry-a-message-now.md): Deliver a delayed message, or a message waiting for its next retry, immediately -- [Delete a queue](https://upstash.com/docs/qstash/api-reference/queues/delete-a-queue.md): Deletes a queue -- [Get a Queue](https://upstash.com/docs/qstash/api-reference/queues/get-a-queue.md): Get details of a specific queue -- [List Queues](https://upstash.com/docs/qstash/api-reference/queues/list-queues.md): List all your queues -- [Pause Queue](https://upstash.com/docs/qstash/api-reference/queues/pause-queue.md): Pause a queue to stop the delivery of enqueued messages -- [Resume Queue](https://upstash.com/docs/qstash/api-reference/queues/resume-queue.md): Resumes a queue to starts the delivery of enqueued messages -- [Upsert a Queue](https://upstash.com/docs/qstash/api-reference/queues/upsert-a-queue.md): Updates or creates a queue -- [Create a Schedule](https://upstash.com/docs/qstash/api-reference/schedules/create-a-schedule.md): Create a schedule to send messages periodically -- [Delete a Schedule](https://upstash.com/docs/qstash/api-reference/schedules/delete-a-schedule.md): Delete a schedule -- [Get a Schedule](https://upstash.com/docs/qstash/api-reference/schedules/get-a-schedule.md): Get details of a specific schedule -- [List schedules](https://upstash.com/docs/qstash/api-reference/schedules/list-schedules.md): List all schedules -- [Pause a Schedule](https://upstash.com/docs/qstash/api-reference/schedules/pause-a-schedule.md): Pause a Schedule -- [Resume a Schedule](https://upstash.com/docs/qstash/api-reference/schedules/resume-a-schedule.md): Resume a paused Schedule -- [Get Signing Keys](https://upstash.com/docs/qstash/api-reference/signing-keys/get-signing-keys.md): Retrieve your current and next signing keys -- [Rotate Signing Keys](https://upstash.com/docs/qstash/api-reference/signing-keys/rotate-signing-keys.md): Rotate your signing keys -- [Delete a URL Group](https://upstash.com/docs/qstash/api-reference/url-groups/delete-a-url-group.md): Delete a topic and all its endpoints -- [Get a URL Group](https://upstash.com/docs/qstash/api-reference/url-groups/get-a-url-group.md): Retrieve details of a specific URL Group -- [List URL Groups](https://upstash.com/docs/qstash/api-reference/url-groups/list-url-groups.md): List all your URL Groups -- [Remove Endpoints](https://upstash.com/docs/qstash/api-reference/url-groups/remove-endpoints.md): Remove one or more endpoints from a URL Group -- [Upsert URL Group and Endpoint](https://upstash.com/docs/qstash/api-reference/url-groups/upsert-url-group-and-endpoint.md): Add an endpoint to a URL Group +- [Multiple IDs](https://upstash.com/docs/qstash/api-reference/dlq/delete/delete-list-of-ids.md): Delete specific QStash DLQ messages by their DLQ IDs. +- [Multiple IDs](https://upstash.com/docs/qstash/api-reference/dlq/retry/retry-list-of-ids.md): Retry specific QStash DLQ messages by their DLQ IDs. - [API Rate Limit Response](https://upstash.com/docs/qstash/api/api-ratelimiting.md): This page documents the rate limiting behavior of our API and explains how to handle different types of rate limit errors. - [Authentication](https://upstash.com/docs/qstash/api/authentication.md): Authentication for the QStash API - [At-Least-Once Delivery](https://upstash.com/docs/qstash/features/at-least-once.md) @@ -1381,38 +1340,9 @@ Search these docs: GET https://upstash.com/docs/search?q= returns JSON { - [Orchestrator-Workers](https://upstash.com/docs/workflow/agents/patterns/orchestrator-workers.md) - [Parallelization](https://upstash.com/docs/workflow/agents/patterns/parallelization.md) - [Prompt Chaining](https://upstash.com/docs/workflow/agents/patterns/prompt-chaining.md) -- [Get a Bulk Action](https://upstash.com/docs/workflow/api-reference/bulk-actions/get-a-bulk-action.md): Retrieve the details and progress of a bulk action -- [List Bulk Actions](https://upstash.com/docs/workflow/api-reference/bulk-actions/list-bulk-actions.md): List the bulk actions created by filter-based workflow run cancels -- [Bulk Delete Failed Workflow Runs](https://upstash.com/docs/workflow/api-reference/dlq/bulk-delete-failed-workflow-runs.md): Delete multiple failed workflow runs from the DLQ. -- [Bulk Restart Workflows from DLQ](https://upstash.com/docs/workflow/api-reference/dlq/bulk-restart-workflows-from-dlq.md): Restart multiple failed workflow runs from the DLQ. Each workflow will start from the beginning. -- [Bulk Resume Workflows from DLQ](https://upstash.com/docs/workflow/api-reference/dlq/bulk-resume-workflows-from-dlq.md): When a workflow run fails, it's automatically moved to the DLQ (Dead Letter Queue) where it can be analyzed and resumed. The resume feature allows you to continue a failed workflow run from exactly where it failed, without re-executing successfully completed steps. -- [Cancel In-Progress Failure Callback](https://upstash.com/docs/workflow/api-reference/dlq/cancel-in-progress-failure-callback.md): Cancel an in-progress failure callback for a failed workflow. -- [Delete Failed Workflow Run](https://upstash.com/docs/workflow/api-reference/dlq/delete-failed-workflow-run.md): Delete a specific failed workflow run from the DLQ. -- [Get Failed Workflow Run](https://upstash.com/docs/workflow/api-reference/dlq/get-failed-workflow-run.md): Get details of a specific failed workflow run from the DLQ. -- [List Failed Workflow Runs](https://upstash.com/docs/workflow/api-reference/dlq/list-failed-workflow-runs.md): List and paginate through all failed workflow runs currently in the DLQ. -- [Restart Workflow from DLQ](https://upstash.com/docs/workflow/api-reference/dlq/restart-workflow-from-dlq.md): Restart a failed workflow run from the DLQ. The workflow will start from the beginning. -- [Resume Workflow from DLQ](https://upstash.com/docs/workflow/api-reference/dlq/resume-workflow-from-dlq.md) -- [Retry Failure Callback](https://upstash.com/docs/workflow/api-reference/dlq/retry-failure-callback.md): If the failure callback for a workflow run has failed, you can use this endpoint to manually trigger the failure callback again. This is useful for ensuring that your system is notified of workflow failures even if the original callback attempt did not succeed. -- [Get Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/get-flow-control-key.md): Get details of a specific Flow Control key -- [Get Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/get-flow-control-key-1.md): Get details of a specific Flow Control key. -- [Get Global Parallelism](https://upstash.com/docs/workflow/api-reference/flow-control/get-global-parallelism.md): Returns the current global parallelism usage across all flow control keys -- [List Flow Control Keys](https://upstash.com/docs/workflow/api-reference/flow-control/list-flow-control-keys.md): List all Flow Control keys -- [Pause Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/pause-flow-control-key.md): Pauses the delivery of messages associated with a specific flow-control key. -- [Pin Configuration for Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/pin-configuration-for-flow-control-key.md): Pins a processing configuration for a specific flow-control key. -- [Reset Rate for Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/reset-rate-for-flow-control-key.md): Resets the rate configuration state for a specific flow-control key. -- [Resume Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/resume-flow-control-key.md): Resumes the delivery of messages associated with a specific flow-control key. -- [Unpin Configuration for Flow Control Key](https://upstash.com/docs/workflow/api-reference/flow-control/unpin-configuration-for-flow-control-key.md): Removes the pinned configuration for a specific flow-control key. -- [List Workflow Run Logs](https://upstash.com/docs/workflow/api-reference/logs/list-workflow-run-logs.md) -- [List Waiters](https://upstash.com/docs/workflow/api-reference/notify/list-waiters.md): List all active waiters for a specific event ID. -- [Notify Event](https://upstash.com/docs/workflow/api-reference/notify/notify-event.md): Notify an event to all waiters listening for that event ID. -- [Notify Workflow Run Event](https://upstash.com/docs/workflow/api-reference/notify/notify-workflow-run-event.md): Notify an event to a specific workflow run's waiters. -- [Batch Trigger Workflow Runs](https://upstash.com/docs/workflow/api-reference/runs/batch-trigger-workflow-runs.md): Start multiple workflow runs in a single request. -- [Bulk Cancel Workflow Runs](https://upstash.com/docs/workflow/api-reference/runs/bulk-cancel-workflow-runs.md): Cancel all matching workflow runs. -- [Cancel Workflow Run](https://upstash.com/docs/workflow/api-reference/runs/cancel-workflow-run.md): Cancel an ongoing workflow run. -- [Retry a Step Now](https://upstash.com/docs/workflow/api-reference/runs/retry-a-step-now.md): Execute a workflow step that is waiting for its next retry immediately -- [Trigger Workflow Run](https://upstash.com/docs/workflow/api-reference/runs/trigger-workflow-run.md): Start a new workflow run. -- [Get Signing Keys](https://upstash.com/docs/workflow/api-reference/signing-keys/get-signing-keys.md): Retrieve your current and next signing keys -- [Rotate Signing Keys](https://upstash.com/docs/workflow/api-reference/signing-keys/rotate-signing-keys.md): Rotate your signing keys +- [Multiple IDs](https://upstash.com/docs/workflow/api-reference/dlq/delete/delete-list-of-ids.md): Delete specific failed Workflow runs by their DLQ IDs. +- [Multiple IDs](https://upstash.com/docs/workflow/api-reference/dlq/restart/restart-list-of-ids.md): Restart specific failed Workflow runs by their DLQ IDs. +- [Multiple IDs](https://upstash.com/docs/workflow/api-reference/dlq/resume/resume-list-of-ids.md): Resume specific failed Workflow runs by their DLQ IDs. - [Caveats](https://upstash.com/docs/workflow/basics/caveats.md) - [Overview](https://upstash.com/docs/workflow/basics/client.md) - [client.cancel](https://upstash.com/docs/workflow/basics/client/cancel.md) @@ -1519,7 +1449,3 @@ Search these docs: GET https://upstash.com/docs/search?q= returns JSON { - [context.waitForWebhook](https://upstash.com/docs/workflow/steps/waitForWebhook.md) - [General](https://upstash.com/docs/workflow/troubleshooting/general.md) - [Vercel](https://upstash.com/docs/workflow/troubleshooting/vercel.md) - -## OpenAPI Specs - -- [openapi](https://upstash.com/docs/workflow/openapi.yaml)