Webhooks
Webhook delivery events
Lists a webhook's recent delivery events (read-only). Each item carries event, status (SUCCESS|FAILED), statusCode, payload, response, durationMs and createdAt (UTC). On a delivered attempt response holds your endpoint's body (truncated to 1000 characters) and statusCode the HTTP status. When the request never completed — DNS, refused connection, timeout, TLS — statusCode is null and response holds the reason chain, innermost cause last, joined by ' <- ' and tagged with the system error code, e.g. 'fetch failed <- getaddrinfo EAI_AGAIN hooks.example.com [EAI_AGAIN]'. Treat response as a diagnostic string: its wording comes from the runtime and is not a stable contract. Use limit (1–50) and event to filter. 404 if the webhook isn't visible to the calling key; honours the same number scope as GET /api/v1/webhooks.
GET
/
v1
/
webhooks
/
{id}
/
logs
Webhook delivery events
curl --request GET \
--url https://pilotstatus.com.br/v1/webhooks/{id}/logs \
--header 'x-api-key: <api-key>'import requests
url = "https://pilotstatus.com.br/v1/webhooks/{id}/logs"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://pilotstatus.com.br/v1/webhooks/{id}/logs', 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://pilotstatus.com.br/v1/webhooks/{id}/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://pilotstatus.com.br/v1/webhooks/{id}/logs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pilotstatus.com.br/v1/webhooks/{id}/logs")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/webhooks/{id}/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"webhookId": "wh_01HZX...",
"logs": [
{
"id": "whl_01HZX...",
"webhookId": "wh_01HZX...",
"event": "message.delivered",
"status": "SUCCESS",
"statusCode": 200,
"payload": "{\"event\":\"message.delivered\",\"data\":{}}",
"response": "ok",
"durationMs": 142,
"createdAt": "2026-06-28T09:59:00.000Z"
},
{
"id": "whl_01HZY...",
"webhookId": "wh_01HZX...",
"event": "message.delivered",
"status": "FAILED",
"statusCode": null,
"payload": "{\"event\":\"message.delivered\",\"data\":{}}",
"response": "fetch failed <- getaddrinfo EAI_AGAIN hooks.example.com [EAI_AGAIN]",
"durationMs": 21,
"createdAt": "2026-06-28T10:02:00.000Z"
}
]
}{
"error": "Validation error"
}{
"error": "Unauthorized"
}{
"error": "Too many requests"
}Authorizations
apiKeyapiKeyId
Your ps_ API key
Headers
Scopes to a single number (required for per-number OAuth grants).
Path Parameters
Webhook id.
Query Parameters
Number of events to return (default 50). (integer (1–50))
Filter by event name (e.g. message.delivered).
Response
Recent events
Was this page helpful?
⌘I
Webhook delivery events
curl --request GET \
--url https://pilotstatus.com.br/v1/webhooks/{id}/logs \
--header 'x-api-key: <api-key>'import requests
url = "https://pilotstatus.com.br/v1/webhooks/{id}/logs"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://pilotstatus.com.br/v1/webhooks/{id}/logs', 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://pilotstatus.com.br/v1/webhooks/{id}/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://pilotstatus.com.br/v1/webhooks/{id}/logs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pilotstatus.com.br/v1/webhooks/{id}/logs")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/webhooks/{id}/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"webhookId": "wh_01HZX...",
"logs": [
{
"id": "whl_01HZX...",
"webhookId": "wh_01HZX...",
"event": "message.delivered",
"status": "SUCCESS",
"statusCode": 200,
"payload": "{\"event\":\"message.delivered\",\"data\":{}}",
"response": "ok",
"durationMs": 142,
"createdAt": "2026-06-28T09:59:00.000Z"
},
{
"id": "whl_01HZY...",
"webhookId": "wh_01HZX...",
"event": "message.delivered",
"status": "FAILED",
"statusCode": null,
"payload": "{\"event\":\"message.delivered\",\"data\":{}}",
"response": "fetch failed <- getaddrinfo EAI_AGAIN hooks.example.com [EAI_AGAIN]",
"durationMs": 21,
"createdAt": "2026-06-28T10:02:00.000Z"
}
]
}{
"error": "Validation error"
}{
"error": "Unauthorized"
}{
"error": "Too many requests"
}