> This page is for version v1 (default).
> For other versions, use one of these documentation indexes:
> - v1 (default): https://docs.plextera.com/v-1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.plextera.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.plextera.com/_mcp/server.

# Get delivery details

GET https://api.plextera.com/api/public/v1/events/{eventId}/deliveries/{deliveryId}

Returns one delivery with its event payload and recent HTTP attempt history.

Includes up to 100 attempts and indicates when earlier records were omitted.
Signatures and secrets are not exposed.


Reference: https://docs.plextera.com/api/api-reference/event-subscriptions/get-event-delivery

## Authentication

- `Authorization` header (required) — Use the API key format: `api-key <token>`.

## Request

### Path parameters

- `eventId` (string, required) — Event that owns the delivery.
- `deliveryId` (string, required) — Delivery identifier returned by List event deliveries.

## Response

### 200

Delivery details with the event payload and up to the 100 most recent HTTP attempt records.

- `id` (string, required) — Delivery identifier.
- `eventId` (string, required) — Event this delivery carries. Matches the `X-Plextera-Event-Id` header your endpoint receives; use it for deduplication.
- `subscriptionId` (string, required) — Subscription whose endpoint receives this delivery.
- `endpointUrl` (string, required) — Subscription endpoint captured when this delivery was created. Attempt details show the actual URL used.
- `eventType` (enum, required) — Event type of the delivered event.
  - Allowed values: `document-insights.extraction.completed`, `document-insights.extraction.failed`, `document-insights.extraction.rejected`, `workflow.run.completed`, `workflow.run.failed`
- `status` (enum, required) — `pending` - queued or being sent; `retrying` - a failed attempt with a retry scheduled; `delivered` and `failed` are terminal.
  - Allowed values: `pending`, `retrying`, `delivered`, `failed`
- `attemptCount` (integer, required) — Number of completed attempts whose result was applied to this delivery. It can be lower than `totalAttemptRecords` on a detail response because in-progress and superseded records are retained.
- `occurredAt` (datetime, required) — UTC timestamp when the event occurred.
- `createdAt` (datetime, required) — UTC timestamp when the delivery was queued.
- `payload` (map from string to any, required) — Exact JSON event envelope sent in the webhook request.
- `attempts` (list of EventDeliveryAttempt, required) — Up to the 100 most recent attempt records, ordered chronologically within the returned window. Empty for deliveries created before attempt-level history was introduced.
- `totalAttemptRecords` (long, required) — Total stored attempt-history records for this delivery, including in-progress and superseded records.
- `attemptsTruncated` (boolean, required) — True when earlier attempt records exist but are not included in `attempts`.
- `resendOfDeliveryId` (string, optional) — Delivery selected when this manual resend was created. Omitted for automatic deliveries.
- `lastAttemptedAt` (datetime, optional) — UTC timestamp of the most recent completed attempt whose result was applied to this delivery. Omitted before the first applied attempt.
- `nextAttemptAt` (datetime, optional) — UTC timestamp when the initial send or next automatic retry is eligible to run. Omitted when no send is scheduled.
- `deliveredAt` (datetime, optional) — UTC timestamp of successful delivery. Present only for `delivered`.
- `responseStatusCode` (integer, optional) — HTTP status code your endpoint returned on the last attempt. Omitted when the endpoint was unreachable.
- `error` (string, optional) — Human-readable description of the last failure. Omitted for successful deliveries.

## Errors

### 401 Unauthorized Error

UNAUTHORIZED — The API key is missing, malformed, or revoked.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 403 Forbidden Error

FORBIDDEN — The API key is valid but not allowed to perform this operation.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 404 Not Found Error

NOT_FOUND — The resource does not exist in your workspace.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 405 Method Not Allowed Error

METHOD_NOT_ALLOWED — The HTTP method is not supported for this path.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 406 Not Acceptable Error

NOT_ACCEPTABLE — The requested response media type is not supported.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 429 Too Many Requests Error

RATE_LIMITED — Too many requests in a short window. 429 responses are enforced at the network edge; the body may be plain text instead of this envelope, so rely on the status code and the Retry-After header.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

### 500 Internal Server Error

INTERNAL_ERROR — Unexpected failure inside Plextera. Retry with backoff; contact support with the requestId if it persists.

- `error` (ApiError, optional) — Machine-readable error details shared by every error response.

## Types

### EventDeliveryAttempt

One HTTP attempt to deliver the event.

- `id` (string, required) — Internal identifier of this send attempt.
- `attemptNumber` (integer, required) — One-based applied-attempt position. A superseded send and its replacement can share this value.
- `trigger` (enum, required) — `automatic` for the initial delivery and scheduled retries; `manual` for an explicit resend.
  - Allowed values: `automatic`, `manual`
- `status` (enum, required) — `in_progress`, `delivered`, or `failed`. `superseded` means the worker's claim expired and its late result was retained for diagnostics but did not replace the delivery's newer state.
  - Allowed values: `in_progress`, `delivered`, `failed`, `superseded`
- `startedAt` (datetime, required) — UTC timestamp when the HTTP attempt began.
- `request` (EventDeliveryAttemptRequest, required) — Request metadata captured at send time. The payload is returned once at delivery level.
- `completedAt` (datetime, optional) — UTC timestamp when the attempt completed. Omitted while in progress.
- `durationMs` (long, optional) — End-to-end HTTP attempt duration in milliseconds. Omitted while in progress.
- `response` (EventDeliveryAttemptResponse, optional) — HTTP response metadata and body prefix. Omitted if no HTTP response was received.
- `error` (EventDeliveryAttemptError, optional) — Structured failure details. Omitted when the attempt succeeded.

