Get a webhook delivery
curl --request GET \
--url https://api.example.com/merchants/{merchantId}/webhook-logs/{id} \
--header 'x-digest-key: <api-key>' \
--header 'x-digest-signature: <x-digest-signature>' \
--header 'x-digest-timestamp: <x-digest-timestamp>'import requests
url = "https://api.example.com/merchants/{merchantId}/webhook-logs/{id}"
headers = {
"x-digest-timestamp": "<x-digest-timestamp>",
"x-digest-key": "<api-key>",
"x-digest-signature": "<x-digest-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-digest-timestamp': '<x-digest-timestamp>',
'x-digest-key': '<api-key>',
'x-digest-signature': '<x-digest-signature>'
}
};
fetch('https://api.example.com/merchants/{merchantId}/webhook-logs/{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.example.com/merchants/{merchantId}/webhook-logs/{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-digest-key: <api-key>",
"x-digest-signature: <x-digest-signature>",
"x-digest-timestamp: <x-digest-timestamp>"
],
]);
$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.example.com/merchants/{merchantId}/webhook-logs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-digest-timestamp", "<x-digest-timestamp>")
req.Header.Add("x-digest-key", "<api-key>")
req.Header.Add("x-digest-signature", "<x-digest-signature>")
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.example.com/merchants/{merchantId}/webhook-logs/{id}")
.header("x-digest-timestamp", "<x-digest-timestamp>")
.header("x-digest-key", "<api-key>")
.header("x-digest-signature", "<x-digest-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/merchants/{merchantId}/webhook-logs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-digest-timestamp"] = '<x-digest-timestamp>'
request["x-digest-key"] = '<api-key>'
request["x-digest-signature"] = '<x-digest-signature>'
response = http.request(request)
puts response.read_body{
"id": "4b6f2ad6-8e6f-4f5e-9d2a-0d6c1f0a9b1e",
"merchant_id": "e714ad11-4f8a-445d-979c-15b66639953b",
"checkout_id": "pt_8CZ3BFuIbw",
"event_type": "transaction_updated",
"url": "https://yourstore.com/webhook",
"status": "success",
"http_status": 200,
"error_message": null,
"attempt_count": 1,
"duration_ms": 184,
"last_attempt_at": "2026-06-10T14:02:11.000Z",
"created_at": "2026-06-10T14:02:10.000Z",
"updated_at": "2026-06-10T14:02:11.000Z",
"request_payload": "{\"data\":{\"id\":\"pt_8CZ3BFuIbw\",\"type\":\"transaction_updated\",\"status\":\"paid\"}}",
"response_body": "OK"
}{
"reason": "Signature verification failed",
"statusCode": 401
}{
"reason": "Not found",
"statusCode": 404
}Webhook Logs
Get Webhook Delivery
Returns a single delivery including the exact request payload that was sent and the response body your endpoint returned.
GET
/
merchants
/
{merchantId}
/
webhook-logs
/
{id}
Get a webhook delivery
curl --request GET \
--url https://api.example.com/merchants/{merchantId}/webhook-logs/{id} \
--header 'x-digest-key: <api-key>' \
--header 'x-digest-signature: <x-digest-signature>' \
--header 'x-digest-timestamp: <x-digest-timestamp>'import requests
url = "https://api.example.com/merchants/{merchantId}/webhook-logs/{id}"
headers = {
"x-digest-timestamp": "<x-digest-timestamp>",
"x-digest-key": "<api-key>",
"x-digest-signature": "<x-digest-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-digest-timestamp': '<x-digest-timestamp>',
'x-digest-key': '<api-key>',
'x-digest-signature': '<x-digest-signature>'
}
};
fetch('https://api.example.com/merchants/{merchantId}/webhook-logs/{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.example.com/merchants/{merchantId}/webhook-logs/{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-digest-key: <api-key>",
"x-digest-signature: <x-digest-signature>",
"x-digest-timestamp: <x-digest-timestamp>"
],
]);
$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.example.com/merchants/{merchantId}/webhook-logs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-digest-timestamp", "<x-digest-timestamp>")
req.Header.Add("x-digest-key", "<api-key>")
req.Header.Add("x-digest-signature", "<x-digest-signature>")
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.example.com/merchants/{merchantId}/webhook-logs/{id}")
.header("x-digest-timestamp", "<x-digest-timestamp>")
.header("x-digest-key", "<api-key>")
.header("x-digest-signature", "<x-digest-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/merchants/{merchantId}/webhook-logs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-digest-timestamp"] = '<x-digest-timestamp>'
request["x-digest-key"] = '<api-key>'
request["x-digest-signature"] = '<x-digest-signature>'
response = http.request(request)
puts response.read_body{
"id": "4b6f2ad6-8e6f-4f5e-9d2a-0d6c1f0a9b1e",
"merchant_id": "e714ad11-4f8a-445d-979c-15b66639953b",
"checkout_id": "pt_8CZ3BFuIbw",
"event_type": "transaction_updated",
"url": "https://yourstore.com/webhook",
"status": "success",
"http_status": 200,
"error_message": null,
"attempt_count": 1,
"duration_ms": 184,
"last_attempt_at": "2026-06-10T14:02:11.000Z",
"created_at": "2026-06-10T14:02:10.000Z",
"updated_at": "2026-06-10T14:02:11.000Z",
"request_payload": "{\"data\":{\"id\":\"pt_8CZ3BFuIbw\",\"type\":\"transaction_updated\",\"status\":\"paid\"}}",
"response_body": "OK"
}{
"reason": "Signature verification failed",
"statusCode": 401
}{
"reason": "Not found",
"statusCode": 404
}Authorizations
Your public API key
Headers
Current Unix timestamp
Your public api key
Digest Auth Signature
Path Parameters
Your merchant id.
Webhook delivery id.
Response
The delivery detail.
Payment the event belongs to.
Example:
"transaction_updated"
Webhook URL the delivery was sent to.
Available options:
success, failed, skipped Example:
200
Example:
1
Example:
184
The exact JSON payload string that was sent (and signed).
Body returned by your endpoint (truncated).