curl --request GET \
--url https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}', 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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}",
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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}"
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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}")
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{
"delivery": {
"event": {
"id": "evt_01m4wp8xtpfm9tp57mh59nbgrq",
"type": "transfer.statusChanged",
"createdAt": "2026-10-14T09:30:00.100Z",
"schema": "v1",
"data": {},
"idempotencyKey": "6f1c2d3e-0a4b-5c7d-8e9f-1a2b3c4d5e6f"
},
"id": "whd_01H9Xa8F5dN6mP3q",
"object": "webhookDelivery",
"webhookId": "whk_01H9Xa8F5dN6mP3q",
"resourceType": "<string>",
"resourceId": "<string>",
"status": "queued",
"statusReason": "<string>",
"sendAt": "2023-11-07T05:31:56Z",
"deliveredAt": "2023-11-07T05:31:56Z",
"failedAttempts": 123,
"test": true,
"createdAt": "2023-11-07T05:31:56Z"
},
"attempts": [
{
"attemptNumber": 123,
"statusCode": 123,
"error": "<string>",
"durationMs": 123,
"createdAt": "2023-11-07T05:31:56Z",
"targetUrl": "<string>",
"requestMethod": "<string>",
"requestHeaders": {},
"requestBody": "<string>",
"requestBodyTruncated": true,
"responseHeaders": {},
"responseBody": "<string>",
"responseBodyTruncated": true
}
]
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}Get a delivery with its attempts
curl --request GET \
--url https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}', 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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}",
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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}"
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://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.13/webhooks/{webhookId}/deliveries/{deliveryId}")
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{
"delivery": {
"event": {
"id": "evt_01m4wp8xtpfm9tp57mh59nbgrq",
"type": "transfer.statusChanged",
"createdAt": "2026-10-14T09:30:00.100Z",
"schema": "v1",
"data": {},
"idempotencyKey": "6f1c2d3e-0a4b-5c7d-8e9f-1a2b3c4d5e6f"
},
"id": "whd_01H9Xa8F5dN6mP3q",
"object": "webhookDelivery",
"webhookId": "whk_01H9Xa8F5dN6mP3q",
"resourceType": "<string>",
"resourceId": "<string>",
"status": "queued",
"statusReason": "<string>",
"sendAt": "2023-11-07T05:31:56Z",
"deliveredAt": "2023-11-07T05:31:56Z",
"failedAttempts": 123,
"test": true,
"createdAt": "2023-11-07T05:31:56Z"
},
"attempts": [
{
"attemptNumber": 123,
"statusCode": 123,
"error": "<string>",
"durationMs": 123,
"createdAt": "2023-11-07T05:31:56Z",
"targetUrl": "<string>",
"requestMethod": "<string>",
"requestHeaders": {},
"requestBody": "<string>",
"requestBodyTruncated": true,
"responseHeaders": {},
"responseBody": "<string>",
"responseBodyTruncated": true
}
]
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}Authorizations
Token from POST /auth/token
Response
Delivery with attempts
One delivery of one event to one webhook. The whd_ id identifies the delivery. event.id is the envelope id and dedup key, stable across retries.
Hide child attributes
Hide child attributes
The webhook body for this delivery, rendered as the current webhook format. attempts[].requestBody holds the body each attempt sent, cut off at 64 KiB when requestBodyTruncated is set.
Hide child attributes
Hide child attributes
The event's dedup key, stable across retries.
"evt_01m4wp8xtpfm9tp57mh59nbgrq"
"transfer.statusChanged"
When the producer created the event, falling back to when it happened, in UTC with three decimals.
"2026-10-14T09:30:00.100Z"
v1 for events in the V1 catalog, or an empty string for events published before it.
"v1"
The event's data. An empty object when the delivery's payload could not be converted.
The same on every emission of one logical change, so a repeat that carries a new id can be skipped. Absent when the producer set none.
"6f1c2d3e-0a4b-5c7d-8e9f-1a2b3c4d5e6f"
"whd_01H9Xa8F5dN6mP3q"
"webhookDelivery"
"whk_01H9Xa8F5dN6mP3q"
Delivery lifecycle state. skipped is recorded but not dispatched (suspended/disabled webhook).
queued, inProgress, delivered, failed, skipped True for a synthesized test delivery.
When OMS stored the delivery.
Hide child attributes
Hide child attributes
Target URL with userinfo stripped and credential-bearing query params redacted.
Snapshot of the body this attempt POSTed, cut off at 64 KiB; requestBodyTruncated is set when it is.
Up to 64 KiB stored; sensitive JSON field names redacted.
Was this page helpful?