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

# Deactivating a trigger

> Define the deactivate handler for a trigger block

`defineWorkflowBlockDeactivate` wires a deactivate handler to a trigger block. The handler runs once when the workflow is disabled or replaced by a new version.

Mirror what `activate.ts` set up: typically, tear down the webhook registration with the upstream service.

## Parameters

<ParamField path="block" type="WorkflowBlock" required>
  The block returned by `defineWorkflowBlock` in `block.ts`.
</ParamField>

<ParamField path="deactivate" type="function" required>
  The handler function. Receives a context object with `config` (typed from the block's configSchema) and `metadata`.

  `metadata` mirrors what was passed to `activate`, including the `uniqueActivationId` needed to identify the registration to tear down:

  | Field                | Type     | Description                                                                                                                       |
  | -------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
  | `workflowId`         | `string` | ID of the workflow this block belongs to.                                                                                         |
  | `workflowVersionId`  | `string` | ID of the workflow version being deactivated.                                                                                     |
  | `workflowBlockId`    | `string` | ID of this block instance within the workflow.                                                                                    |
  | `uniqueActivationId` | `string` | The same ID that was passed to `activate`. Use it to look up and tear down the webhook registration you stored during activation. |
  | `workflowTitle`      | `string` | Human-readable title of the workflow.                                                                                             |
  | `workflowUrl`        | `string` | Link to the workflow in the Attio UI.                                                                                             |
</ParamField>

## Example

```ts deactivate.ts theme={"system"}
import {Workflows} from "attio/server"
import block from "./block"

export default Workflows.defineWorkflowBlockDeactivate(block, async ({config, metadata}) => {
  const response = await fetch(`https://api.example.com/webhooks/${metadata.uniqueActivationId}`, {
    method: "DELETE",
  })

  if (!response.ok) {
    // Deregistration failed — report the error
    return {type: "error", errorMessage: `Failed to delete webhook: ${response.statusText}`}
  }

  // Webhook removed successfully
  return {type: "complete"}
})
```

## See also

* [Registering a trigger](./define-workflow-block-activate): trigger activate handler
* [Receiving a trigger event](./define-workflow-block-on-trigger-callback): trigger event handler
* [File structure](./file-structure): complete folder layout for trigger and step blocks
