---
title: "Get Deal Document"
method: GET
path: "/api/external/v2/deals/{deal_id}/documents/{document_id}"
tags: ["external-v2-documents"]
---

# Get Deal Document

`GET /api/external/v2/deals/{deal_id}/documents/{document_id}`

Get metadata for a single document on a deal.

Resolves across all the deal's vaults by default. Pass ``vault_id`` to pin
the lookup to a specific vault — necessary when the same document lives in
more than one vault (e.g. a Resources doc curated into a Deal Room), so the
returned ``vault`` tag and ``folder_path`` describe the vault the caller
selected rather than an arbitrary one.

## Path parameters

- `deal_id` integer, required
- `document_id` integer, required

## Query parameters

- `fields` string, nullable — Comma-separated sparse fieldset
- `include` string, nullable — Comma-separated relationship includes
- `limit` integer — Number of results to return (1-200, clamped)
- `offset` integer — Offset for pagination (>= 0, clamped)
- `cursor` string, nullable — Base64 cursor for pagination
- `search` string, nullable — Case-insensitive substring match on the document file name.
- `extension` string, nullable — Filter to a single file extension, e.g. ``pdf`` (no leading dot).
- `folder_id` integer, nullable — Only documents directly inside this folder. Omit for the whole vault.
- `vault_id` integer, nullable — Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list documents across all of the deal's vaults. A vault id that does not belong to this deal 404s.

## Response `200`

Successful Response

- DocumentObjectResponse — OpenAPI schema for GET /api/external/v2/deals/<deal_id>/documents/<document_id> (object envelope).
  - `request_id` string, required
  - `timestamp` string, required
  - `data` DocumentResponse, required — A single document on a deal. ``id`` is the underlying document id (stable across folder moves) — the same id the download route accepts. ``size_bytes`` may be null for older rows whose size was never persisted. ``vault`` tags which of the deal's vaults the document lives in (a document copied into more than one vault appears once per vault). Uploader attribution and document classification are deliberately omitted from Slice 1 (the listing query does not load those relationships; see the blueprint module docstring).
    - `id` integer, required
    - `file_name` string, nullable
    - `extension` string, nullable
    - `size_bytes` integer, nullable
    - `folder_path` string, nullable
    - `uploaded_at` union
      - string, date-time
      - string
    - `vault` DocumentVaultRef, required — The vault a document lives in, tagged onto each document in a listing. ``type`` is the structural category (``resources`` / ``shared``); ``title`` is the human name ("Deal Resources", "Deal Room", "Closing", …).
      - `id` integer, required
      - `type` 'resources' | 'shared', required
      - `title` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/lev/apis/lev-api.md) · [All operations](https://skmtc.dev/lev/apis/lev-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lev/lev-api/revisions/d0119cf38f9c/schema)
