# POST /v1/webhook-endpoints/:endpointId/test (/docs/api/reference/webhooks/test-endpoint)



<Endpoint method="POST" path="/v1/webhook-endpoints/{endpointId}/test" auth="X-Api-Key" phase="1" />

Fires a synthetic `test.ping` event at the endpoint's URL — the same signed delivery path real events take, so you can end-to-end verify your signature handling before subscribing to any real event types. This call bypasses the endpoint's `events` subscription filter (the endpoint doesn't need `test.ping` in its events list).

<Parameters
  title="Body (optional)"
  rows="[
  { name: 'payload', type: 'object', description: 'Custom payload.data override. If omitted, a default `{ message, endpointId, organizationId }` shape is used.' },
]"
/>

## Example [#example]

```bash
curl -X POST https://api.layers.com/v1/webhook-endpoints/d4c71b62-.../test \
  -H "X-Api-Key: $LAYERS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
```

<Response status="200" description="Accepted — delivery enqueued">
  ```json
  {
    "eventId": "evt_01KPM7QZEC6NJF4XJTCZRR6S3N",
    "deliveryId": "9b8a41e2-0cc6-4c7a-9f89-1a7d19a1c233",
    "scheduledAt": "2026-04-20T18:28:00.000Z"
  }
  ```
</Response>

The dispatcher fires within \~1 minute. Verify receipt at your endpoint; check [GET /webhook-endpoints/:id/deliveries](/docs/api/reference/webhooks/list-deliveries) if it didn't arrive.

## Errors [#errors]

| Status | Code         | When                                   |
| ------ | ------------ | -------------------------------------- |
| 404    | `NOT_FOUND`  | Endpoint not owned by the calling org. |
| 422    | `VALIDATION` | Body present but malformed.            |
