curl --request GET \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts', 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.services.payward.com/v1/webhooks/{webhook_id}/attempts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.services.payward.com/v1/webhooks/{webhook_id}/attempts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.services.payward.com/v1/webhooks/{webhook_id}/attempts")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "atmpt_2Z1Tb9zs6F8XUjWk7p7uA9KNdL5",
"webhook_id": "ep_2YuTbBzs6F8XUjWk7p7uA9KNdL5",
"message_id": "msg_2YvQ8oP1n5qkqf3mC2vQ7rTxY",
"url": "https://partner.example.com/hooks/quote",
"status": "success",
"response_status_code": 200,
"response_duration_ms": 142,
"trigger_type": "scheduled",
"timestamp": "2026-05-25T11:30:05Z"
}
]
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "page_size",
"message": "must be between 1 and 25"
}
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "webhooks_error",
"status": 404,
"instance": "req_01H00000000000000000000000",
"code": "webhook_not_found"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}List webhook attempts
Lists delivery attempts made to this webhook, most recent first.
A delivery attempt is one HTTP POST to the webhook’s destination URL. Because deliveries are retried on failure, a single emitted event can produce several attempts against the same webhook: the first is scheduled, and each subsequent retry is another scheduled attempt until the event is delivered or the retry schedule is exhausted; a partner-initiated resend produces a manual attempt. Every attempt is listed, so a successful delivery and the failed tries that preceded it all appear as separate entries sharing the same message_id.
curl --request GET \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts', 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.services.payward.com/v1/webhooks/{webhook_id}/attempts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.services.payward.com/v1/webhooks/{webhook_id}/attempts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.services.payward.com/v1/webhooks/{webhook_id}/attempts")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/attempts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "atmpt_2Z1Tb9zs6F8XUjWk7p7uA9KNdL5",
"webhook_id": "ep_2YuTbBzs6F8XUjWk7p7uA9KNdL5",
"message_id": "msg_2YvQ8oP1n5qkqf3mC2vQ7rTxY",
"url": "https://partner.example.com/hooks/quote",
"status": "success",
"response_status_code": 200,
"response_duration_ms": 142,
"trigger_type": "scheduled",
"timestamp": "2026-05-25T11:30:05Z"
}
]
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "page_size",
"message": "must be between 1 and 25"
}
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "webhooks_error",
"status": 404,
"instance": "req_01H00000000000000000000000",
"code": "webhook_not_found"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
Identifier returned by CreateWebhook.
1 - 64Query Parameters
Maximum number of results to return. Ignored when page_token is present.
1 <= x <= 25Opaque token returned as next_page_token in the previous response. Omit to request the first page.
1 - 256Response
Successful response
Delivery attempts for the requested page, most recent first. Always present; serialized as an empty array when the webhook has no recorded attempts.
Show child attributes
Show child attributes
Opaque token for retrieving the next page. Absent when there are no more results.
1 - 256