> ## 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/failureFunction/advanced&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.

# Advanced failureUrl Option

The `failureUrl` is an advanced option that sends failure callback to a different endpoint rather than to the workflow endpoint (failure function).
This approach is useful for handling failures on separate infrastructure.

<Tip>You can use either `failureFunction` or `failureUrl`, but not both. These options are mutually exclusive.</Tip>

For most users, **Failure Function** is the better choice because:
- It runs alongside your workflow and has access to the same context and dependencies
- Failure function requests are automatically retried on failure as well.
- You can manually retry failure function if it fails via DLQ.

If you think this advanced option fits your need, you can configure it by passing `failureUrl` configuration.

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

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

    const { workflowRunId } = await client.trigger({
      url: "https://<YOUR_WORKFLOW_URL>/workflow"
      failureUrl: "https://<YOUR_FAILURE_URL>/workflow-failure"
    })
    ```

    ```python Python
    @serve.post("/api/example", failure_url="https://<YOUR_FAILURE_URL>/workflow-failure")
    async def example(context: AsyncWorkflowContext[str]) -> None:
        # Your workflow logic...
        pass
    ```
</CodeGroup>
