> ## Documentation index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Ask it with GET https://upstash.com/docs/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.
> Feature requests: https://upstash.com/docs/common/help/feature-requests.md lists what users asked for and how to vote for a request or add one.
> Page rating: `GET https://upstash.com/docs/feedback?path=/docs/workflow/features/dlq/resume&helpful=true` (or `false`) records whether this page helped. An optional `comment` (URL-encoded, at most 500 characters) says what was missing or wrong. It is anonymous and needs no key. Comments hold no code, secrets or personal data.

# Resume

The **Resume** action allows you to continue a failed workflow run from the exact point of failure, preserving all successfully completed steps and their results.

This approach is ideal when:

- The workflow has long-running or resource-intensive steps that have already succeeded.
- You want to preserve progress and avoid re-executing successful operations.
- The failure was a temporary issue that can now be resolved.

<Frame caption="You can retry the failure function of a workflow run if it has failed">
  <img src="/img/workflow/resume.png" alt="Resume a workflow run from the DLQ" />
</Frame>

You can perform this action programmatically as well:

<CodeGroup>
    ```typescript TypeScript
    import { Client } from "@upstash/workflow";

    const client = new Client({ token: "<WORKFLOW_TOKEN>" });

    await client.dlq.resume({
      dlqId: "dlq-12345",
      retries: 3,
    });
    ```
</CodeGroup>

<Note>
    You can modify workflow code as long as changes occur **after** the failed steps.
    Changes to steps prior to the failure are not allowed and may break the workflow.

    For more details, check out the [Handle workflow route code changes](/workflow/howto/changes) page.
</Note>
