---
title: "Read Documents"
method: GET
path: "/agents/documents/"
tags: ["authenticated", "agent-documents"]
---

# Read Documents

`GET /agents/documents/`

## Request

- Base URL: `https://api-docs.upsmith.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api-docs.upsmith.com/agents/documents/`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

## Query parameters

- `cursor` string, nullable

## Headers

- `organization-id` string, nullable
- `x-user-id` string, nullable
- `timezone` string
- `x-actor-email` string, nullable
- `x-request-source` string, nullable
- `x-operation-id` string, nullable
- `x-commit-message` string, nullable
- `x-confirmation-id` string, nullable
- `x-chat-id` string, nullable

## Response `200`

Successful Response

- DocumentPage
  - `items` DocumentPublic[], required
    - `id` string, required
    - `organization_id` string, required
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `deleted_at` string, date-time, nullable
    - `vectorized_at` string, date-time, nullable
    - `title` string, required
    - `gist` string, nullable
    - `url` string, nullable
    - `status` 'queued' | 'processing' | 'ready' | 'error', required
    - `type` 'text' | 'file' | 'link', required
    - `category` 'pricing' | 'promotional_pricing' | 'membership_details' | 'maintenance_scope' | 'about_us' | 'outreach_script' | 'other': What a document is about, as opposed to ``DocumentType``'s modality. Mirrors the frontend template picker (``document-templates.ts``), which is already the set of documents we coach orgs to create. One category per document: the templates partition the content, so base and non-member rates live in ``pricing`` while member-only rates live in ``membership_details``, and a consumer requires each category it needs rather than a fuzzy set. ``maintenance_scope`` rather than "maintenance" — maintenance already means recurring service events elsewhere in this schema.
    - `created_by_user_id` string, nullable
    - `updated_by_user_id` string, nullable
    - `preflight` AdvisoryFindings: Findings on a change that already happened, carried by the same card. Neither confirm outcome fits: nothing is waiting on an answer and nothing was refused. Org settings have no draft and no pause to grade a proposal against, so the write lands and the findings describe what the operator now has — which makes rendering this as ``confirmation_blocked`` a false claim about whether the change went through.
      - `status` 'advisory'
      - `impact_card` ImpactCard, required: Renderer-agnostic impact description; each surface presents it its own way.
        - `title` string, required
        - `summary` string, required
        - `sections` ImpactSection[]
          - `label` string, required
          - `description` string, nullable
          - `collapsed` boolean
          - `before` string[]
          - `after` string[]
          - `detail` string[]
          - `before_rules` object[]
          - `after_rules` object[]
          - `funnel` object, nullable
        - `warnings` string[]
        - `metrics` object
        - `brands` BrandImpact[]
          - `organization_id` string, required
          - `brand` string, required
          - `card` ImpactCard, required (recursive)
          - `blocking` string, nullable
      - `instructions` string, required
    - `prompt_eval_group_ids` string[]
    - `prompt_quality` PromptQualityOffer: The grade this write did not run, and whether the caller should offer it. Writes stopped grading themselves: most edits are a rename or a reordering that the last grade already answered for, and paying a judge for every save spent far more on unwatched runs than on wanted ones. The write now says what it reached and leaves the choice to whoever made it. ``recommended`` is a suggestion, never a gate — the check is offered either way, and an operator who wants one for a typo fix is not argued with.
      - `agent_v2_ids` string[]
      - `recommended` boolean
      - `reason` string, nullable
  - `total` integer, required
  - `cursor` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/upsmith/apis/upsmith-api.md) - [All operations](https://skmtc.dev/upsmith/apis/upsmith-api/llms.txt) - [OpenAPI document](https://skmtc.dev/upsmith/apis/upsmith-api/revisions/86e2c2bd93af?raw)
