---
title: "Read an LP portfolio"
method: GET
path: "/api/v2/lp/portfolio"
tags: ["LPs"]
---

# Read an LP portfolio

`GET /api/v2/lp/portfolio`

## Request

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

Returns investments visible through an invitation email in the key’s team, including unverified account emails. Valuations use the investor portal calculation. Holdings exclude subscriptions with no effective date. In-flight commitments appear separately. Summary totals across currencies are not FX-converted; use fundCurrencyCode/currencyCode for currency-aware aggregation. 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.
- `fund_id` string: Optional fnd_<uuid> from funds[].id. Takes precedence over fund_legal_name. A fund outside this LP’s team-visible portfolio returns FUND_NOT_FOUND.
- `fund_legal_name` string: Optional case-insensitive exact legal name. All matching funds are included; prefer fund_id for an unambiguous selection.

## Response `200`

Account identity, summary, fund and commitment totals/fee terms, holdings and valuations, tax-document metadata, pending signatures and unpaid capital calls. Percentages/returns are fractions. IDs use lp_, fnd_, cmt_, ent_, hld_, co_, fee_ and fcp_.

- LpPortfolioResponse
  - `success` true, required
  - `data` object, required
    - `lp` object, required
      - `id` string, required
      - `email` string, required
      - `displayName` string, nullable, required
      - `entityCount` integer, required
    - `summary` object, required
      - `totalCommitted` number, required
      - `totalCalled` number, required
      - `totalPaid` number, required
      - `totalDistributed` number, required
      - `totalFeesAccrued` number, required
      - `fundCount` number, required
      - `totalCarryBorne` number, required
    - `funds` object[], required
      - `fundLegalName` string, required
      - `fundClassName` string, nullable, required
      - `subscriptionAmount` number, required
      - `capitalCalled` number, required
      - `capitalPaid` number, required
      - `distributed` number, required
      - `feesAccrued` number, required
      - `feesByType` object, required: Recognized fee amounts keyed by fee type; excludes realized carry, reported separately.
      - `signedAt` string, date-time, nullable, required
      - `isActive` boolean, required
      - `id` string, required
      - `currencyCode` string, required: Currency code for monetary amounts; amounts are major units, not cents.
      - `carryBorne` number, required
      - `carryReceived` number, required
    - `commitments` object[], required
      - `fundLegalName` string, required
      - `fundClassName` string, nullable, required
      - `subscriptionAmount` number, required
      - `signedAt` string, date-time, nullable, required
      - `subscribedAt` string, date-time, nullable, required
      - `createdAt` string, date-time, required
      - `id` string, required
      - `fundId` string, required
      - `feesAccrued` number, required
      - `feesByType` object, required: Recognized fee amounts keyed by fee type; excludes realized carry, reported separately.
      - `stage` 'Removed' | 'Inactive' | 'Revoked — Pending Refund' | 'Closed — Final Close Notice Issued' | 'Finalized — Awaiting Fund Close' | 'Awaiting Funds' | 'Awaiting Capital Call' | 'Missing lookthrough owners' | 'Awaiting Amendment Signature' | 'Awaiting Amendment Countersignature' | 'Awaiting Signatory' | 'Awaiting Countersignature' | 'Awaiting Fee Approval' | 'Awaiting Commit Details' | 'Awaiting KYC Approval' | 'Awaiting KYC', required: Current blocking stage, using the same member status as the web app.
      - `kycStatus` 'missing' | 'pending-approval' | 'approved', required
      - `subscriptionAgreementStatus` 'none' | 'pending' | 'completed' | 'not-applicable', required
      - `agreementPartiesSigned` boolean, required
      - `feeTerms` object[], required: Configured fees for this commitment, including negotiated terms. These are schedules, not cash paid or accrued totals.
        - `id` string, required: fee_<uuid> fee schedule identifier.
        - `type` 'admin-fee' | 'management-fee' | 'carried-interest' | 'escrow-fee' | 'fund-cost' | 'deferral-fee' | 'broker-fee', required
        - `earningCondition` 'occurrence-date' | 'fund-close' | 'initial-investment', required: Whether the provider earns the fee on its occurrence date or only when the fund closes.
        - `displayName` string, nullable, required
        - `percentage` number, nullable, required: Configured fraction, e.g. 0.02 means 2%; null for a fixed amount.
        - `amount` number, nullable, required
        - `basisAmountOverride` number, nullable, required
        - `quotedFrequency` 'one-time' | 'quarterly' | 'annually', required: Frequency of the quoted percentage or amount; does not itself determine ledger accrual timing.
        - `accrualType` 'upfront' | 'periodic' | 'at-exit', required
        - `accrualFrequency` 'quarterly' | 'annually', nullable, required
        - `isRefundable` boolean, required
        - `collectionMethod` 'from-invested-capital' | 'from-net-commitment' | 'from-gross-commitment' | 'from-proceeds' | 'from-fee-capital-call' | 'from-fee-capital-call-on-gross', required
        - `fromYear` integer, required
        - `toYear` integer, nullable, required
        - `note` string, nullable, required
        - `currencyCode` string, required: Currency code for monetary amounts; amounts are major units, not cents.
        - `hurdles` object[], required
          - `carryRate` number, required
          - `threshold` number, required: IRR as a fraction or MOIC as a multiple, according to metric.
          - `metric` 'net-moic' | 'net-irr' | 'gross-moic' | 'gross-irr', required
          - `withinWindowInMonths` integer, nullable, required
          - `catchUpRate` number, nullable, required
          - `prefCompounding` 'annual' | 'simple', nullable, required
      - `fundClassFeeTerms` object[], required: Applicable class pools after commitment exclusions; amounts must not be summed as individual LP charges.
        - `id` string, required
        - `feeType` 'admin-fee' | 'management-fee' | 'carried-interest' | 'escrow-fee' | 'fund-cost' | 'deferral-fee' | 'broker-fee', required
        - `poolAmount` number, required: Whole fund-class pool amount, not this investor’s allocated share.
        - `currencyCode` string, required: Currency code for monetary amounts; amounts are major units, not cents.
        - `allocation` 'pro-rata', required
        - `treatment` 'fee-pool' | 'standalone-expense', required
        - `recognitionModel` 'fixed-fee' | 'refundable-reserve', required
        - `isIncludedInSubscription` boolean, required
        - `note` string, nullable, required
    - `taxDocuments` object[], required
      - `fundLegalName` string, required
      - `taxYear` integer, required
      - `fileName` string, required
      - `createdAt` string, date-time, required
    - `pendingSignatures` object[], required
      - `fundLegalName` string, required
      - `purpose` string, required
      - `createdAt` string, date-time, required
    - `unpaidCapitalCalls` object[], required
      - `fundLegalName` string, required
      - `amount` number, required
      - `dueDate` string, date-time, nullable, required
      - `emailSentAt` string, date-time, nullable, required
    - `holdings` object[], required
      - `type` 'fund-interest', required
      - `status` 'active' | 'pending-subscription', required
      - `fundLegalName` string, required
      - `fundClassName` string, nullable, required
      - `holderEntityName` string, nullable, required
      - `featuredPortfolioCompanies` object[], required
        - `name` string, nullable, required
        - `logoUrl` string, nullable, required
        - `sourceId` string, nullable, required
      - `entryPrice` number, required: Funded gross cost basis of the holding, not company share price.
      - `entryDate` string, date-time, nullable, required
      - `numUnits` number, nullable, required
      - `unitPrice` number, nullable, required: Price of a fund unit. For company share entry pricing use GET /api/v2/funds.
      - `grossValue` number, required
      - `distributionsReceived` number, required: Total cash returned: capitalReturnedReceived + netDistributionsReceived + saleProceedsReceived.
      - `totalGrowthAmount` number, required
      - `totalGrowthPercent` number, nullable, required
      - `irr` number, nullable, required
      - `isActive` boolean, required
      - `endedAt` string, date-time, nullable, required
      - `id` string, required: hld_<uuid>, backed by a commitment or transfer according to holdingType.
      - `holdingType` 'commitment' | 'transfer', required
      - `commitmentId` string, nullable, required
      - `fundId` string, required
      - `holderEntityId` string, required
      - `fundCurrencyCode` string, required: Currency code for monetary amounts; amounts are major units, not cents.
      - `holderEntityType` 'natural-person' | 'limited-partnership' | 'limited-company' | 'corporation' | 'individual-retirement-account' | 'revocable-or-single-owner-grantor-trust' | 'irrevocable-or-non-grantor-trust' | 'revocable-or-multi-owner-grantor-trust', nullable, required
      - `valuationDate` string, date-time, required
      - `valuationBasis` 'fund_reported' | 'manual' | 'gross_cost', required
      - `usesGrossCostBasis` boolean, required
      - `capitalReturnedReceived` number, required: Refunds of excess capital, separate from investment distributions.
      - `netDistributionsReceived` number, required
      - `saleProceedsReceived` number, required
      - `netCashGain` number, nullable, required
    - `holdingsSummary` object, required
      - `totalEntryPrice` number, required
      - `totalGrossValue` number, required
      - `totalDistributionsReceived` number, required
      - `totalGrowthAmount` number, required
      - `totalGrowthPercent` number, nullable, required
      - `weightedIrr` number, nullable, required: Portfolio money-weighted XIRR, despite the legacy field name; a fraction, not a percentage number.
      - `totalCapitalReturnedReceived` number, required

## Other responses

- `400`: INVALID_PARAMS: missing or invalid email, fund identifier or query parameters.
- `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_PORTFOLIO_DATA or FUND_NOT_FOUND: the account, portfolio or requested fund is not visible in the key’s team.
- `429`: RATE_LIMIT_EXCEEDED: respect Retry-After before retrying.
- `500`: INTERNAL_ERROR: unexpected server error.

## Changes

- **2026-10-19** `b99bb24f107d`: 2 warning
  - added the new `from-invested-capital` enum value to the `data/commitments/items/feeTerms/items/collectionMethod` response property for the response status `200`
  - added the new `initial-investment` enum value to the `data/commitments/items/feeTerms/items/earningCondition` response property for the response status `200`

[Operation history](https://skmtc.dev/capitalcompany/apis/capital-company-external-api/changes/api/v2/lp/portfolio/get.md)

---

[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)
