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

# List Messages

GET https://api.airweave.ai/webhooks/messages

Retrieve all webhook messages for your organization.

Webhook messages represent payloads that were sent (or attempted to be sent)
to your subscribed endpoints. Each message contains the event type, payload data,
and delivery status information.

Use the `event_types` query parameter to filter messages by specific event types,
such as `sync.completed` or `sync.failed`.

Reference: https://docs.airweave.ai/api-reference/webhooks/get-messages-webhooks-messages-get

## Authentication

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

## Servers

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

## Request

### Query parameters

- `event_types` (list of string, optional, nullable) — Filter messages by event type(s). Accepts multiple values, e.g., `?event_types=sync.completed&event_types=sync.failed`.

## Response

### 200

List of webhook messages

- `list of WebhookMessage`

## Errors

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

### WebhookMessage

A webhook message that was sent (or attempted) to webhook subscribers. The payload contains the actual event data matching the webhook delivery format.

- `id` (string, required) — Unique identifier for this message (UUID format)
- `event_type` (string, required) — The type of event (e.g., 'sync.completed', 'sync.failed')
- `payload` (map from string to any, required) — The event payload data, matching what is delivered to webhooks. Structure varies by event_type.
- `timestamp` (string, required) — When this message was created (ISO 8601 format, UTC)
- `channels` (list of string, optional, nullable) — Channels this message was sent to (typically matches the event type)
- `tags` (list of string, optional, nullable) — Tags associated with this message for filtering

### 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": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "event_type": "sync.completed",
    "payload": {},
    "timestamp": "2024-03-15T09:45:32Z",
    "channels": [
      "string"
    ],
    "tags": [
      "string"
    ]
  }
]
```

**SDK Code**

```python
import requests

url = "https://api.airweave.ai/webhooks/messages"

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

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

print(response.json())
```

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

const client = new AirweaveSDKClient({ apiKey: "YOUR_API_KEY" });
await client.webhooks.getMessages();

```

```go
package main

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

func main() {

	url := "https://api.airweave.ai/webhooks/messages"

	req, _ := http.NewRequest("GET", 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/messages")

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

request = Net::HTTP::Get.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.get("https://api.airweave.ai/webhooks/messages")
  .header("x-api-key", "<apiKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.airweave.ai/webhooks/messages', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.airweave.ai/webhooks/messages");
var request = new RestRequest(Method.GET);
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/messages")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
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()
```