Send a test event
Sends a webhook.test event to this endpoint only, once, even if it’s disabled, and answers with the delivery and how the try went. The event’s data.object is the endpoint, never its secret. Tests and redeliveries share a budget of 100 an hour per workspace.
Needs an API key with the generations:write scope.
curl --request POST \
--url https://api.tryleap.ai/v1/webhook_endpoints/{id}/test \
--header 'x-api-key: <api-key>'const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tryleap.ai/v1/webhook_endpoints/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tryleap.ai/v1/webhook_endpoints/{id}/test"
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text){
"id": "whd_2Pk7Wd4Qx9Lm1Tn6Vb3Rc8Hy",
"object": "webhook_delivery",
"event": "evt_9Wc3Yb1Dq7Hm2Vx4Lr8Kp6Tn",
"endpoint": "we_5Tq8Lm2Xv9Kr4Wn7Bc1Yd3Hp",
"url": "https://example.com/webhooks/leap",
"status": "succeeded",
"attempts": [
{
"attempted_at": "2026-10-04T18:24:12.106Z",
"succeeded": true,
"status_code": 204,
"error": null,
"duration_ms": 184
}
],
"next_attempt_at": null,
"created_at": "2026-10-04T18:24:12.040Z",
"completed_at": "2026-10-04T18:24:12.290Z"
}{
"error": {
"type": "invalid_request_error",
"code": "conflicting_credentials",
"message": "Send one API key.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "authentication_error",
"code": "authentication_required",
"message": "Authentication is required.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "permission_error",
"code": "permission_denied",
"message": "Permission denied.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "That webhook endpoint does not exist.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too Many Requests",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}Authorizations
Your workspace API key, leap_.... Create one at https://app.tryleap.ai/go/api, and keep it on your server.
Path Parameters
The endpoint's ID, we_....
Response
The delivery, with the try's result.
One event on its way to one URL, with every try so far.
The delivery's ID, whd_....
"webhook_delivery"The event it carries, evt_....
The endpoint, or null for the webhook URL a request named.
Where it goes.
pending while tries remain, succeeded once your server answered 2xx, failed after the last try.
pending, succeeded, failed Every try so far, oldest first.
Show child attributes
Show child attributes
When Leap tries again; null once it succeeded or gave up.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$When it was queued.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$When it succeeded or Leap gave up; null while tries remain.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$curl --request POST \
--url https://api.tryleap.ai/v1/webhook_endpoints/{id}/test \
--header 'x-api-key: <api-key>'const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tryleap.ai/v1/webhook_endpoints/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tryleap.ai/v1/webhook_endpoints/{id}/test"
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text){
"id": "whd_2Pk7Wd4Qx9Lm1Tn6Vb3Rc8Hy",
"object": "webhook_delivery",
"event": "evt_9Wc3Yb1Dq7Hm2Vx4Lr8Kp6Tn",
"endpoint": "we_5Tq8Lm2Xv9Kr4Wn7Bc1Yd3Hp",
"url": "https://example.com/webhooks/leap",
"status": "succeeded",
"attempts": [
{
"attempted_at": "2026-10-04T18:24:12.106Z",
"succeeded": true,
"status_code": 204,
"error": null,
"duration_ms": 184
}
],
"next_attempt_at": null,
"created_at": "2026-10-04T18:24:12.040Z",
"completed_at": "2026-10-04T18:24:12.290Z"
}{
"error": {
"type": "invalid_request_error",
"code": "conflicting_credentials",
"message": "Send one API key.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "authentication_error",
"code": "authentication_required",
"message": "Authentication is required.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "permission_error",
"code": "permission_denied",
"message": "Permission denied.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "That webhook endpoint does not exist.",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too Many Requests",
"param": null,
"doc_url": null,
"request_id": "req_8kQ2vX9mR4tL6nB1cW3yZ5aD"
}
}