const res = await fetch('https://app.trdrs.co/api/partner/webhooks/deliveries?id=whk_4d19c2&limit=20', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/webhooks/deliveries?id=whk_4d19c2&limit=20' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/webhooks/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/webhooks/deliveries",
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://app.trdrs.co/api/partner/webhooks/deliveries"
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://app.trdrs.co/api/partner/webhooks/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/webhooks/deliveries")
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{
"deliveries": [
{
"id": "dlv_8a13f0",
"eventType": "risk.locked",
"status": "delivered",
"attempts": 1,
"responseStatus": 200,
"lastError": null,
"createdAt": "2026-08-24T19:41:07Z",
"lastAttemptAt": "2026-08-24T19:41:07Z",
"payload": {
"type": "risk.locked",
"createdAt": "2026-08-24T19:41:07Z",
"data": {
"accountNumber": "EVAL-7C21A9",
"reason": "eval_breach"
}
}
},
{
"id": "dlv_8a13ef",
"eventType": "balance.recorded",
"status": "pending",
"attempts": 2,
"responseStatus": 502,
"lastError": "HTTP 502",
"createdAt": "2026-08-24T19:12:44Z",
"lastAttemptAt": "2026-08-24T19:18:02Z",
"payload": {
"type": "balance.recorded",
"createdAt": "2026-08-24T19:12:44Z",
"data": {
"accountNumber": "EVAL-7C21A9",
"op": "debit",
"amount": 800,
"referenceId": "payout-2026-08-31-a"
}
}
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}List webhook deliveries
Returns the delivery log for one endpoint, newest first: what we sent, what your endpoint answered, and what is still queued. Each row carries the exact payload, so an event your receiver dropped can be replayed from here rather than lost.
pending means the delivery is still inside its retry schedule; failed means the schedule was exhausted and we stopped. Terminal rows age out after 60 days; a pending row is never swept.
const res = await fetch('https://app.trdrs.co/api/partner/webhooks/deliveries?id=whk_4d19c2&limit=20', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/webhooks/deliveries?id=whk_4d19c2&limit=20' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/webhooks/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/webhooks/deliveries",
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://app.trdrs.co/api/partner/webhooks/deliveries"
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://app.trdrs.co/api/partner/webhooks/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/webhooks/deliveries")
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{
"deliveries": [
{
"id": "dlv_8a13f0",
"eventType": "risk.locked",
"status": "delivered",
"attempts": 1,
"responseStatus": 200,
"lastError": null,
"createdAt": "2026-08-24T19:41:07Z",
"lastAttemptAt": "2026-08-24T19:41:07Z",
"payload": {
"type": "risk.locked",
"createdAt": "2026-08-24T19:41:07Z",
"data": {
"accountNumber": "EVAL-7C21A9",
"reason": "eval_breach"
}
}
},
{
"id": "dlv_8a13ef",
"eventType": "balance.recorded",
"status": "pending",
"attempts": 2,
"responseStatus": 502,
"lastError": "HTTP 502",
"createdAt": "2026-08-24T19:12:44Z",
"lastAttemptAt": "2026-08-24T19:18:02Z",
"payload": {
"type": "balance.recorded",
"createdAt": "2026-08-24T19:12:44Z",
"data": {
"accountNumber": "EVAL-7C21A9",
"op": "debit",
"amount": 800,
"referenceId": "payout-2026-08-31-a"
}
}
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
A partner-scoped API key (trdrs_sk_…), issued to a trdrs Connect partner firm and accepted only under /api/partner/. Same format as the firm (tenant) key, different scope: a firm API key is refused here, and this key is refused everywhere else.
Query Parameters
The webhook id whose log you want.
Rows to return (1–200). Out of range is a 400, never a silent clamp.
1 <= x <= 200Response
The delivery log (PartnerWebhookDeliveriesResponse)
PartnerWebhookDeliveriesResponse. The delivery log for one endpoint, newest first — what we sent, what came back, and what is still queued.
Show child attributes
Show child attributes