---
title: "Look up properties by external system ID"
method: GET
path: "/v2/properties/lookup"
tags: ["Properties v2"]
---

# Look up properties by external system ID

`GET /v2/properties/lookup`

Resolves a partner system's property id (e.g. RentCafe, Entrata, Knock) to the Elise properties that match. 
                   For `RentCafe`, `external_id` must be numeric and is matched against the building's pricing/availability source;
                   other systems match against the building's external CRM id scoped to that configured source. 
                   Results are filtered to production buildings (active, launched, non-test) with test-named buildings sorted last; 
                   buildings outside your access scope are silently dropped, and the endpoint returns 404 if nothing remains.

## Query parameters

- `system` 'RentCafe' | 'YardiVoyager' | 'Entrata' | 'ResMan' | 'RealPage' | 'AppFolio' | 'Knock' | 'Funnel', required — External systems accepted by the property-lookup endpoint. Lookup paths: * `RentCafe` — matched against `building_pricing_avails_config.source_specific_config['RentCafe'].rent_cafe_property_ids` (used by Yardi syndication partners that only know the RentCafe property id). * `YardiVoyager`, `Entrata`, `ResMan`, `RealPage`, `AppFolio` — matched against the union of two paths: - `building_details.external_crm_id` → filtered to candidates whose effective CRM (`get_crm_setup`) matches the requested system. For `YardiVoyager` the CRM-side identity is `RentCafe` (Yardi's leasing front-end); for `RealPage` it is `ILM`. - `building_details.external_ids` (text[]) → filtered to candidates whose effective PMS (`get_pms_setup`) matches the requested system. * `Knock`, `Funnel` — CRM-only systems. Matched against `building_details.external_crm_id` and filtered by effective CRM type (no PMS-side lookup is performed for these).
- `external_id` string, required — The external system's identifier for the property

## Response `200`

Successful Response

- PropertyLookupListResponse — Wrapper around the list of properties returned by the lookup endpoint. The lookup endpoint may resolve to more than one Elise building when partners have onboarding overlap (e.g. a property migrated mid-integration). Buildings are filtered to production-only (active + launched + non-test management company) and ordered with test-named buildings last.
  - `properties` PropertyLookupResponse[], required — Properties matching the (system, external_id) pair. Non-test names first, test-named buildings last.
    - `id` string, required — Unique identifier for the property
    - `name` string, required — Property name for display
    - `property_type` 'multi_family' | 'single_family' | 'other', required — Types of properties managed in the system
    - `status` 'active' | 'inactive', required — Current operational status of the property
    - `address` Address, required — Physical address for a property. Structured address components support accurate geocoding and utility provider matching for billing integrations.
      - `street_address` string, required — Street number and name
      - `unit_number` string — Unit/suite/apartment number if applicable
      - `city` string, required — City name
      - `state` string, required — State or province code
      - `postal_code` string, required — ZIP or postal code
      - `country` string — ISO 3166-1 alpha-2 country code
    - `total_units` integer — Total number of units in the property
    - `organization_id` string — Organization ID for the property
    - `has_phases` boolean — Whether the entities list contains a SUB_PROPERTY entity
    - `entities` PropertyEntity[] — Active PROPERTY and SUB_PROPERTY GL Catalog entities for this property
      - `id` string, required — Unique identifier for the entity
      - `name` string, required — Entity display name
      - `type` 'PROPERTY' | 'SUB_PROPERTY', required — An enumeration.
      - `building_ids` string[] — Building IDs grouped under this entity
    - `ils_email` string — ILS lead email address for this property

## Other responses

- `400` — Bad request - invalid parameters
- `401` — Unauthorized - invalid or missing API key
- `403` — Forbidden - insufficient permissions
- `404` — Not found - resource doesn't exist
- `422` — Unprocessable entity - validation error
- `500` — Internal server error
- `501` — Not implemented
- `503` — Property entity topology is temporarily unavailable

---

[API](https://skmtc.net/eliseai/apis/elise-api.md) · [All operations](https://skmtc.net/eliseai/apis/elise-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/eliseai/elise-api/versions/76923ba6f67c/schema)
