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