curl --request GET \
--url https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}"
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}', 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-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}",
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}"
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}")
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{
"id": "1842",
"org_id": "org_123",
"event_id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"endpoint_id": "8b95a9e0-4af3-4c6d-92df-84b64256d27f",
"status": "SUCCEEDED",
"attempt_count": 1,
"max_attempts": 8,
"next_attempt_at": "2026-08-08T08:30:00.100Z",
"locked_at": null,
"locked_by": null,
"last_http_status": 204,
"last_error_code": null,
"last_error_message": null,
"last_duration_ms": 183,
"completed_at": "2026-08-08T08:30:00.283Z",
"created_at": "2026-08-08T08:30:00.000Z",
"updated_at": "2026-08-08T08:30:00.000Z",
"event": {
"id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"org_id": "org_123",
"event_type": "booking.confirmed",
"schema_version": 1,
"aggregate_type": "booking",
"aggregate_id": "ubk_eGQ0dW9uV1Vi",
"aggregate_version": 2,
"payload": {
"id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"type": "booking.confirmed",
"schema_version": 1,
"created_at": "2026-08-08T08:30:00.000Z",
"organization_id": "org_123",
"data": {
"object": {
"object": "booking",
"id": "ubk_eGQ0dW9uV1Vi",
"version": 2,
"status": "CONFIRMED",
"is_terminal": true
},
"previous_status": "PROCESSING"
}
},
"occurred_at": "2026-08-08T08:30:00.000Z",
"fanout_at": "2026-08-08T08:30:00.100Z",
"created_at": "2026-08-08T08:30:00.000Z"
},
"endpoint": {
"id": "8b95a9e0-4af3-4c6d-92df-84b64256d27f",
"name": "Production booking events",
"url": "https://example.com/webhooks/unifystays",
"status": "ACTIVE",
"event_types": [
"booking.confirmed",
"booking.cancelled"
],
"consecutive_failures": 0,
"last_success_at": "2026-08-08T08:30:00.000Z",
"last_failure_at": null,
"disabled_at": null,
"disabled_reason": null,
"created_at": "2026-08-08T08:00:00.000Z",
"updated_at": "2026-08-08T08:30:00.000Z"
},
"attempts": [
{
"id": "9231",
"org_id": "org_123",
"delivery_id": "1842",
"attempt_number": 1,
"started_at": "2026-08-08T08:30:00.100Z",
"ended_at": "2026-08-08T08:30:00.283Z",
"duration_ms": 183,
"response_status": 204,
"response_headers": {
"x-request-id": "receiver_req_123"
},
"response_body": null,
"response_body_truncated": false,
"error_code": null,
"error_message": null,
"next_retry_at": null,
"created_at": "2026-08-08T08:30:00.283Z"
}
]
}Get Webhook Delivery
Inspect a webhook event, endpoint, and every delivery attempt.
curl --request GET \
--url https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}"
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}', 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-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}",
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}"
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://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.unifystays.com/webhooks/deliveries/{delivery_id}")
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{
"id": "1842",
"org_id": "org_123",
"event_id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"endpoint_id": "8b95a9e0-4af3-4c6d-92df-84b64256d27f",
"status": "SUCCEEDED",
"attempt_count": 1,
"max_attempts": 8,
"next_attempt_at": "2026-08-08T08:30:00.100Z",
"locked_at": null,
"locked_by": null,
"last_http_status": 204,
"last_error_code": null,
"last_error_message": null,
"last_duration_ms": 183,
"completed_at": "2026-08-08T08:30:00.283Z",
"created_at": "2026-08-08T08:30:00.000Z",
"updated_at": "2026-08-08T08:30:00.000Z",
"event": {
"id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"org_id": "org_123",
"event_type": "booking.confirmed",
"schema_version": 1,
"aggregate_type": "booking",
"aggregate_id": "ubk_eGQ0dW9uV1Vi",
"aggregate_version": 2,
"payload": {
"id": "evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2",
"type": "booking.confirmed",
"schema_version": 1,
"created_at": "2026-08-08T08:30:00.000Z",
"organization_id": "org_123",
"data": {
"object": {
"object": "booking",
"id": "ubk_eGQ0dW9uV1Vi",
"version": 2,
"status": "CONFIRMED",
"is_terminal": true
},
"previous_status": "PROCESSING"
}
},
"occurred_at": "2026-08-08T08:30:00.000Z",
"fanout_at": "2026-08-08T08:30:00.100Z",
"created_at": "2026-08-08T08:30:00.000Z"
},
"endpoint": {
"id": "8b95a9e0-4af3-4c6d-92df-84b64256d27f",
"name": "Production booking events",
"url": "https://example.com/webhooks/unifystays",
"status": "ACTIVE",
"event_types": [
"booking.confirmed",
"booking.cancelled"
],
"consecutive_failures": 0,
"last_success_at": "2026-08-08T08:30:00.000Z",
"last_failure_at": null,
"disabled_at": null,
"disabled_reason": null,
"created_at": "2026-08-08T08:00:00.000Z",
"updated_at": "2026-08-08T08:30:00.000Z"
},
"attempts": [
{
"id": "9231",
"org_id": "org_123",
"delivery_id": "1842",
"attempt_number": 1,
"started_at": "2026-08-08T08:30:00.100Z",
"ended_at": "2026-08-08T08:30:00.283Z",
"duration_ms": 183,
"response_status": 204,
"response_headers": {
"x-request-id": "receiver_req_123"
},
"response_body": null,
"response_body_truncated": false,
"error_code": null,
"error_message": null,
"next_retry_at": null,
"created_at": "2026-08-08T08:30:00.283Z"
}
]
}event, endpoint metadata,
and chronological attempts.
Each attempt can include its HTTP status, duration, next retry time, a safe set
of response headers, and up to 16 KiB of response body. Response headers and
bodies are removed after 30 days.
Authorizations
Environment-specific API key created in the Unifystays portal
Headers
Path Parameters
Numeric webhook delivery ID.
"1842"
Response
Webhook delivery and attempt history retrieved successfully.
Numeric delivery ID.
"1842"
Owning organization ID.
"org_123"
Source event ID.
"evt_3bc2fa3d35cc4bbf98359b3fb85a4fb2"
Destination endpoint ID.
"8b95a9e0-4af3-4c6d-92df-84b64256d27f"
Current delivery state.
PENDING, DELIVERING, RETRYING, SUCCEEDED, EXHAUSTED, CANCELLED "SUCCEEDED"
Attempts completed so far.
1
Maximum permitted attempts.
8
Time the next attempt is eligible to run.
"2026-08-08T08:30:00.100Z"
Time the worker claimed the delivery.
null
Worker currently processing the delivery.
null
HTTP status from the latest receiver response.
204
Machine-readable code for the latest delivery error.
null
Safe error message from the latest failed attempt.
null
Duration of the latest attempt in milliseconds.
183
Time the delivery reached a terminal state.
"2026-08-08T08:30:00.283Z"
Delivery record creation time.
"2026-08-08T08:30:00.000Z"
Time the delivery record was last updated.
"2026-08-08T08:30:00.000Z"
Immutable source event and exact delivered payload.
Show child attributes
Show child attributes
Current endpoint metadata without signing secrets.
Show child attributes
Show child attributes
Delivery attempts ordered by attempt number.
Show child attributes
Show child attributes