Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

The Webhook endpoint object

A URL we deliver signed events to.

Returned by POST /v1/webhooks, GET /v1/webhooks and GET /v1/webhooks/{id}.

Fields

Every field is always present. A field is null only where its type says | null, and a list with nothing in it is [], never null.

FieldTypeDescription
idstringUUID.
urlstringWhere deliveries are POSTed.
eventsstring[]The event types subscribed to: set.published, card.created, card.updated, card.legality.changed, price.threshold.crossed.
gamesstring[]Games the endpoint hears about. Empty means every game.
descriptionstring | nullYour label, up to 200 characters.
statusstringdisabled after repeated failures; see disabledReason.

One of: active, disabled

disabledAtstring | nullWhen deliveries were stopped. ISO 8601 timestamp, UTC.
disabledReasonstring | nullWhy deliveries were stopped.
failuresintegerConsecutive failed deliveries.
lastDeliveryAtstring | nullThe last delivery attempt. ISO 8601 timestamp, UTC.
lastStatusCodeinteger | nullThe HTTP status your server answered the last attempt with.
createdAtstringISO 8601 timestamp, UTC.

A real one

From the production API, unedited.

{
  "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"
}