> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.airweave.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.airweave.ai/_mcp/server.

# Delete Subscription

DELETE https://api.airweave.ai/webhooks/subscriptions/{subscription_id}

Permanently delete a webhook subscription.

Once deleted, Airweave will stop sending events to this endpoint immediately.
This action cannot be undone. Any pending message deliveries will be cancelled.

If you want to temporarily stop receiving events, consider disabling the
subscription instead using the PATCH endpoint.

Reference: https://docs.airweave.ai/api-reference/webhooks/delete-subscription-webhooks-subscriptions-subscription-id-delete

## Authentication

- `x-api-key` header (required) — API Key authentication via header

## Servers

- `https://api.airweave.ai` (Production, default)
- `http://localhost:8001` (Local)

## Request

### Path parameters

- `subscription_id` (string, required) — The unique identifier of the subscription to delete (UUID).

## Response

### 200

Deleted subscription

- `id` (string, required) — Unique identifier for this subscription (UUID format)
- `url` (string, required) — The URL where webhook events are delivered
- `created_at` (string, required) — When this subscription was created (ISO 8601 format, UTC)
- `updated_at` (string, required) — When this subscription was last updated (ISO 8601 format, UTC)
- `filter_types` (list of string, optional, nullable) — Event types this subscription is filtered to receive. See EventType enum for all available types.
- `disabled` (boolean, optional, default: false) — Whether this subscription is currently disabled. Disabled subscriptions do not receive event deliveries.
- `description` (string, optional, nullable) — Optional human-readable description of this subscription
- `health_status` (enum, optional) — Health status of this subscription based on recent delivery attempts. Values: 'healthy' (all recent deliveries succeeded), 'degraded' (mix of successes and failures), 'failing' (consecutive failures beyond threshold), 'unknown' (no delivery data yet).
  - Allowed values: `healthy`, `degraded`, `failing`, `unknown`

## Errors

### 404 Not Found Error

Subscription Not Found

- `detail` (string, required) — Error message describing what was not found

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationErrorDetail, required) — List of validation errors

### 429 Too Many Requests Error

Rate Limit Exceeded

- `detail` (string, required) — Error message explaining the rate limit

## Types

### ValidationErrorDetail

Details about a validation error for a specific field.

- `loc` (list of string, required) — Location of the error (e.g., ['body', 'url'])
- `msg` (string, required) — Human-readable error message
- `type` (string, required) — Error type identifier

## Examples

**Response**

```json
{
  "id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
  "url": "https://api.mycompany.com/webhooks/airweave",
  "created_at": "2024-03-01T08:00:00Z",
  "updated_at": "2024-03-15T14:30:00Z",
  "filter_types": [
    "sync.completed",
    "sync.failed"
  ],
  "disabled": false,
  "description": "Production notifications for data team",
  "health_status": "healthy"
}
```

**SDK Code**

```python
import requests

url = "https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000"

headers = {"x-api-key": "<apiKey>"}

response = requests.delete(url, headers=headers)

print(response.json())
```

```typescript
import { AirweaveSDKClient } from "@airweave/sdk";

const client = new AirweaveSDKClient({ apiKey: "YOUR_API_KEY" });
await client.webhooks.deleteSubscription("550e8400-e29b-41d4-a716-446655440000");

```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000"

	req, _ := http.NewRequest("DELETE", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.delete("https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000")
  .header("x-api-key", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('DELETE', 'https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000");
var request = new RestRequest(Method.DELETE);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.airweave.ai/webhooks/subscriptions/550e8400-e29b-41d4-a716-446655440000")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```