> ## Documentation Index
> Fetch the complete documentation index at: https://opentrain.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Page

> Read one page's canonical TipTap JSON, optionally rendered to HTML or Markdown with a loss report.

Reads one page. The canonical `content` envelope (`{schemaVersion, doc, checksum}`) is **always** returned so no client is forced through a lossy view; ask for `format=html` or `format=markdown` to additionally get a derived render. Markdown renders carry a machine-readable loss report — every construct markdown cannot express is itemized, never silently dropped.

**Requirements:** `instructions:read`.

## Request

<ParamField path="pageId" type="string" required>
  The page id.
</ParamField>

<ParamField query="format" type="string">
  `json` (default), `html`, or `markdown`.
</ParamField>

<ParamField query="revision" type="number">
  Read a historical page revision instead of the head.
</ParamField>

## Response

<ResponseField name="page" type="object">
  `{id, manualId, parentPageId, title, audience, archived}`.
</ResponseField>

<ResponseField name="revisionNumber" type="number">
  The page revision this content represents.
</ResponseField>

<ResponseField name="content" type="object">
  The canonical document envelope. `checksum` is the SHA-256 of the key-sorted `doc` JSON — pass it as a write guard.
</ResponseField>

<ResponseField name="rendered" type="object | null">
  Present when a non-`json` format was requested: `{format, output, lossReport}`. `lossReport.items[]` records `{nodeId, nodeType, reason, severity: "INFO" | "DATA_LOSS"}`.
</ResponseField>

<ResponseField name="assets" type="object[]">
  Assets referenced by the page: `{assetId, kind, nodeId}`. Resolve bytes via [Get Asset](/docs/developers/api-reference/instructions/get-asset).
</ResponseField>
