---
title: "Send a test event to the webhook."
method: POST
path: "/api/webhook/test"
tags: ["Webhook"]
---

# Send a test event to the webhook.

`POST /api/webhook/test`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/api/webhook/test`
- Auth: HTTP bearer

Sends one signed WEBHOOK_TEST event to the webhook now, signed and checked against the destination allowlist as a real delivery is, and returns what happened: whether the receiver answered 2xx, its status code, and any error. The event is not queued or retried and does not appear in GET /api/webhook/deliveries. Its body has "test": true so a receiver can ignore it. Waits for the receiver up to WEBHOOK_CONNECT_TIMEOUT_SECONDS and WEBHOOK_RESPONSE_TIMEOUT_SECONDS. Admins may test another user's webhook via the owner parameter. Recorded as a webhook_tested audit event with the outcome; the URL and secret are not recorded. Requires the `webhooks:write` scope.

## Query parameters

- `owner` string

## Headers

- `Authorization` string, required

## Response `200`

The test was attempted. delivered says whether the receiver accepted it.

- WebhookTestResponse
  - `delivered` boolean: Whether the receiver answered with a 2xx status.
  - `deliveryId` string: The test event's X-Philter-Delivery-Id, to find it in the receiver's logs.
  - `durationMillis` integer: How long the attempt took, in milliseconds.
  - `error` string: Why the test was not delivered, or null when it was.
  - `statusCode` integer: The status the receiver answered with, or null when there was no answer, such as when the connection failed, timed out, or the destination is not permitted.

## Other responses

- `400`: Bad Request
- `401`: The Authorization header is absent or the API key is not recognized.
- `403`: The key does not hold webhooks:write.
- `404`: The owner does not exist, or the caller may not reach it.
- `406`: No representation matches Accept.
- `409`: No webhook is set, so there is nothing to test.
- `413`: Content Too Large
- `415`: Unsupported Media Type
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-10-10** `c4f85daa9208`: 16 info
  - added the optional property `field` to the response with the `400` status
  - added the optional property `field` to the response with the `401` status
  - added the optional property `field` to the response with the `403` status
  - added the optional property `field` to the response with the `409` status
  - …12 more
- **2026-10-10** `b0989dc2f6bf`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/philterd/apis/philter-api/changes/api/webhook/test/post.md)

---

[API](https://skmtc.dev/philterd/apis/philter-api.md) - [All operations](https://skmtc.dev/philterd/apis/philter-api/llms.txt) - [OpenAPI document](https://skmtc.dev/philterd/apis/philter-api/revisions/aa3d7ad1aab4?raw)