### ApiError

Machine-readable error details shared by every error response.

- `code` (string, optional) — Stable machine-readable error code. Branch your handling on this, not on `message`.
- `message` (string, optional) — Human-readable explanation. Wording may change; do not parse it.
- `requestId` (string, optional) — Unique request identifier, also returned in the X-Request-Id response header. Include it in support requests.
- `retryable` (boolean, optional) — True when retrying the same request later may succeed.
- `details` (list of ApiErrorDetail, optional) — Field-level validation issues. Present only for VALIDATION_FAILED.

### EventDeliveryAttemptRequest

Safe webhook request metadata.

- `method` (string, required) — Always `POST`.
- `url` (string, required) — Actual subscription endpoint used for this attempt. It can differ between attempts after an endpoint update.
- `headers` (map from string to string, required) — Headers used for the attempt. `X-Plextera-Signature` is returned as `[redacted]`; signing secrets and computed signatures are never exposed in this request metadata. The endpoint response body is retained as opaque text and can contain any value returned by that endpoint.

### EventDeliveryAttemptResponse

Captured endpoint response.

- `truncated` (boolean, required) — True when the stored body is only a prefix of a larger response.
- `statusCode` (integer, optional) — HTTP status returned by the endpoint.
- `body` (string, optional) — Response body prefix, up to 16,000 characters. Omitted for an empty body.

### EventDeliveryAttemptError

Structured reason an attempt failed.

- `category` (enum, optional) — Failure family: `dns`, `tls`, `connection`, `timeout`, `http`, `configuration`, or `internal`.
  - Allowed values: `dns`, `tls`, `connection`, `timeout`, `http`, `configuration`, `internal`
- `code` (string, optional) — Stable diagnostic code such as `HTTP_503`, `REQUEST_TIMEOUT`, or `DNS_RESOLUTION_FAILED`.
- `message` (string, optional) — Human-readable diagnostic message.

### ApiErrorDetail

Field-level validation issue.

- `field` (string, optional) — Name of the invalid request field.
- `issue` (string, optional) — What is wrong with the field value.

## Examples

**Response**

```json
{
  "id": "dlv_01JYA3W9GJ4M2R8T6V0B5C7N9Q",
  "eventId": "evt_01JYA3W9G05X4D2K8M6P1R3T7V",
  "subscriptionId": "sub_01JY7MA0Q2D9V64ZFD0Y2J5K3T",
  "endpointUrl": "https://example.com/webhooks/plextera",
  "eventType": "document-insights.extraction.completed",
  "status": "failed",
  "attemptCount": 1,
  "occurredAt": "2026-04-07T10:22:00Z",
  "createdAt": "2026-04-07T10:22:01Z",
  "payload": {
    "apiVersion": "v1",
    "data": {
      "extractionId": "ext_01JYA3VYFSZ3H9M2K6N8P4R7TC",
      "status": "COMPLETED"
    },
    "eventId": "evt_01JYA3W9G05X4D2K8M6P1R3T7V",
    "eventType": "document-insights.extraction.completed",
    "occurredAt": "2026-04-07T10:22:00Z"
  },
  "attempts": [
    {
      "id": "att_01JYA3WAGTVS1H8C4Q2F7M5N9K",
      "attemptNumber": 1,
      "trigger": "automatic",
      "status": "failed",
      "startedAt": "2026-04-07T10:22:02Z",
      "request": {
        "method": "POST",
        "url": "https://example.com/webhooks/plextera",
        "headers": {
          "Content-Type": "application/json",
          "User-Agent": "plextera-public-api-service",
          "X-Plextera-Api-Version": "v1",
          "X-Plextera-Delivery-Id": "dlv_01JYA3W9GJ4M2R8T6V0B5C7N9Q",
          "X-Plextera-Event-Id": "evt_01JYA3W9G05X4D2K8M6P1R3T7V",
          "X-Plextera-Event-Occurred-At": "2026-04-07T10:22:00Z",
          "X-Plextera-Event-Type": "document-insights.extraction.completed",
          "X-Plextera-Signature": "[redacted]"
        }
      },
      "completedAt": "2026-04-07T10:22:02.240Z",
      "durationMs": 240,
      "response": {
        "truncated": false,
        "statusCode": 503,
        "body": "{\"error\":\"temporarily unavailable\"}"
      },
      "error": {
        "category": "http",
        "code": "HTTP_503",
        "message": "Endpoint returned HTTP 503."
      }
    }
  ],
  "totalAttemptRecords": 1,
  "attemptsTruncated": false,
  "lastAttemptedAt": "2026-04-07T10:22:02Z",
  "responseStatusCode": 503,
  "error": "Endpoint returned HTTP 503."
}
```

**SDK Code**

```python Failed delivery details
import requests

url = "https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId"

headers = {"Authorization": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Failed delivery details
const url = 'https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId';
const options = {method: 'GET', headers: {Authorization: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Failed delivery details
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Failed delivery details
require 'uri'
require 'net/http'

url = URI("https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java Failed delivery details
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId")
  .header("Authorization", "<apiKey>")
  .asString();
```

```php Failed delivery details
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId', [
  'headers' => [
    'Authorization' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Failed delivery details
using RestSharp;

var client = new RestClient("https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Failed delivery details
import Foundation

let headers = ["Authorization": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.plextera.com/api/public/v1/events/eventId/deliveries/deliveryId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```