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

# Get Message

GET https://api.airweave.ai/webhooks/messages/{message_id}

Retrieve a specific webhook message by its ID.

Returns the full message details including the event type, payload data,
timestamp, and delivery channel information. Use this to inspect the
exact payload that was sent to your webhook endpoints.

Use `include_attempts=true` to also retrieve delivery attempts for this message,
which include HTTP response codes, response bodies, and timestamps for debugging
delivery failures.

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

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

- `message_id` (string, required) — The unique identifier of the message to retrieve (UUID).

### Query parameters

- `include_attempts` (boolean, optional, default: false) — Include delivery attempts for this message. Each attempt includes the HTTP response code, response body, and timestamp.

## Response

### 200

Webhook message details

- `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
- `delivery_attempts` (list of DeliveryAttempt, optional, nullable) — Delivery attempts for this message.

## Errors

### 404 Not Found Error

Message 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

### DeliveryAttempt

A delivery attempt for a webhook message. Each time Airweave attempts to deliver a message to your webhook endpoint, a delivery attempt is recorded. Failed attempts are automatically retried with exponential backoff.

- `id` (string, required) — Unique identifier for this delivery attempt
- `message_id` (string, required) — The event message that was being delivered
- `endpoint_id` (string, required) — The subscription endpoint this was delivered to
- `response_status_code` (integer, required) — HTTP status code returned by your webhook endpoint. 2xx codes indicate success; other codes trigger retries.
- `status` (string, required) — Delivery status: `success` (2xx response), `pending` (awaiting delivery), or `failed` (non-2xx response or timeout)
- `timestamp` (string, required) — When this delivery attempt occurred (ISO 8601 format, UTC)
- `response` (string, optional, nullable) — The response body returned by your webhook endpoint (truncated to 1KB)
- `url` (string, optional, nullable) — The URL that was called

### 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": {
    "collection_name": "Customer Support Tickets",
    "collection_readable_id": "customer-support-tickets-x7k9m",
    "event_type": "sync.completed",
    "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "source_connection_id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
    "source_type": "zendesk",
    "status": "completed",
    "timestamp": "2024-03-15T09:45:32Z"
  },
  "timestamp": "2024-03-15T09:45:32Z",
  "channels": [
    "sync.completed"
  ]
}
```

**SDK Code**

```python
import requests

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

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.getMessage("550e8400-e29b-41d4-a716-446655440000", {
    include_attempts: true
});

```

```go
package main

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

func main() {

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

	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/550e8400-e29b-41d4-a716-446655440000")

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/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('GET', 'https://api.airweave.ai/webhooks/messages/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/messages/550e8400-e29b-41d4-a716-446655440000");
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/550e8400-e29b-41d4-a716-446655440000")! 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()
```