---
title: "Get the canonical lifecycle receipt for one tenant-owned document."
method: GET
path: "/v1/documents/{documentId}"
tags: ["Documents"]
---

# Get the canonical lifecycle receipt for one tenant-owned document.

`GET /v1/documents/{documentId}`

## Request

- Base URL: `https://signaledi.com/api`
- URL: `https://signaledi.com/api/v1/documents/{documentId}`
- Auth: HTTP bearer

Credentials can read documents only in their exact Lab, Certification, or Production lane. Throttled at 120 calls per minute per API key. `links.transactions` resolves to GET /api/v1/transactions?documentId=…&environment=… (the transactions linked to this document).

## Path parameters

- `documentId` string, required

## Response `200`

Admission, processing, routing, transport, acknowledgement, and customer-delivery state.

- DocumentReceiptResult
  - `ok` true, required
  - `document` DocumentReceipt, required
    - `documentId` string, required
    - `direction` 'CUSTOMER_TO_PARTNER' | 'PARTNER_TO_CUSTOMER', required
    - `environment` 'LAB' | 'CERTIFICATION' | 'PRODUCTION', required: The exact isolated lane identifier. The API route and payload remain the same. Lab is customer-to-Signal only; Certification uses the real third-party test route; Production is approved live exchange. SANDBOX is a historical request-only alias for Certification. Promotion creates an approved immutable version and never relabels traffic.
    - `mode` 'typed' | 'raw', required
    - `standard` 'x12' | 'edifact', required
    - `documentTypeCodes` string[], required
    - `partnerId` string, nullable, required
    - `transactionIds` string[], required
    - `capabilities` object, required
      - `typedPayload` boolean, required
      - `mappedPayload` boolean, required
      - `rawPayload` boolean, required
      - `semanticValidation` 'supported' | 'unsupported' | 'unknown', required
    - `admission` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `processing` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `routing` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `transport` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `acknowledgement` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `customerDelivery` DocumentLifecycleStage, required
      - `status` string, required
      - `at` string, date-time
      - `code` string
      - `protocol` string
      - `expected` string[]
      - `dueAt` string, date-time
      - `severity` 'success' | 'warning' | 'attention' | 'pending': Acknowledgement stage only. AK9 → AK5 → AK3/AK4 triage: `attention` for R/P/unknown, `warning` for E, `pending` for receipt-only, `success` for A.
      - `requiresAttention` boolean
      - `receivedCount` integer
      - `expectedCount` integer
      - `outcomes` string[]
    - `links` object, required
      - `self` string, required
      - `transactions` string, required
      - `payload` string, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `401`: Missing or invalid API key (`code` AUTH_UNAUTHORIZED).
- `403`: API key lacks the required `platform` scope (`code` PLATFORM_SCOPE_REQUIRED), its lane is invalid (API_KEY_ENVIRONMENT_INVALID), the workspace is not entitled to the platform API (PLATFORM_NOT_ENTITLED), or a supplied `workspaceId` does not match the authenticated workspace (FORBIDDEN).
- `404`: The document is not owned by the caller's workspace, is not readable in the key's exact lane, or the id is malformed (`code` DOCUMENT_NOT_FOUND); the workspace could not be resolved (WORKSPACE_NOT_FOUND); or the /v1 platform is disabled (NOT_FOUND).
- `429`: Rate limit exceeded (`code` RATE_LIMITED).
- `500`: Unexpected server error (`code` e.g. PARSE_FAILED, VALIDATE_FAILED, OUTBOUND_FAILED, INBOUND_FAILED, BATCH_FAILED, TRANSACTIONS_FAILED, DOCUMENT_RECEIPT_FAILED, DOCUMENT_PAYLOAD_FAILED). Sanitized bodies carry an opaque `correlationId` to quote to support; internal error text is never echoed.

---

[API](https://skmtc.dev/signaledi/apis/signaledi-developer-api.md) · [All operations](https://skmtc.dev/signaledi/apis/signaledi-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signaledi/apis/signaledi-developer-api/revisions/9bc596644a10?raw)
