Skip to content
TriedDocs
Account

Test webhook

Send a signed test event to a webhook URL and report whether it was accepted.

POSThttps://api.tried.com.au/workspace/test-webhook

Sends a signed test event to the URL you pass, or to the workspace webhook URL when you leave it out. Use it to check that your endpoint is reachable and verifies signatures before real call events arrive.

Request#

Field Type Required Description
url string No Absolute URL to send the test to. Defaults to the workspace webhook URL.

The request is a POST with this JSON body:

{ "event": "test", "timestamp": 1760918400000 }

It carries the same signature as real webhooks, in both x-tried-signature and x-retell-signature, in the form v=<timestamp>,d=<hex HMAC-SHA256>. The HMAC is computed over the raw body followed by the timestamp, keyed with the workspace's webhook key (the API key marked is_webhook_key, else the oldest key). See Webhooks.

The test is delivered like any other webhook: each attempt times out after the workspace webhook timeout (10 seconds by default), and a failed attempt is retried up to 3 times with exponential backoff, so a failing endpoint can hold the request open for a while. Every attempt is stored and shows up in List webhook deliveries with event test. Addresses that resolve to private or internal networks are blocked.

Example request#

curl -X POST https://api.tried.com.au/workspace/test-webhook \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.example.com.au/tried"}'
const res = await fetch("https://api.tried.com.au/workspace/test-webhook", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://hooks.example.com.au/tried" }),
});
const { success } = await res.json();
import os, requests

res = requests.post(
    "https://api.tried.com.au/workspace/test-webhook",
    headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
    json={"url": "https://hooks.example.com.au/tried"},
)
success = res.json()["success"]

Response#

200 OK

{ "success": true }
Field Type Description
success boolean true when an attempt got a 2xx response. false when every attempt failed; check List webhook deliveries for the status codes and errors.

The test is recorded in the audit log as webhook.test.

Errors#

Status When
400 No webhook URL configured (no url given and the workspace has none), or url is not a valid URL.
401 Missing or invalid API key.
403 The key's IP allowlist or scopes reject the request. This route needs the admin scope. Dashboard members get The member role is read-only.
429 Rate limit exceeded. See Rate limits.

See Errors for the body format.