---
title: "List investor documents and download links"
method: GET
path: "/api/v2/lp/documents"
tags: ["LPs"]
---

# List investor documents and download links

`GET /api/v2/lp/documents`

## Request

- Base URL: `https://capitalcompany.ai`
- URL: `https://capitalcompany.ai/api/v2/lp/documents`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Allowlisted operating agreements, memoranda, current executed subscription agreements and durable closing notices for active, non-revoked commitments. Arbitrary untyped data-room files, wire instructions and EIN letters are excluded. Downloads expire; refresh the listing when needed. Sorted by document ID and fund ID. Do not cache or expose download links publicly. Required key scope: lp:read.

## Query parameters

- `email` string, required: Invitation email, trimmed and lowercased. Reads include unverified emails that resolve to an account; commitment writes require a verified account.
- `limit` integer: Maximum documents per page (1–100). Omitted means 50.
- `offset` integer: Number of roster rows to skip; omitted means 0. Advance by the requested limit, not the number of changed portfolios.

## Response `200`

Paginated typed documents with temporary signed download URLs and expiry in seconds (currently 3600).

- LpDocumentsResponse
  - `success` true, required
  - `data` object, required
    - `totalCount` integer, required
    - `documents` object[], required
      - `id` string, required
      - `fundId` string, required
      - `commitmentId` string, nullable, required
      - `type` 'operating-agreement' | 'private-placement-memorandum' | 'subscription-agreement' | 'closing-notice', required
      - `fileName` string, required
      - `contentType` string, required
      - `downloadUrl` string, required: Temporary signed private download URL; treat as sensitive and refresh after expiry.
      - `expiresInSeconds` integer, required
    - `pagination` object, required
      - `limit` integer, required
      - `offset` integer, required
      - `hasMore` boolean, required

## Other responses

- `400`: INVALID_PARAMS: request validation failed.
- `401`: MISSING_API_KEY or INVALID_API_KEY: missing, invalid or revoked key.
- `403`: INSUFFICIENT_SCOPE: the key lacks the required scope.
- `404`: LP_NOT_FOUND: no account portfolio for this email in the key’s team.
- `429`: RATE_LIMIT_EXCEEDED: respect Retry-After before retrying.
- `500`: INTERNAL_ERROR: unexpected server error.

---

[API](https://skmtc.dev/capitalcompany/apis/capital-company-external-api.md) · [All operations](https://skmtc.dev/capitalcompany/apis/capital-company-external-api/llms.txt) · [OpenAPI document](https://skmtc.dev/capitalcompany/apis/capital-company-external-api/revisions/b99bb24f107d?raw)
