---
title: "Bulk Resume Workflows from DLQ"
method: POST
path: "/v2/workflows/dlq/resume"
tags: ["DLQ"]
---

# Bulk Resume Workflows from DLQ

`POST /v2/workflows/dlq/resume`

## Request

- Base URL: `https://qstash-eu-central-1.upstash.io`
- URL: `https://qstash-eu-central-1.upstash.io/v2/workflows/dlq/resume`
- Auth: one of:
  - HTTP bearer
  - API key in query parameter `qstash_token`
- TypeScript: <https://skmtc.dev/upstash/apis/upstash-workflow-rest-api/docs/v2/workflows/dlq/resume/post.ts> (a function with typed inputs; its response is checked against the schema)

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.

  <Note>
    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.
  </Note>

## Query parameters

- `dlqIds` string[]
- `cursor` string
- `count` integer
- `fromDate` integer
- `toDate` integer
- `workflowUrl` string[]
- `workflowRunId` string
- `workflowCreatedAt` integer
- `label` string[]
- `failureFunctionState` string[]
- `callerIp` string[]
- `flowControlKey` string[]

## Headers

- `Upstash-Retries` integer
- `Upstash-Delay` string
- `Upstash-Retry-Delay` string
- `Upstash-Flow-Control-Key` string
- `Upstash-Flow-Control-Value` string
- `Upstash-Label` string
- `Upstash-Failure-Callback` string

## Response `200`

Workflows resumed successfully

- object
  - `workflowRuns` object[]: Array of resumed workflow runs.
    - `workflowRunId` string: The ID of the resumed workflow run (a new ID is generated for each resumed run).
    - `workflowCreatedAt` integer: The timestamp when the resumed workflow run was created (Unix timestamp in milliseconds).
  - `cursor` string: Pagination cursor to use in subsequent requests. If empty, all matching workflows have been processed.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: Some DLQ messages were not found
- `500`: Internal Server Error

## Changes

- **2026-06-25** `4fcd7653bd06`: 4 info
  - for the `query` request parameter `callerIp`, the type was generalized from `string` to `array`
  - for the `query` request parameter `failureFunctionState`, the type was generalized from `string` to `array`
  - for the `query` request parameter `flowControlKey`, the type was generalized from `string` to `array`
  - for the `query` request parameter `workflowUrl`, the type was generalized from `string` to `array`
- **2026-05-15** `4cbcb5c2eac1`: 1 info
  - for the `query` request parameter `label`, the type was generalized from `string` to `array`

[Operation history](https://skmtc.dev/upstash/apis/upstash-workflow-rest-api/changes/v2/workflows/dlq/resume/post.md)

---

[API](https://skmtc.dev/upstash/apis/upstash-workflow-rest-api.md) - [All operations](https://skmtc.dev/upstash/apis/upstash-workflow-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/upstash/apis/upstash-workflow-rest-api/revisions/251bee05a7ec?raw)
