Webhooks
List recent deliveries
GET
/api/v1/webhooks/{webhookId}/deliveries
Newest first; kept for 30 days. Shows each attempt’s HTTP status, error and timing.
- API key access
- Read only or read and write
- Project permission
- None — acts on your own account
- Success
- 200 — OK
Parameters
Path
| Parameter | Type | Notes |
|---|---|---|
webhookId required |
string |
Query string
| Parameter | Type | Notes |
|---|---|---|
limit |
integer | default 50 · min 1 · max 100 |
status |
"pending" | "delivering" | "succeeded" | "failed" |
Example request
Replace tk_live_YOUR_KEY with your API key and the ids with your own.
curl 'https://trackerv2.marketingplanet.global/api/v1/webhooks/6655f9b7d6a8c0e2f4b6d801/deliveries?limit=10' \
-H 'Authorization: Bearer tk_live_YOUR_KEY'
const response = await fetch('https://trackerv2.marketingplanet.global/api/v1/webhooks/6655f9b7d6a8c0e2f4b6d801/deliveries?limit=10', {
headers: {
Authorization: 'Bearer tk_live_YOUR_KEY',
},
});
const result = await response.json();
if (!response.ok) throw new Error(`${result.error.code}: ${result.error.message}`);
console.log(result.data);
import requests
response = requests.get(
"https://trackerv2.marketingplanet.global/api/v1/webhooks/6655f9b7d6a8c0e2f4b6d801/deliveries",
headers={"Authorization": "Bearer tk_live_YOUR_KEY"},
params={
"limit": 10,
},
)
result = response.json()
if not response.ok:
raise RuntimeError(f"{result['error']['code']}: {result['error']['message']}")
print(result["data"])
Example response
{
"data": [
{
"id": "6656a0c8e7b9d1f3a5c7e901",
"endpointId": "6655f9b7d6a8c0e2f4b6d801",
"eventId": "evt_9b1f2c4d6e8a0b2c4d6e8f01",
"event": "uptime.down",
"projectId": "6650a4c2e1b3d5f7a9c1e301",
"status": "succeeded",
"attempts": 1,
"nextAttemptAt": null,
"lastAttemptAt": "2026-10-06T09:20:44.000Z",
"lastStatusCode": 204,
"lastError": null,
"lastDurationMs": 183,
"deliveredAt": "2026-10-06T09:20:44.000Z",
"createdAt": "2026-10-06T09:20:43.000Z"
}
],
"meta": {
"limit": 10
}
}
Response fields
| Field | Type | Notes |
|---|---|---|
data |
array of WebhookDelivery | |
data[].id |
string | |
data[].endpointId |
string | |
data[].eventId |
string | |
data[].event |
string | |
data[].projectId |
string or null | |
data[].status |
"pending" | "delivering" | "succeeded" | "failed" | |
data[].attempts |
integer | |
data[].nextAttemptAt |
string (date-time) or null | |
data[].lastAttemptAt |
string (date-time) or null | |
data[].lastStatusCode |
integer or null | |
data[].lastError |
string or null | |
data[].lastDurationMs |
integer or null | |
data[].deliveredAt |
string (date-time) or null | |
data[].createdAt |
string (date-time) |
Errors
Besides the errors any request can return (bad or missing key, plan, scope, rate limit), this endpoint can return:
| Status | error.code | Meaning |
|---|---|---|
| 400 | invalid-request | A parameter or body field is missing or invalid; error.message says which. |
| 404 | not-found | The resource does not exist or you cannot open it. Tracker does not reveal which. |
Errors always look like { "error": { "code": "…", "message": "…" } }. See Errors & limits.