---
title: "Get owner portfolio summary"
method: GET
path: "/api/v1/owners/{name}/portfolio"
tags: ["Owners"]
---

# Get owner portfolio summary

`GET /api/v1/owners/{name}/portfolio`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/owners/{name}/portfolio`
- Auth: HTTP bearer

Retrieve an owner's portfolio with aggregated summary statistics and property breakdown.

## Path parameters

- `name` string, required

## Response `200`

Owner portfolio returned.

- object
  - `owner_name` string, required
  - `properties` object[], required
    - `parcel_id` string, required
    - `county_fips` string, required
    - `state_fips` string, required
    - `address` string, nullable, required
    - `city` string, nullable, required
    - `state` string, nullable, required
    - `zip` string, nullable, required
    - `latitude` number, nullable, required
    - `longitude` number, nullable, required
    - `owner_name` string, nullable, required
    - `total_assessed_value` number, nullable, required
    - `land_assessed_value` number, nullable, required
    - `improvement_assessed_value` number, nullable, required
    - `lot_size_acres` number, nullable, required
    - `building_sqft` number, nullable, required
    - `year_built` integer, nullable, required
    - `zoning` string, nullable, required
    - `zoning_code_raw` string, nullable, required
    - `last_sale_date` string, nullable, required
    - `last_sale_price` number, nullable, required
    - `property_type` string, nullable, required
    - `match_basis` string, required
    - `match_confidence` string, nullable, required
    - `owner_roles` unknown[], required
      - unknown
    - `fanout` object: Present only on a row that heads a NY-style fan-out family (one parcel filed under several county FIPS, #552). `record_basis` is `home_county` (the row's point lies in its own county box) or `possible_fanout_copy` (no home row was in the result; `likely_county` names the county the point falls in). `copies_suppressed`, their county FIPS and ids list every copy folded onto this row. Served county_fips and values are never rewritten; a copy's sale price equal to its assessed value is listed under `value_flags` with the raw value.
  - `summary` object, required
    - `count` integer, required
    - `returned` number, required
    - `limit` integer, required
    - `offset` integer, required
    - `truncated` boolean, required
    - `total_value` integer, required
    - `total_acreage` number, required
    - `states` number[], required
    - `by_state` object[], required
      - `state` string, nullable, required
      - `state_fips` string, required
      - `abbr` string, nullable, required
      - `count` integer, nullable, required
      - `total_value` integer, nullable, required
      - `total_acreage` number, nullable, required
      - `fanout_copies_suppressed` integer
    - `property_count` integer
    - `total_assessed_value` number
    - `avg_assessed_value` number
    - `counties` integer
    - `zoning_breakdown` object
    - `count_basis` string: Present when copies were collapsed: what `count` counts (distinct parcels per state, county, parcel_id).
    - `fanout_copies_suppressed` integer: Fan-out copies left out of count / total_value / total_acreage.
    - `count_including_fanout_copies` integer: The same figure over rows as read, before fan-out copies were collapsed.
    - `total_value_including_fanout_copies` integer: The same figure over rows as read, before fan-out copies were collapsed.
    - `total_acreage_including_fanout_copies` number: The same figure over rows as read, before fan-out copies were collapsed.
    - `returned_rows_including_fanout_copies` integer: The same figure over rows as read, before fan-out copies were collapsed.
  - `match` object, required
    - `method` string, required
    - `confidence` string, required
    - `verified_corporate_link` boolean, required
    - `basis_counts` object, required
      - `exact_spelling` number, required
      - `variant` number, required
      - `ticker_curated` number, required
    - `basis_counts_scope` string, required
    - `note` string, required
  - `entity_type` 'individual' | 'corporation' | 'llc' | 'trust' | 'government' | 'other'
  - `fanout_collapse` object: Present only when fan-out copies were collapsed (#552): the number of copies suppressed, the families and `complete`; `complete: false` with `copies_suppressed: null` when the check could not run (the totals then include any copies). The witness is the county extent table (county_bbox.json), never the served county_fips.

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `404`: The resource (or the endpoint) does not exist.
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.

---

[API](https://skmtc.dev/propraven/apis/propraven-api.md) · [All operations](https://skmtc.dev/propraven/apis/propraven-api/llms.txt) · [OpenAPI document](https://skmtc.dev/propraven/apis/propraven-api/revisions/37f8158c4eda?raw)
