Test Webhook Endpoint
Send a signed webhook_endpoint.test event to this endpoint now, whatever events it receives, and get back
what it answered and how long it took. Its data is the endpoint. The send is in the endpoint’s deliveries and
is not retried automatically. It works on a disabled endpoint too, so you can check your receiver before you
switch it back on.
curl --request POST \
--url https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"attempts": 2,
"created_at": "2026-09-27T02:00:00Z",
"endpoint_id": "whk_01K62QZ8V4X9C3N7M5T2R8W6HB",
"event_id": "evt_01K62QZ8V4X9C3N7M5T2R8W6HC",
"event_type": "augmentation.completed",
"id": "dlv_9f1c2b7e4a5d4e8f9a0b1c2d3e4f5a6b",
"last_response_status": 503,
"next_attempt_at": "2026-09-27T02:06:00Z",
"object": "webhook_delivery",
"status": "pending"
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}Authorizations
A Kite API key (kite_...), from Platform API → Keys in the dashboard.
Headers
The dated contract your code was written against. Without it you get 2026-09-27; every response says which version served it.
2026-09-27 Path Parameters
Response
Successful Response
The test delivery just sent, and how long the endpoint took to answer.
dlv_ + 32 hex characters
pending (queued, or waiting to retry), delivered (the endpoint answered 2xx), or failed (every attempt failed, or it was not sent)
POSTs made so far. At most 6: the first, then retries after 1 min, 5 min, 30 min, 2 h and 8 h
Milliseconds from sending the request to the endpoint's answer (or to the failure)
webhook_delivery "webhook_delivery"The HTTP status the endpoint last answered with; null when no answer arrived
Why the last attempt failed when the status does not say: no answer (timeout, TLS, DNS, connection), a redirect, or not sent at all
When it goes out next, while pending
curl --request POST \
--url https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kiteml.com/v1/webhook_endpoints/{endpoint_id}/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"attempts": 2,
"created_at": "2026-09-27T02:00:00Z",
"endpoint_id": "whk_01K62QZ8V4X9C3N7M5T2R8W6HB",
"event_id": "evt_01K62QZ8V4X9C3N7M5T2R8W6HC",
"event_type": "augmentation.completed",
"id": "dlv_9f1c2b7e4a5d4e8f9a0b1c2d3e4f5a6b",
"last_response_status": 503,
"next_attempt_at": "2026-09-27T02:06:00Z",
"object": "webhook_delivery",
"status": "pending"
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"request_id": "<string>",
"details": {}
}
}