> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk Delete Failed Workflow Runs

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




## OpenAPI

````yaml /workflow/openapi.yaml delete /v2/workflows/dlq
openapi: 3.1.0
info:
  title: Upstash Workflow REST API
  description: >
    Upstash Workflow is a serverless workflow orchestration service built on top
    of Upstash QStash and Upstash Redis.
  version: 2.0.0
  contact:
    name: Upstash
    url: https://upstash.com
servers:
  - url: https://qstash.upstash.io
security:
  - bearerAuth: []
  - bearerAuthQuery: []
paths:
  /v2/workflows/dlq:
    delete:
      tags:
        - DLQ
      summary: Bulk Delete Failed Workflow Runs
      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.
      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
          schema:
            type: string
          description: Pagination cursor for deleting in batches.
        - in: query
          name: count
          required: false
          schema:
            type: integer
          description: Maximum number of workflows to delete per request.
        - in: query
          name: fromDate
          required: false
          schema:
            type: integer
            format: int64
          description: >-
            Filter by starting date in milliseconds (Unix timestamp). This is
            inclusive.
        - in: query
          name: toDate
          required: false
          schema:
            type: integer
            format: int64
          description: >-
            Filter by ending date in milliseconds (Unix timestamp). This is
            inclusive.
        - in: query
          name: workflowUrl
          required: false
          schema:
            type: string
          description: Filter by workflow URL.
        - in: query
          name: workflowRunId
          required: false
          schema:
            type: string
          description: Filter by workflow run ID.
        - in: query
          name: workflowCreatedAt
          required: false
          schema:
            type: integer
            format: int64
          description: >-
            Filter by workflow creation timestamp in milliseconds (Unix
            timestamp).
        - in: query
          name: label
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >
            Filter by label assigned to the workflow run. 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`
        - in: query
          name: failureFunctionState
          required: false
          schema:
            type: string
          description: |
            Filter by failure function state.

            | State | Description |
            |--------|--------------|
            | CALLBACK_INPROGRESS | The failure function is in progress. |
            | CALLBACK_SUCCESS | The failure function run successfully. |
            | CALLBACK_FAIL | The failure function failed to run. |
            | CALLBACK_CANCELED | The failure function was manually canceled |
        - in: query
          name: callerIp
          required: false
          schema:
            type: string
          description: Filter by IP address of the publisher.
        - in: query
          name: flowControlKey
          required: false
          schema:
            type: string
          description: Filter by Flow Control Key.
      responses:
        '200':
          description: Workflows deleted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    format: int64
                    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.
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Error message
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: QStash authentication token
    bearerAuthQuery:
      type: apiKey
      in: query
      name: qstash_token
      description: QStash authentication token passed as a query parameter

````