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

# deleteWebhooks

> Delete one or more webhooks owned by the calling API key. Hard delete, scoped to your API key.

### Overview

Hard-deletes the listed webhooks **only if they belong to the calling API key**. Webhooks owned by a different API key are silently skipped — only successfully deleted ids appear in `deletedIds`. This prevents one API key from probing or removing rows owned by another.

The deletion runs in a single transaction: any `FailedEvent` rows referencing a deleted webhook are removed first, then the `Stream` rows themselves — you can't end up with a half-deleted webhook plus orphan failed-event rows.

<Tip>An API key is required. The mutation throws `UNAUTHENTICATED` if it is missing or invalid.</Tip>

### Returns

<ResponseField name="deleteWebhooks" type="DeleteWebhooksOutput!">
  See [DeleteWebhooksOutput](/api-reference/graphql/types/DeleteWebhooksOutput).
</ResponseField>

### Arguments

<ResponseField name="input" type="DeleteWebhooksInput!" required>
  Webhook ids to delete. See [DeleteWebhooksInput](/api-reference/graphql/types/DeleteWebhooksInput).
</ResponseField>

### Errors

| Code              | When                        |
| ----------------- | --------------------------- |
| `UNAUTHENTICATED` | API key missing or invalid. |

### Example

```graphql theme={null}
mutation DeleteWebhooks($input: DeleteWebhooksInput!) {
  deleteWebhooks(input: $input) {
    deletedIds
  }
}
```

Variables:

```json theme={null}
{
  "input": {
    "webhookIds": [
      "1f4b2cb9-5e25-4ee7-a9a3-b1f8a78fa6f6",
      "8e8f3c9d-1c5e-49a3-9f1c-2d3e4f5a6b7c"
    ]
  }
}
```

Response — only the ids you actually own are returned:

```json theme={null}
{
  "data": {
    "deleteWebhooks": {
      "deletedIds": ["1f4b2cb9-5e25-4ee7-a9a3-b1f8a78fa6f6"]
    }
  }
}
```
