> For a complete page index of the Captain API documentation, fetch https://docs.captain.dev/llms.txt?excludeSpec=true

# Get Endpoint

GET https://api.filesearch.dev/v2/webhooks/endpoints/{endpoint_id}

Get one webhook endpoint: its URL, filters, whether it is disabled and why, and the most recent delivery. The secret is never included.

`disabled_reason` is `delivery_failures` when Captain disabled the endpoint after sustained failed deliveries. Re-enable it with `PATCH` and `{"disabled": false}`, then recover the events it missed.

Reference: https://docs.runcaptain.com/reference/webhooks/endpoints/get

## Request

### Path parameters

- `endpoint_id` (string, required) — The endpoint's id (`whe_...`).

## Response

### 200

Successful Response

- `endpoint_id` (string, required) — The endpoint's id (`whe_...`).
- `url` (string, required) — HTTPS URL that receives events.
- `description` (string, required) — Free-text label. Empty string when not set.
- `event_types` (list of string, required) — Events this endpoint receives. Empty means all five.
- `collection_ids` (list of string, required) — Collection filter. Empty means every collection.
- `sync_ids` (list of string, required) — Sync filter. Empty means no sync filter.
- `sources` (list of string, required) — Source filter (`api`, `sync`). Empty means both.
- `channels` (list of string, required) — Filters set in Captain Studio's Webhooks page that cannot be expressed as `collection_ids`, `sync_ids` and `sources`. Empty for endpoints whose filters were set through the API. Setting `collection_ids`, `sync_ids` or `sources` with `PATCH` replaces them.
- `include_collection_name` (boolean, required) — Whether payloads sent to this endpoint may carry `collection_name`.
- `disabled` (boolean, required) — `true` when no events are being sent to this endpoint.
- `disabled_reason` (string, required, nullable) — `delivery_failures` when Captain disabled the endpoint after sustained failed deliveries. `null` when it is enabled or was paused through the API.
- `last_delivery` (WebhookLastDelivery, required, nullable) — The most recent delivery, or `null` before the first one.
- `created_at` (string, required)
- `updated_at` (string, required)

## Errors

### 401 Unauthorized Error

Missing or invalid API key.

- `error` (string, required) — Error kind. `HTTP_ERROR` for errors raised by the route.
- `message` (string, required) — What went wrong.
- `path` (string, required) — The request path.
- `status_code` (integer, optional) — The HTTP status code.

### 404 Not Found Error

`Webhook endpoint not found.` The id does not exist, or belongs to another organization.

- `error` (string, required) — Error kind. `HTTP_ERROR` for errors raised by the route.
- `message` (string, required) — What went wrong.
- `path` (string, required) — The request path.
- `status_code` (integer, optional) — The HTTP status code.

### 429 Too Many Requests Error

`Too many webhook management requests. Try again shortly.` Retry after the `Retry-After` header.

- `error` (string, required) — Error kind. `HTTP_ERROR` for errors raised by the route.
- `message` (string, required) — What went wrong.
- `path` (string, required) — The request path.
- `status_code` (integer, optional) — The HTTP status code.

## Types

### WebhookLastDelivery

- `at` (string, required) — When the most recent delivery attempt finished.
- `status` (enum, required) — Outcome of that delivery.
  - Allowed values: `succeeded`, `failed`

## Examples

**Response**

```json
{
  "endpoint_id": "whe_3f9a1c7e5b2d4a6c8e0f1a2b",
  "url": "https://example.com/webhooks/captain",
  "description": "Indexing notifications",
  "event_types": [
    "job.completed",
    "job.completed_with_errors",
    "job.failed"
  ],
  "collection_ids": [],
  "sync_ids": [],
  "sources": [],
  "channels": [],
  "include_collection_name": true,
  "disabled": false,
  "disabled_reason": null,
  "last_delivery": {
    "at": "2026-09-23T10:05:13Z",
    "status": "succeeded"
  },
  "created_at": "2026-09-20T16:42:08Z",
  "updated_at": "2026-09-20T16:42:08Z"
}
```

**SDK Code**

```python Python
import requests

BASE_URL = "https://api.filesearch.dev"
API_KEY = "your_api_key"
ENDPOINT_ID = "whe_3f9a1c7e5b2d4a6c8e0f1a2b"

response = requests.get(
    f"{BASE_URL}/v2/webhooks/endpoints/{ENDPOINT_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    timeout=30.0,
)
response.raise_for_status()
data = response.json()
if data["disabled"]:
    print(f"Disabled: {data['disabled_reason'] or 'paused through the API'}")
else:
    print(f"Sending to {data['url']}")

```

```typescript TypeScript
const BASE_URL = "https://api.filesearch.dev";
const API_KEY = "your_api_key";
const ENDPOINT_ID = "whe_3f9a1c7e5b2d4a6c8e0f1a2b";

const response = await fetch(`${BASE_URL}/v2/webhooks/endpoints/${ENDPOINT_ID}`, {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
  },
});
if (!response.ok) throw new Error(`Request failed: ${response.status} ${await response.text()}`);
const data = await response.json();
if (data.disabled) {
  console.log(`Disabled: ${data.disabled_reason ?? "paused through the API"}`);
} else {
  console.log(`Sending to ${data.url}`);
}

```