---
title: "Get property details by ID or APN"
method: GET
path: "/v3/property/{property_id}"
tags: ["Property V3"]
---

# Get property details by ID or APN

`GET /v3/property/{property_id}`

## Request

- Base URL: `https://api.whitepages.com`
- URL: `https://api.whitepages.com/v3/property/{property_id}`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/whitepages/apis/whitepages-api-reference/docs/v3/property/:property_id/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieve a property by property ID, address ID, or APN.

Returns the full record: physical characteristics, tax assessment,
ownership with owners split by entity class, mortgage history, and
current residents.

The identifier's shape selects the lookup. A Whitepages property or
address identifier is unique, so each resolves to one property or to
a 404. An APN belongs to a county assessor and is unique only within
that county, so it can name several properties: that returns a 409
listing the candidates, each with the property_id to look up.

## Path parameters

- `property_id` string, required: Whitepages property identifier (capital 'R' prefix), address identifier (capital 'A' prefix), or Assessor's Parcel Number. Whitepages identifiers are 11 characters; anything else is read as an APN. Percent-encode an APN that contains characters reserved in a URL path.

## Response `200`

Property details retrieved successfully

- DetailResponseDtoPropertyDetailsV3Dto
  - `result` PropertyDetailsV3Dto, required: Full property record returned by the v3 details endpoint.
    - `property_id` string, required: Unique property identifier
    - `address_id` string, nullable: Unique address identifier
    - `apn` string, nullable: Assessor's Parcel Number. Unique within a county rather than nationally
    - `property_address` PropertyAddressV3Dto, required: A property's address, where it has one. Every part is nullable, because a property is not always something with a street address. The next data release publishes about 28 million parcels identified by parcel number and county instead: a house number appears on 1% of them, and a street, city, or ZIP on roughly half. The state is nullable too. The release notes guarantee a parcel number and a county on every property and never make that claim about the state, and a field required on an unverified guarantee is the one that fails on the release that breaks it. Requiring those parts is what keeps those properties out of the API today. Nullable costs a caller a null check; required costs everyone a breaking change on the release that loosens it, which is why it is settled now rather than when the data lands.
      - `full_address` string, nullable: Complete formatted address string. `null` for a property with no street address
      - `line1` string, nullable: Street address line (house number and street)
      - `city` string, nullable: City name
      - `state` string, nullable: Two-letter state code
      - `zip` string, nullable: 5-digit ZIP code
      - `house` string, nullable: House or building number
      - `street` string, nullable: Street name
      - `street_type` string, nullable: Street suffix (St, Ave, Blvd, etc.)
      - `county` string, nullable: County name
    - `mailing_address` PropertyAddressV3Dto: A property's address, where it has one. Every part is nullable, because a property is not always something with a street address. The next data release publishes about 28 million parcels identified by parcel number and county instead: a house number appears on 1% of them, and a street, city, or ZIP on roughly half. The state is nullable too. The release notes guarantee a parcel number and a county on every property and never make that claim about the state, and a field required on an unverified guarantee is the one that fails on the release that breaks it. Requiring those parts is what keeps those properties out of the API today. Nullable costs a caller a null check; required costs everyone a breaking change on the release that loosens it, which is why it is settled now rather than when the data lands.
      - `full_address` string, nullable: Complete formatted address string. `null` for a property with no street address
      - `line1` string, nullable: Street address line (house number and street)
      - `city` string, nullable: City name
      - `state` string, nullable: Two-letter state code
      - `zip` string, nullable: 5-digit ZIP code
      - `house` string, nullable: House or building number
      - `street` string, nullable: Street name
      - `street_type` string, nullable: Street suffix (St, Ave, Blvd, etc.)
      - `county` string, nullable: County name
    - `geolocation` GeolocationDto: Geographic coordinates.
      - `lat` number, required: Latitude coordinate
      - `lng` number, required: Longitude coordinate
    - `property_purpose` string, nullable: What the property is used for. Observed values: Amusement, Apartment, Commercial, CondoCommercial, CondoResidential, DuplexTripexQuadplex, Exempt, Financial, Hospital, HotelMotal, Industrial, Office, Parking, Retail, Service, SingleFamilyOrTownhouse, Transport, Vacant, Warehouse. Upstream owns this value space and may send others as the data expands, so match on the values you handle and treat anything else as unrecognized rather than invalid.
    - `owner_occupied` string, nullable: Whether the owner lives at the property. Observed values: AbsenteeOwner, OwnerOccupied, Unknown. Upstream owns this value space and may send others as the data expands, so match on the values you handle and treat anything else as unrecognized rather than invalid.
    - `is_vacant` boolean, nullable: Whether the property is currently vacant
    - `year_built` integer, nullable: Year the property was originally built
    - `effective_year_built` integer, nullable: Year built adjusted for major renovations
    - `living_sqft` integer, nullable: Livable square footage
    - `lot_sqft` integer, nullable: Total lot size in square feet
    - `ground_floor_sqft` integer, nullable: Ground floor square footage
    - `basement_sqft` integer, nullable: Basement square footage
    - `basement_type` string, nullable: Basement type (full, partial, none)
    - `stories` integer, nullable: Number of stories
    - `bedrooms` integer, nullable: Number of bedrooms
    - `bathrooms` integer, nullable: Number of bathrooms
    - `has_pool` boolean, nullable: Whether the property has a pool
    - `garage_type` string, nullable: Garage type such as attached or carport
    - `roof_covering` string, nullable: Roof material type
    - `heating_fuel` string, nullable: Primary heating fuel type
    - `condition` string, nullable: Overall property condition
    - `build_quality` string, nullable: Construction quality rating
    - `ownership_info` OwnershipInfoV3Dto: Who owns the property, and the terms the ownership was acquired on. Owners are split by entity class rather than collected into one array. A class the data release adds later arrives as a new named field, which is additive, where a new member of a shared array would not be.
      - `owner_type` string, nullable: Ownership class recorded for the property. A value naming a class with no matching owners field is how a caller learns an owner exists that this version does not break out. Observed values: Business, Individual. Upstream owns this value space and may send others as the data expands, so match on the values you handle and treat anything else as unrecognized rather than invalid.
      - `person_owners` PersonOwnerV3Dto[]: Individuals who own the property
        - `id` string, required: Unique person identifier
        - `name` string, required: Full name
        - `age` integer, nullable: Age in years
        - `current_addresses` AddressDto[]: Addresses the person currently lives at
          - `address_id` string, required: Unique address identifier
          - `full_address` string, required: Complete formatted address string
          - `city` string, required: City name
          - `state` string, required: Two-letter state code
          - `line1` string, required: Street address line (house number and street)
          - `zip` string, required: 5-digit ZIP code
        - `phones` PhoneNumber[]: Phone numbers linked to the person
          - `number` string, required
          - `type` 'mobile' | 'landline' | 'voip' | 'tollfree' | 'unknown', required: Enumeration of supported phone number types.
          - `score` integer, nullable, required: Confidence score 0-100 showing how strongly this phone is linked to the person. Higher scores mean a stronger match.
        - `emails` PersonEmailDto[]: Email addresses linked to the person
          - `email` string, required: Email address
          - `score` integer, nullable: Confidence score 0-100 showing how strongly this email is linked to the person. Higher scores mean a stronger match.
        - `company_name` string, nullable: Employer name
        - `job_title` string, nullable: Job title
        - `result_metadata` PersonResultMetadataV3Dto: Per-person metadata: details link and displayed-vs-additional counts.
          - `details_url` string, nullable: Canonical Person Details URL for this person, or `null` when the record has no canonical Whitepages person id
          - `phones` ListCountDto, required: Displayed-vs-additional count for one list on a search result.
            - `displayed` integer, required: Number of items returned in this list on this response
            - `additional` integer, required: Count of items linked to the person but not included in the response (i.e. upstream_total minus displayed)
          - `emails` ListCountDto, required: Displayed-vs-additional count for one list on a search result.
            - `displayed` integer, required: Number of items returned in this list on this response
            - `additional` integer, required: Count of items linked to the person but not included in the response (i.e. upstream_total minus displayed)
      - `business_owners` BusinessOwnerV3Dto[]: Business entities that own the property
        - `name` string, required: Business entity name
      - `sale_date` string, nullable: Date the property last changed hands
      - `last_sale_amount` integer, nullable: Amount the property last sold for
      - `mortgages` MortgageDto[], nullable: Mortgages recorded against the property. `null` on search results; populated on details
        - `amount` integer, nullable: Mortgage principal amount in USD
        - `date` string, nullable: Mortgage origination date (YYYY-MM-DD)
        - `due_date` string, nullable: Mortgage maturity date (YYYY-MM-DD)
        - `term` integer, nullable: Mortgage term in months
        - `rate` number, nullable: Interest rate as percentage
        - `rate_type` string, nullable: Rate type (fixed, adjustable)
    - `residents` ResidentV3Dto[]: People currently living at the property
      - `id` string, required: Unique person identifier
      - `name` string, required: Full name
      - `age` integer, nullable: Age in years
      - `current_addresses` AddressDto[]: Addresses the person currently lives at
        - `address_id` string, required: Unique address identifier
        - `full_address` string, required: Complete formatted address string
        - `city` string, required: City name
        - `state` string, required: Two-letter state code
        - `line1` string, required: Street address line (house number and street)
        - `zip` string, required: 5-digit ZIP code
      - `phones` PhoneNumber[]: Phone numbers linked to the person
        - `number` string, required
        - `type` 'mobile' | 'landline' | 'voip' | 'tollfree' | 'unknown', required: Enumeration of supported phone number types.
        - `score` integer, nullable, required: Confidence score 0-100 showing how strongly this phone is linked to the person. Higher scores mean a stronger match.
      - `emails` PersonEmailDto[]: Email addresses linked to the person
        - `email` string, required: Email address
        - `score` integer, nullable: Confidence score 0-100 showing how strongly this email is linked to the person. Higher scores mean a stronger match.
      - `company_name` string, nullable: Employer name
      - `job_title` string, nullable: Job title
      - `result_metadata` PersonResultMetadataV3Dto: Per-person metadata: details link and displayed-vs-additional counts.
        - `details_url` string, nullable: Canonical Person Details URL for this person, or `null` when the record has no canonical Whitepages person id
        - `phones` ListCountDto, required: Displayed-vs-additional count for one list on a search result.
          - `displayed` integer, required: Number of items returned in this list on this response
          - `additional` integer, required: Count of items linked to the person but not included in the response (i.e. upstream_total minus displayed)
        - `emails` ListCountDto, required: Displayed-vs-additional count for one list on a search result.
          - `displayed` integer, required: Number of items returned in this list on this response
          - `additional` integer, required: Count of items linked to the person but not included in the response (i.e. upstream_total minus displayed)
    - `assessed_info` AssessedInfoDto: Property tax assessment information.
      - `market_value` integer, nullable: Estimated market value in USD
      - `assessed_value` integer, nullable: Tax-assessed value in USD
      - `property_tax_amount` number, nullable: Annual property tax amount in USD
      - `property_tax_percent` number, nullable: Effective property tax rate as percentage

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `422`: Unprocessable Content
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-10-23** `e2dc46cff897`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/whitepages/apis/whitepages-api-reference/changes/v3/property/:property_id/get.md)

---

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