Skip to main content
List webhook deliveries
curl --request GET \
  --url https://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries
import requests

url = "https://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://customer-api.fortary.io/v1/webhooks/{webhookId}/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://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

$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://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries")
.asString();
require 'uri'
require 'net/http'

url = URI("https://customer-api.fortary.io/v1/webhooks/{webhookId}/deliveries")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
Pre-release — contact your Fortary account team for access.
Illustrative reference. These examples show the shape of the API and are provided for early evaluation while it is still being finalized. Field names and response details may change before the API is released. A complete reference, generated directly from the live API, will replace these examples once it is available.
Lists a webhook’s deliveries with per-attempt detail, newest first. Requires the webhook:read scope.

Request

curl https://customer-api.fortary.io/v1/webhooks/whs_9b2f4e1a7c/deliveries \
  -H "Authorization: Bearer fort_..."

Response

{
  "data": [
    {
      "id": "del_5c8a1f3e9b",
      "eventId": "evt_01hz8x2k9qv7m3ntf5rw6ye8ka",
      "webhookId": "whs_9b2f4e1a7c",
      "status": "DELIVERED",
      "attempts": [
        {
          "at": "2026-06-10T14:23:05Z",
          "result": "5xx",
          "httpStatus": 502,
          "latencyMs": 143,
          "bodySnippet": "upstream unavailable"
        },
        {
          "at": "2026-06-10T14:23:11Z",
          "result": "2xx",
          "httpStatus": 200,
          "latencyMs": 87,
          "bodySnippet": null
        }
      ],
      "replayedFromDeliveryId": null,
      "deliveredAt": "2026-06-10T14:23:11Z",
      "createdAt": "2026-06-10T14:23:05Z"
    }
  ],
  "pagination": {
    "limit": 100,
    "nextCursor": null
  }
}
  • id — the delivery’s opaque identifier (del_…).
  • eventId / webhookId — the event delivered and the webhook it was delivered to.
  • statusPENDING (still retrying), DELIVERED, EXHAUSTED (24-hour retry budget spent), or CANCELLED (webhook disabled or deleted mid-retry).
  • attempts — one entry per attempt: timestamp, result, HTTP status, latency, and up to 1 KB of your endpoint’s response body. result takes the same values as a ping’s result.
  • replayedFromDeliveryId — set when this delivery is a redelivery of an earlier one.
  • deliveredAt — when the first 2xx was received, or null.
To page through a longer list, pass nextCursor back — see Pagination. Errors follow the standard error envelope.