# GET /v1/webhook-deliveries/{deliveryId}

**Service:** Webhooks  
**Operation:** `WebhookService_GetWebhookDelivery`

Fetch one delivery record.

## Parameters

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `deliveryId` | path | string | yes | The delivery record to fetch. |
| `fields` | query | string | no | Comma-separated response fields to include, using camelCase JSON names (e.g. `orderId,total.amountMicros`). Dot paths reach into nested objects and map transparently across arrays. Paths are relative to the resource, not the response envelope; envelope keys like `nextPageToken` are always preserved. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Unknown names are silently ignored. Takes precedence over `excludeFields` when both are provided. |
| `excludeFields` | query | string | no | Comma-separated response fields to exclude, using camelCase JSON names. Dot paths and array-transparency work the same as `fields`. Paths are relative to the resource, not the response envelope. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Ignored when `fields` is also provided. |

## Responses

| Status | Schema | Description |
| --- | --- | --- |
| 200 | `GetWebhookDeliveryResponse` | A successful response. |
| 400 | `Error` | The request was rejected because it was malformed — for example a delivery id that is not a whdel_ id. The body is a validation-failure envelope: an overall type and message and one entry per problem (each with a stable code, a message, and a param pointing at the offending parameter). |
| 401 | `Error` | The request is missing a valid bearer token, or the token is invalid or expired. |
| 403 | `Error` | The token is valid but does not permit this action, or the resource belongs to a company the token cannot act for. The error type is permission_denied. |
| 404 | `Error` | No delivery record with the given id exists for the authenticated company — including records past their 30-day retention. |
| 429 | `Error` | The request was throttled (rate_limited) or exceeded a size limit (resource_exhausted). When throttled, the Retry-After header says how many seconds to wait before retrying; a resource_exhausted request will fail the same way if retried unchanged. |
| default | `Error` | Any other error. The body is the same error envelope every error uses: a short stable type identifying the kind of failure, a human-readable message, and the request's idempotency key echoed back when one was supplied. |

## Returns

`GetWebhookDeliveryResponse`

| Field | Type | Description |
| --- | --- | --- |
| `delivery` | WebhookDelivery | The requested delivery record. |
| `delivery.deliveryId` | string | The delivery record's id. Read-only. |
| `delivery.webhookId` | string | The subscription this delivery targets. Read-only. |
| `delivery.eventId` | string | The event being delivered. Matches the `id` of the delivered payload — identical across retries and duplicates; deduplicate on it. Read-only. |
| `delivery.eventType` | string | The event's type (see `eventTypes` on Webhook for the taxonomy). Read-only. |
| `delivery.state` | DeliveryState | Where the delivery is in its lifecycle. Read-only. The state of one delivery (one event to one subscription).   - DELIVERY_STATE_PENDING: Waiting for its first or next attempt (see `nextAttemptAt`).  - DELIVERY_STATE_SUCCEEDED: The endpoint acknowledged the delivery with a 2xx response.  - DELIVERY_STATE_EXHAUSTED: All retry attempts were used without a 2xx (about 10.6 hours across 6 attempts). Exhausted deliveries are not retried again. One of: DELIVERY_STATE_UNSPECIFIED, DELIVERY_STATE_PENDING, DELIVERY_STATE_SUCCEEDED, DELIVERY_STATE_EXHAUSTED. |
| `delivery.attemptCount` | integer | Attempts made so far (0 while pending its first attempt). Read-only. |
| `delivery.nextAttemptAt` | string | When the next attempt is due; unset once succeeded or exhausted. Read-only. |
| `delivery.lastAttemptedAt` | string | When the most recent attempt ran; unset before the first attempt. Read-only. |
| `delivery.lastStatusCode` | integer | The HTTP status the endpoint returned on the most recent attempt; 0 when the attempt never got a response (timeout, connection failure, a URL refused at send time, or the original event no longer being available). Read-only. |
| `delivery.lastResponseSnippet` | string | The start of the endpoint's response body on the most recent attempt, truncated to 1000 characters. Read-only. |
| `delivery.createdAt` | string | When the delivery record was created (the event's intake time). Read-only. |

---

Source: https://developer.factory.app/reference/webhooks/get-webhook-delivery · Factory Sales API v1
