Skip to content

Webhook deliveries tools

MCP tools for Webhook deliveries: webhook_deliveries_get, webhook_deliveries_list, webhook_deliveries_redeliver.

  • webhook_deliveries_get: Get a webhook delivery
  • webhook_deliveries_list: List webhook deliveries
  • webhook_deliveries_redeliver: Redeliver a webhook

webhook_deliveries_get

Get a webhook delivery. Operation webhook_deliveries.get · Brand level · permission webhooks:read · risk tier read · since M4

Returns one webhook delivery with its attempts: when each was made, its outcome, the HTTP status your endpoint answered with and the start of the response body; and, while it is still being retried, nextAttemptAt.

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (whd_…)yes–
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Example

A delivery that succeeded on its second attempt

Arguments:

JSON
{
  "id": "whd_01m4tx5nj8emwbyf7y9vcf47z2",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}

Result output:

JSON
{
  "id": "whd_01m4tx5nj8emwbyf7y9vcf47z2",
  "object": "webhook_delivery",
  "endpointId": "we_01m4tx5nj8emwbyf7y9vcf47z0",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "eventId": "evt_01m4tx5nj8emwbyf7y9vcf47z4",
  "eventType": "customer.created",
  "trigger": "event",
  "redeliveryOf": null,
  "status": "succeeded",
  "attempt": 2,
  "maxAttempts": 15,
  "nextAttemptAt": null,
  "responseCode": 200,
  "canceledReason": null,
  "attempts": [
    {
      "attempt": 1,
      "at": "2026-10-13T12:00:00.000Z",
      "outcome": "http_error",
      "responseCode": 503,
      "responseExcerpt": "Service Unavailable",
      "durationMs": 812,
      "error": null
    },
    {
      "attempt": 2,
      "at": "2026-10-13T12:01:00.000Z",
      "outcome": "succeeded",
      "responseCode": 200,
      "responseExcerpt": "ok",
      "durationMs": 95,
      "error": null
    }
  ],
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:01:00.000Z"
}

webhook_deliveries_list

List webhook deliveries. Operation webhook_deliveries.list · Brand level · permission webhooks:read · risk tier read · since M4

Lists the brand's webhook deliveries in the request's mode, newest first: one per event and endpoint, plus test deliveries and redeliveries, each with its attempts (status code and the start of the response body). Filter by endpointId, eventId or status (pending, succeeded, failed, canceled).

Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
endpointIdID (we_…)noOnly deliveries to this endpoint.
eventIdID (evt_…)noOnly deliveries of this event.
statusone of pending, succeeded, failed, canceledno–
limitintegerno(1–100)
starting_afterID (whd_…)no–
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Example

An endpoint's delivery log

Arguments:

JSON
{
  "endpointId": "we_01m4tx5nj8emwbyf7y9vcf47z0",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "whd_01m4tx5nj8emwbyf7y9vcf47z2",
      "object": "webhook_delivery",
      "endpointId": "we_01m4tx5nj8emwbyf7y9vcf47z0",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "livemode": false,
      "eventId": "evt_01m4tx5nj8emwbyf7y9vcf47z4",
      "eventType": "customer.created",
      "trigger": "event",
      "redeliveryOf": null,
      "status": "succeeded",
      "attempt": 2,
      "maxAttempts": 15,
      "nextAttemptAt": null,
      "responseCode": 200,
      "canceledReason": null,
      "attempts": [
        {
          "attempt": 1,
          "at": "2026-10-13T12:00:00.000Z",
          "outcome": "http_error",
          "responseCode": 503,
          "responseExcerpt": "Service Unavailable",
          "durationMs": 812,
          "error": null
        },
        {
          "attempt": 2,
          "at": "2026-10-13T12:01:00.000Z",
          "outcome": "succeeded",
          "responseCode": 200,
          "responseExcerpt": "ok",
          "durationMs": 95,
          "error": null
        }
      ],
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:01:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

webhook_deliveries_redeliver

Redeliver a webhook. Operation webhook_deliveries.redeliver · Brand level · permission webhooks:write · risk tier write · since M4

Sends a finished delivery's event to its endpoint again, as a new delivery with trigger: "redeliver" and redeliveryOf set: the same body and event id (deduplicate on it), signed anew. It is attempted once, right after the call, also when the endpoint is disabled; read the outcome with webhook_deliveries.get.

Use it after fixing a receiver, for events whose retries ran out or that were canceled while the endpoint was disabled. A delivery that is still being retried can't be redelivered.

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true

Arguments

ArgumentTypeRequiredDescription
idID (whd_…)yes–
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Redeliver a failed delivery

Arguments:

JSON
{
  "id": "whd_01m4tx5nj8emwbyf7y9vcf47z2",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "whd_01m4tx5nj8emwbyf7y9vcf47z3",
  "object": "webhook_delivery",
  "endpointId": "we_01m4tx5nj8emwbyf7y9vcf47z0",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "eventId": "evt_01m4tx5nj8emwbyf7y9vcf47z4",
  "eventType": "customer.created",
  "trigger": "redeliver",
  "redeliveryOf": "whd_01m4tx5nj8emwbyf7y9vcf47z2",
  "status": "pending",
  "attempt": 0,
  "maxAttempts": 1,
  "nextAttemptAt": "2026-10-14T10:30:00.000Z",
  "responseCode": null,
  "canceledReason": null,
  "attempts": [],
  "createdAt": "2026-10-14T10:30:00.000Z",
  "updatedAt": "2026-10-14T10:30:00.000Z"
}