Endpoints
Webhook Delivery History
Check webhook attempts, failures, and the next delivery time.
GET
/
api
/
v1
/
webhooks
/
{id}
/
deliveries
List webhook delivery history
curl --request GET \
--url https://mallary.ai/api/v1/webhooks/{id}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://mallary.ai/api/v1/webhooks/{id}/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://mallary.ai/api/v1/webhooks/{id}/deliveries', 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://mallary.ai/api/v1/webhooks/{id}/deliveries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://mallary.ai/api/v1/webhooks/{id}/deliveries"
req, _ := http.NewRequest("GET", 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.get("https://mallary.ai/api/v1/webhooks/{id}/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mallary.ai/api/v1/webhooks/{id}/deliveries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"deliveries": [
{
"id": 123,
"event_id": "<string>",
"event": "*",
"status": "pending",
"attempts": 123,
"next_attempt_at": "<string>",
"last_status_code": 123,
"last_error_code": "<string>",
"created_at": "<string>",
"delivered_at": "<string>",
"attempt_history": [
{
"attempt_number": 123,
"started_at": "<string>",
"finished_at": "<string>",
"status_code": 123,
"error_code": "<string>"
}
]
}
],
"next_before": 123
}Use the webhook ID returned when you create or list webhooks. The response includes up to 50 deliveries, newest first. It only returns deliveries owned by the signed-in account, including saved history for a deleted webhook.
Each delivery has a stable
event_id, its event name, status, attempt count, next attempt time, last HTTP status or error code, and attempt_history. Event bodies, endpoint URLs, and signing secrets are not included.
Statuses are pending, delivering, retrying, delivered, failed, and cancelled. failed means the notification ran out of delivery attempts. Check the event name to distinguish that from a failed social post.
Error codes include http_error, network_error, timeout, worker_interrupted, and endpoint_removed. Raw endpoint responses are not saved.
If next_before is set, pass it as ?before=<next_before> to read older deliveries. All times use UTC.Authorizations
Use Authorization: Bearer {api_key}
Path Parameters
Required range:
x >= 1Query Parameters
Use next_before from the last page to read older deliveries.
Required range:
x >= 1Last modified on October 19, 2026
Was this page helpful?
List webhook delivery history
curl --request GET \
--url https://mallary.ai/api/v1/webhooks/{id}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://mallary.ai/api/v1/webhooks/{id}/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://mallary.ai/api/v1/webhooks/{id}/deliveries', 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://mallary.ai/api/v1/webhooks/{id}/deliveries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://mallary.ai/api/v1/webhooks/{id}/deliveries"
req, _ := http.NewRequest("GET", 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.get("https://mallary.ai/api/v1/webhooks/{id}/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mallary.ai/api/v1/webhooks/{id}/deliveries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"deliveries": [
{
"id": 123,
"event_id": "<string>",
"event": "*",
"status": "pending",
"attempts": 123,
"next_attempt_at": "<string>",
"last_status_code": 123,
"last_error_code": "<string>",
"created_at": "<string>",
"delivered_at": "<string>",
"attempt_history": [
{
"attempt_number": 123,
"started_at": "<string>",
"finished_at": "<string>",
"status_code": 123,
"error_code": "<string>"
}
]
}
],
"next_before": 123
}
