---
title: Webhooks
url: https://anyrow.ai/docs/api/webhooks
canonical_url: https://anyrow.ai/docs/api/webhooks
---

# Webhooks

Endpoints Anyrow posts batch events to, signed with your secret.

- [List webhooks](https://anyrow.ai/docs/api/webhooks/list.md): `GET /v1/organizations/{organization_id}/webhooks`
- [Create webhook](https://anyrow.ai/docs/api/webhooks/create.md): `POST /v1/organizations/{organization_id}/webhooks`
- [Get webhook](https://anyrow.ai/docs/api/webhooks/get.md): `GET /v1/organizations/{organization_id}/webhooks/{id}`
- [Update webhook](https://anyrow.ai/docs/api/webhooks/update.md): `PATCH /v1/organizations/{organization_id}/webhooks/{id}`
- [Delete webhook](https://anyrow.ai/docs/api/webhooks/delete.md): `DELETE /v1/organizations/{organization_id}/webhooks/{id}`
- [List webhook deliveries](https://anyrow.ai/docs/api/webhooks/deliveries.md): `GET /v1/organizations/{organization_id}/webhooks/{id}/deliveries`
- [Rotate webhook secret](https://anyrow.ai/docs/api/webhooks/rotate-secret.md): `POST /v1/organizations/{organization_id}/webhooks/{id}/rotate-secret`
- [Send test webhook](https://anyrow.ai/docs/api/webhooks/test.md): `POST /v1/organizations/{organization_id}/webhooks/{id}/test`

## The Webhook object

- `created_at` (integer, required): At least 0.
- `updated_at` (integer, required): At least 0.
- `id` (string, required): 1 to 48 characters.
- `name` (string, required, nullable): Up to 64 characters.
- `organization_id` (string, required): 1 to 48 characters.
- `url` (string, required): Up to 2048 characters.
- `secret_rotated_at` (integer, required, nullable): At least 0.
- `active` (boolean, required)
- `failure_count` (integer, required): At least 0.
- `last_triggered_at` (integer, required, nullable): At least 0.
- `events` (array of strings, required): At least 1 items.

```json
{
  "created_at": 1711468800000,
  "updated_at": 1711468800000,
  "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
  "name": "string",
  "organization_id": "string",
  "url": "https://example.com",
  "secret_rotated_at": 1711468800000,
  "active": true,
  "failure_count": 42,
  "last_triggered_at": 1711468800000,
  "events": [
    "batch.complete"
  ]
}
```

## List webhooks

`GET /v1/organizations/{organization_id}/webhooks`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)

### Query parameters

- `cursor` (string, optional): Opaque cursor for forward pagination. Pass the nextCursor from the previous response with the same order. Takes precedence over page when both are sent.
- `page` (integer, optional): 1-based page number for offset pagination. Ignored when cursor is present. At least 1.
- `order` (string, optional): Sort keys, comma-separated, each `field[.asc|.desc][.nullsfirst|.nullslast]`; at most 3. Sortable: created_at, active. Default: created_at.desc. Nulls sort last ascending and first descending unless stated. Matches `^(?:created_at|active)(?:\.(?:asc|desc))?(?:\.(?:nullsfirst|nullslast))?(?:,(?:created_at|active)(?:\.(?:asc|desc))?(?:\.(?:nullsfirst|nullslast))?){0,2}$`.
- `filter` (string, optional): Filter expression `field.op.value`; `,` joins conditions with AND; group with `or(...)` and `and(...)`. Fields: active (boolean: eq, ne, neq, is); created_at (number: eq, ne, neq, gt, gte, lt, lte, in, nin, is); id (string: eq, ne, neq, like, ilike, in, nin, is); name (string: eq, ne, neq, like, ilike, in, nin, is). `like` is case-sensitive and `ilike` ignores ASCII case; `*` is the wildcard. `in`/`nin` take `(a,b)`; `is` takes `null` or `notnull`. At most 20 conditions, 3 nested groups, 100 in/nin values.
- `q` (string, optional): Free-text search over: name, url. Whitespace-separated terms must all match. Up to 200 characters.
- `limit` (integer, optional): Maximum number of items per page. Defaults to 20, capped by the endpoint's maxLimit. Defaults to `20`. Between 1 and 100.

### Returns

200 `application/json`.

- `count` (integer, required): At least 0.
- `hasMore` (boolean, required)
- `limit` (integer, required): At least 1.
- `nextCursor` (string, required, nullable)
- `page` (integer, required, nullable): At least 1.
- `webhooks` (array of objects, required)
  - `created_at` (integer, required): At least 0.
  - `updated_at` (integer, required): At least 0.
  - `id` (string, required): 1 to 48 characters.
  - `name` (string, required, nullable): Up to 64 characters.
  - `organization_id` (string, required): 1 to 48 characters.
  - `url` (string, required): Up to 2048 characters.
  - `secret_rotated_at` (integer, required, nullable): At least 0.
  - `active` (boolean, required)
  - `failure_count` (integer, required): At least 0.
  - `last_triggered_at` (integer, required, nullable): At least 0.
  - `events` (array of strings, required): At least 1 items.

### Errors

- 404: `not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.list({
  params: {
    organization_id: "{organization_id}"
  },
})
```

```bash title="cURL"
curl 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks", {
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.get(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "count": 0,
  "hasMore": true,
  "limit": 1,
  "nextCursor": "string",
  "page": 1,
  "webhooks": [
    {
      "created_at": 1711468800000,
      "updated_at": 1711468800000,
      "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
      "name": "string",
      "organization_id": "string",
      "url": "https://example.com",
      "secret_rotated_at": 1711468800000,
      "active": true,
      "failure_count": 42,
      "last_triggered_at": 1711468800000,
      "events": [
        "batch.complete"
      ]
    }
  ]
}
```

## Create webhook

`POST /v1/organizations/{organization_id}/webhooks`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)

### Request body

Content type: `application/json` (required).

- `events` (array of strings, required): At least 1 items.
- `name` (string, optional): Up to 64 characters.
- `url` (string, required): Up to 2048 characters. Matches `^https:\/\/.*`.

### Returns

201 `application/json`: created.

- `created_at` (integer, required): At least 0.
- `updated_at` (integer, required): At least 0.
- `id` (string, required): 1 to 48 characters.
- `name` (string, required, nullable): Up to 64 characters.
- `organization_id` (string, required): 1 to 48 characters.
- `url` (string, required): Up to 2048 characters.
- `secret_rotated_at` (integer, required, nullable): At least 0.
- `active` (boolean, required)
- `failure_count` (integer, required): At least 0.
- `last_triggered_at` (integer, required, nullable): At least 0.
- `events` (array of strings, required): At least 1 items.
- `secret` (string, required)

### Errors

- 404: `not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.create({
  params: {
    organization_id: "{organization_id}"
  },
  json: {
    events: [
      "batch.complete"
    ],
    name: "string",
    url: "https://example.com"
  },
})
```

```bash title="cURL"
curl -X POST 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks' \
  -H 'Authorization: ApiKey {your_api_key}' \
  -H 'Content-Type: application/json' \
  -d '{
  "events": [
    "batch.complete"
  ],
  "name": "string",
  "url": "https://example.com"
}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks", {
  method: "POST",
  headers: {
    Authorization: "ApiKey {your_api_key}",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "events": [
      "batch.complete"
    ],
    "name": "string",
    "url": "https://example.com"
  }),
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.post(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
    json={
        "events": [
            "batch.complete",
        ],
        "name": "string",
        "url": "https://example.com",
    },
)
print(response.json())
```

### Response

```json title="201"
{
  "created_at": 1711468800000,
  "updated_at": 1711468800000,
  "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
  "name": "string",
  "organization_id": "string",
  "url": "https://example.com",
  "secret_rotated_at": 1711468800000,
  "active": true,
  "failure_count": 42,
  "last_triggered_at": 1711468800000,
  "events": [
    "batch.complete"
  ],
  "secret": "string"
}
```

## Get webhook

`GET /v1/organizations/{organization_id}/webhooks/{id}`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Returns

200 `application/json`.

- `created_at` (integer, required): At least 0.
- `updated_at` (integer, required): At least 0.
- `id` (string, required): 1 to 48 characters.
- `name` (string, required, nullable): Up to 64 characters.
- `organization_id` (string, required): 1 to 48 characters.
- `url` (string, required): Up to 2048 characters.
- `secret_rotated_at` (integer, required, nullable): At least 0.
- `active` (boolean, required)
- `failure_count` (integer, required): At least 0.
- `last_triggered_at` (integer, required, nullable): At least 0.
- `events` (array of strings, required): At least 1 items.

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.get({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
})
```

```bash title="cURL"
curl 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}", {
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.get(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "created_at": 1711468800000,
  "updated_at": 1711468800000,
  "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
  "name": "string",
  "organization_id": "string",
  "url": "https://example.com",
  "secret_rotated_at": 1711468800000,
  "active": true,
  "failure_count": 42,
  "last_triggered_at": 1711468800000,
  "events": [
    "batch.complete"
  ]
}
```

## Update webhook

`PATCH /v1/organizations/{organization_id}/webhooks/{id}`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Request body

Content type: `application/json` (required).

- `active` (boolean, optional)
- `events` (array of strings, optional): At least 1 items.
- `name` (string, optional): Up to 64 characters.
- `url` (string, optional): Up to 2048 characters. Matches `^https:\/\/.*`.

### Returns

200 `application/json`.

- `created_at` (integer, required): At least 0.
- `updated_at` (integer, required): At least 0.
- `id` (string, required): 1 to 48 characters.
- `name` (string, required, nullable): Up to 64 characters.
- `organization_id` (string, required): 1 to 48 characters.
- `url` (string, required): Up to 2048 characters.
- `secret_rotated_at` (integer, required, nullable): At least 0.
- `active` (boolean, required)
- `failure_count` (integer, required): At least 0.
- `last_triggered_at` (integer, required, nullable): At least 0.
- `events` (array of strings, required): At least 1 items.

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.update({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
  json: {
    active: true,
    events: [
      "batch.complete"
    ],
    name: "string",
    url: "https://example.com"
  },
})
```

```bash title="cURL"
curl -X PATCH 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}' \
  -H 'Authorization: ApiKey {your_api_key}' \
  -H 'Content-Type: application/json' \
  -d '{
  "active": true,
  "events": [
    "batch.complete"
  ],
  "name": "string",
  "url": "https://example.com"
}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}", {
  method: "PATCH",
  headers: {
    Authorization: "ApiKey {your_api_key}",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "active": true,
    "events": [
      "batch.complete"
    ],
    "name": "string",
    "url": "https://example.com"
  }),
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.patch(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
    json={
        "active": True,
        "events": [
            "batch.complete",
        ],
        "name": "string",
        "url": "https://example.com",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "created_at": 1711468800000,
  "updated_at": 1711468800000,
  "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
  "name": "string",
  "organization_id": "string",
  "url": "https://example.com",
  "secret_rotated_at": 1711468800000,
  "active": true,
  "failure_count": 42,
  "last_triggered_at": 1711468800000,
  "events": [
    "batch.complete"
  ]
}
```

## Delete webhook

`DELETE /v1/organizations/{organization_id}/webhooks/{id}`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Returns

200 `application/json`.

- `id` (string, required)

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.delete({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
})
```

```bash title="cURL"
curl -X DELETE 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}", {
  method: "DELETE",
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.delete(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "id": "string"
}
```

## List webhook deliveries

`GET /v1/organizations/{organization_id}/webhooks/{id}/deliveries`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Query parameters

- `cursor` (string, optional): Opaque cursor for forward pagination. Pass the nextCursor from the previous response with the same order. Takes precedence over page when both are sent.
- `page` (integer, optional): 1-based page number for offset pagination. Ignored when cursor is present. At least 1.
- `order` (string, optional): Sort keys, comma-separated, each `field[.asc|.desc][.nullsfirst|.nullslast]`; at most 3. Sortable: created_at, status. Default: created_at.desc. Nulls sort last ascending and first descending unless stated. Matches `^(?:created_at|status)(?:\.(?:asc|desc))?(?:\.(?:nullsfirst|nullslast))?(?:,(?:created_at|status)(?:\.(?:asc|desc))?(?:\.(?:nullsfirst|nullslast))?){0,2}$`.
- `limit` (integer, optional): Maximum number of items per page. Defaults to 20, capped by the endpoint's maxLimit. Defaults to `20`. Between 1 and 100.
- `event` (string, optional): One of `batch.complete`, `batch.failed`, `batch.partial`, `ping`.
- `status` (string, optional): One of `pending`, `success`, `failed`.

### Returns

200 `application/json`.

- `count` (integer, required): At least 0.
- `hasMore` (boolean, required)
- `limit` (integer, required): At least 1.
- `nextCursor` (string, required, nullable)
- `page` (integer, required, nullable): At least 1.
- `deliveries` (array of objects, required)
  - `created_at` (integer, required): At least 0.
  - `id` (string, required): 1 to 48 characters.
  - `webhook_id` (string, required): 1 to 48 characters.
  - `event` (string, required): One of `batch.complete`, `batch.failed`, `batch.partial`, `ping`.
  - `payload_json` (string, required): Up to 65536 characters.
  - `status` (string, required): One of `pending`, `success`, `failed`.
  - `http_status` (integer, required, nullable): At least 0.
  - `response_body` (string, required, nullable): Up to 4096 characters.
  - `attempt` (integer, required): At least 1.
  - `next_retry_at` (integer, required, nullable): At least 0.
  - `delivered_at` (integer, required, nullable): At least 0.

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.deliveries({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
})
```

```bash title="cURL"
curl 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/deliveries' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/deliveries", {
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.get(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/deliveries",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "count": 0,
  "hasMore": true,
  "limit": 1,
  "nextCursor": "string",
  "page": 1,
  "deliveries": [
    {
      "created_at": 1711468800000,
      "id": "whdlv_01h5a3g8k9m2n4p6q8r0t2v4x6",
      "webhook_id": "string",
      "event": "batch.complete",
      "payload_json": "string",
      "status": "pending",
      "http_status": 42,
      "response_body": "string",
      "attempt": 42,
      "next_retry_at": 1711468800000,
      "delivered_at": 1711468800000
    }
  ]
}
```

## Rotate webhook secret

`POST /v1/organizations/{organization_id}/webhooks/{id}/rotate-secret`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Returns

200 `application/json`.

- `created_at` (integer, required): At least 0.
- `updated_at` (integer, required): At least 0.
- `id` (string, required): 1 to 48 characters.
- `name` (string, required, nullable): Up to 64 characters.
- `organization_id` (string, required): 1 to 48 characters.
- `url` (string, required): Up to 2048 characters.
- `secret_rotated_at` (integer, required, nullable): At least 0.
- `active` (boolean, required)
- `failure_count` (integer, required): At least 0.
- `last_triggered_at` (integer, required, nullable): At least 0.
- `events` (array of strings, required): At least 1 items.
- `secret` (string, required)

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.rotateSecret({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
})
```

```bash title="cURL"
curl -X POST 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/rotate-secret' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/rotate-secret", {
  method: "POST",
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.post(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/rotate-secret",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "created_at": 1711468800000,
  "updated_at": 1711468800000,
  "id": "whook_01h5a3g8k9m2n4p6q8r0t2v4x6",
  "name": "string",
  "organization_id": "string",
  "url": "https://example.com",
  "secret_rotated_at": 1711468800000,
  "active": true,
  "failure_count": 42,
  "last_triggered_at": 1711468800000,
  "events": [
    "batch.complete"
  ],
  "secret": "string"
}
```

## Send test webhook

`POST /v1/organizations/{organization_id}/webhooks/{id}/test`

Authentication: `Authorization: ApiKey {your_api_key}`.

### Path parameters

- `organization_id` (string, required)
- `id` (string, required)

### Returns

200 `application/json`.

- `http_status` (number, required, nullable)
- `response_body` (string, required, nullable): Up to 1024 characters.
- `status` (string, required): One of `error`, `success`, `timeout`.

### Errors

- 404: `not_found`, `webhook_not_found`

Errors every endpoint can return: [Errors](https://anyrow.ai/docs/api/errors.md).

### Request

```ts title="Node.js"
import { AnyrowSDK } from "@anyrow/sdk"

const anyrow = new AnyrowSDK({
  baseURL: "https://api.anyrow.ai",
  headers: { Authorization: `ApiKey ${process.env.ANYROW_API_KEY}` },
})

const { data, error } = await anyrow.webhook.test({
  params: {
    organization_id: "{organization_id}",
    id: "{id}"
  },
})
```

```bash title="cURL"
curl -X POST 'https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/test' \
  -H 'Authorization: ApiKey {your_api_key}'
```

```js title="JavaScript"
const response = await fetch("https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/test", {
  method: "POST",
  headers: {
    Authorization: "ApiKey {your_api_key}",
  },
})
const data = await response.json()
```

```python title="Python"
import requests

response = requests.post(
    "https://api.anyrow.ai/v1/organizations/{organization_id}/webhooks/{id}/test",
    headers={
        "Authorization": "ApiKey {your_api_key}",
    },
)
print(response.json())
```

### Response

```json title="200"
{
  "http_status": 0,
  "response_body": "string",
  "status": "error"
}
```
