---
title: "Send a test payload to a signal's webhook"
method: POST
path: "/api/v1/signals/{signal_id}/test-webhook"
tags: ["Signals"]
---

# Send a test payload to a signal's webhook

`POST /api/v1/signals/{signal_id}/test-webhook`

## Request

- Base URL: `https://api.rodz.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.rodz.io/api/v1/signals/{signal_id}/test-webhook`
- Auth: HTTP bearer

Deliver a sample lead to the signal's configured `webhookUrl` so you can verify your endpoint before real leads arrive. **Input:** `signalId` in the path; optional body `{"url": "..."}` to test another endpoint than the saved `webhookUrl` (for example before saving it). The URL must be HTTP(S) and reachable from the internet. **Output:** `success`, the `statusCode` your endpoint returned, the exact `payloadSent` (it carries `is_test: true` so you can discard it), and the first bytes of your `responseBody`. `signed` tells whether the request carried the `X-Webhook-Signature` / `X-Webhook-Timestamp` headers: when no API key is linked to the signal the test is sent unsigned, like real deliveries, and `warning` says so. On a transport failure `success` is false and `error` explains why.

## Path parameters

- `signal_id` string, required

## Request body

- object, nullable: Optional body for the webhook test. Without it the test goes to the URL saved on the signal. With `url`, it goes to that URL instead — so an endpoint can be checked before it is saved.
  - `url` string, nullable: Endpoint to test instead of the signal's saved webhook URL

## Response `200`

Successful Response

- object: Result of sending a test payload to a signal's configured webhook. Exposed in the public OpenAPI document 2026-08-07: `info.description` had advertised this endpoint and `/replay-webhook` under "Testing & Management" while the whole signal_routes router was registered with include_in_schema=False, so neither appeared in `paths` and no client could be generated for them — reported by a customer generating a Java client. Both accept a customer API key (verify_api_key_or_session), so they were callable but undocumentable.
  - `success` boolean, required: True when your endpoint answered with a 2xx/3xx
  - `statusCode` integer, nullable: HTTP status your endpoint returned
  - `payloadSent` object, nullable: The exact test payload delivered, carrying `is_test: true`
  - `responseBody` string, nullable: First bytes of your endpoint's response
  - `error` string, nullable: Why the send failed; absent on success
  - `signed` boolean: True when the request carried the X-Webhook-Signature and X-Webhook-Timestamp headers. False when no API key is linked to the signal: the test (like real deliveries) is then sent unsigned.
  - `warning` string, nullable: Something to fix even though the send worked, e.g. an unsigned delivery

## Other responses

- `422`: Validation Error
- `429`: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` response header.

---

[API](https://skmtc.dev/rodz/apis/rodz-api.md) · [All operations](https://skmtc.dev/rodz/apis/rodz-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rodz/apis/rodz-api/revisions/3003505ff896?raw)
