---
title: Document Detail Page
description: What you can see and do on a single document — delivery state, retry timeline, and SAP business metadata.
---

The document detail page (`/documents/{id}`) is the per-document inspector. It shows the document's identity, where it came from, where it's been delivered, the retry/delivery timeline, and — when enrichers are configured — the SAP business metadata attached to it.

## Identity & source

The top section shows the document's FileRelay id, original filename, MIME type, size, content repository, SAP object id / type (when present), archive date, and ingest timestamp.

## Delivery

A timeline showing each destination the document was forwarded to, with status (`pending`, `processing`, `processed`, `failed`), attempt count, and the most recent error if any. Retry attempts collapse under a single destination — click to expand.

## SAP Metadata

This section only appears if the document's repository has at least one enricher bound. It is **always rendered** when present — even if no enrichments have run yet — so the absence of metadata is itself a visible state.

The section renders one card per bound enricher, each with:

- **Header** — a chevron to collapse/expand the card, a colored status dot (green = fetched, red = failed, gray = not yet run), the enricher name, and the BAPI module beneath it.
- **Body** — depends on status:
  - **Fetched** — the response rendered as a recursive key:value JSON tree (with a **Raw** toggle for the underlying JSON).
  - **Failed** — red error block with the message and timestamp.
  - **Pending** — spinner + "Enriching…" while the job is in flight.
  - **Not yet run** — italic "Not yet run on this document." text.

### Per-card actions

- **Fetch** — re-runs the enricher against SAP **without** persisting. The result lands in a preview panel below.
  - If the preview matches the stored row → "Latest fetch matches what's saved" — no action needed.
  - If it differs → an **Override** button writes the new result, overwriting the stored row.
  - **Dismiss** clears the preview without saving.
- **Raw / Fields** — toggles between the JSON tree view and a raw JSON `<pre>` block.

### Deleted enrichers

If an enricher was deleted from the library after it ran on this document, the stored row survives. You'll see a card with:

- The function name with a strike-through and a **Deleted** badge.
- The fetched fields still rendered (read-only).
- **No Fetch button** — there's no function to call.

This is intentional — historical metadata you've already captured shouldn't disappear just because the producing function was retired.

### No enrichers configured

If the repository has no enricher bound at all, the section shows a single empty-state message with a link to [/data-enrichment](/data-enrichment) where you can bind one.

## Export

The **Export JSON** button at the top includes successful enrichments under a `metadata` key, keyed by enricher name:

```json
{
  "doc_id": "01KT...",
  "filename": "invoice_4500001234.pdf",
  "metadata": {
    "Invoice header lookup": { "DOC_HEADER": { "VENDOR": "ACME", "AMOUNT": "12345" } },
    "Material line items":   { "ITEMS": [ { "MATERIAL": "M-100" } ] }
  }
}
```

Pending/failed enrichments are omitted from the export.

## See also

- [Data Enrichment Overview](/docs/data-enrichment/overview) — what an enricher is and the ingest-time flow
- [Data Enrichment Page](/docs/data-enrichment/bindings) — bind functions to repositories
- [RFC Console](/docs/data-enrichment/rfc-console) — build and save BAPI calls
