Reads one webhook delivery, including the body posted to your endpoint.
GET
/api/notifications/events/{id}
deprecated
Requires: Notifications.Events, merchant scope.
When the platform can confirm it, the body is the payload your endpoint was sent, byte for byte: the standard envelope with its `data` body, exactly as a replay would send it. A receiver recovering a missed event can process it the way it would have processed the original. The platform rebuilds the body from the stored event and checks the result against a hash it recorded when it posted. When it cannot produce a body it can stand behind, the body is `null` and `eventPayloadUnavailableReason` says why: the destination posts a body rendered from a custom text template, the rebuild no longer matches what was posted (usually because the destination's settings changed after the delivery), or the destination's settings cannot be read. A delivery recorded before the hash existed is served from the rebuild without that check. Reading a delivery changes nothing about it: it is not a replay, and no request leaves the platform.
Example request
Every block below sends the same request. Replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a . See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id
required |
path | string (uuid) | |
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|
This request body has no documented fields.
Responses
200 The delivery, including its payload or the reason it is withheld.
Body: WebhookEventDetailDto
Each item has these fields.
| Field | Type | Description |
|---|---|---|
id
required |
string (uuid) | The delivery's id, which is what the detail read takes. |
eventType
required |
string | The event type that was delivered, for example `transaction.created`. nullable |
eventId
required |
string | The envelope event id, which is what deduplicates a redelivery. nullable |
occurredAtUtc
required |
string (date-time) | When the originating event happened, in UTC. |
lastAttemptUtc
required |
string (date-time) | When the most recent attempt ran, in UTC, or `null` before the first. nullable |
status
required |
all of DeliveryStatus | Where the delivery got to. |
attemptCount
required |
integer (int32) | How many attempts have run. |
durationMs
required |
integer (int64) | How long the most recent attempt took, or `null` when none has run. nullable |
httpStatusCode
required |
integer (int32) | The status code the endpoint answered with, or `null` when it never answered. nullable |
destinationName
required |
string | The merchant's own name for the destination the delivery was addressed to. nullable |
httpStatusReason
required |
string | The reason phrase the endpoint sent back with its status code, when it sent one. nullable |
destinationEndpoint
required |
string | The address the platform posted to. nullable |
correlationId
required |
string | The platform correlation id, for a support conversation. nullable |
eventPayloadJson
required |
string | The body the platform posted, byte for byte, when the platform can confirm it; otherwise `null`, with `eventPayloadUnavailableReason` saying why. nullable |
eventPayloadUnavailableReason
required |
all of WebhookEventPayloadUnavailableReason | Why `eventPayloadJson` is withheld, or `null` whenever the body is present. nullable |
This response has no documented body fields.
403 The credential resolves no single merchant.
Body:
Each item has these fields.
| Field | Type | Description |
|---|
This response has no body.
404 No such delivery for this merchant. A mistyped id, another merchant's id and a delivery on a channel this surface does not publish are deliberately indistinguishable.
Body:
Each item has these fields.
| Field | Type | Description |
|---|
This response has no body.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded. Wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.