Get a webhook
One endpoint and its last 20 deliveries.
deliveries is the newest 20 attempts, to debug a failing endpoint without a log of your own.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| idrequired | string | The endpoint's id. |
Response
200 The endpoint.
| Field | Type | Description |
|---|---|---|
| data | WebhookEndpoint (WebhookEndpoint reference) | A WebhookEndpoint with deliveries. |
| data.deliveries | object[] | Newest first. |
| data.deliveries[].id | string | Delivery id. |
| data.deliveries[].eventId | string | The event's id, which is also id in the delivered body. |
| data.deliveries[].eventType | string | The event type. One of: |
| data.deliveries[].status | string | pending while retries remain.One of: |
| data.deliveries[].attempts | integer | Attempts so far. |
| data.deliveries[].statusCode | integer | null | Your server's last HTTP status. |
| data.deliveries[].error | string | null | Why the last attempt failed. |
| data.deliveries[].durationMs | integer | null | How long the last attempt took. |
| data.deliveries[].nextAttemptAt | string | null | When the next retry is due. |
| data.deliveries[].deliveredAt | string | null | When it succeeded. |
| data.deliveries[].createdAt | string | When it was queued. |
Examples
Real responses from the production API, recorded on 2026-09-24 by the script that also checks every field above against them. Arrays are shown in full.
The endpoint created above
curl "https://api.tcggraph.com/v1/webhooks/c3290649-ffc6-467c-9470-c5307925ca78" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/webhooks/c3290649-ffc6-467c-9470-c5307925ca78", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/webhooks/c3290649-ffc6-467c-9470-c5307925ca78",
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status()200 · X-Credits-Cost: 0
{
"data": {
"id": "c3290649-ffc6-467c-9470-c5307925ca78",
"url": "https://example.com/tcggraph-docs",
"events": [
"set.published",
"card.legality.changed"
],
"games": [
"pokemon"
],
"description": "docs example",
"status": "active",
"disabledAt": null,
"disabledReason": null,
"failures": 0,
"lastDeliveryAt": null,
"lastStatusCode": null,
"createdAt": "2026-09-24T07:47:43.874Z",
"deliveries": []
}
}Errors
Every error has the same body; switch on error.code. Any endpoint can also answer 401, 402, 403 or 429 for reasons of key, plan or rate; those are on Errors.
| Status | Code | When |
|---|---|---|
| 404 | not_found | No endpoint with that id on this account. |
Unknown id
curl "https://api.tcggraph.com/v1/webhooks/00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/webhooks/00000000-0000-0000-0000-000000000000", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/webhooks/00000000-0000-0000-0000-000000000000",
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status()404
{
"error": {
"code": "not_found",
"message": "No webhook endpoint with id \"00000000-0000-0000-0000-000000000000\"."
}
}