---
title: "Search currently published properties. Use geographicArea for continents/subregions returned by get_filters(kind:geography), countries for an explicit ISO country union, and country/region/city for specific destinations. Filters combine with AND; unknown or hidden facts never satisfy a filter. Use organization with a returned organization.slug for its entire portfolio, or relatedTo with a published property ID for other homes from that organization, same locality first. Optional quoteMode:exact with arrival, departure and guests adds host availability/prices; quoteMode:estimate with explicit flexible bounds, nights and guests adds a labeled sample stay found across up to four near-term/future-month windows (explicit window, nights and guests required). Quote enrichment waits at most 2.5 seconds, may be pending/not_checked/limited, and does not filter or rank homes by availability. Use get_stay_estimate with stayQuote.estimate to finish a flexible sample, or get_stay_quote with stayQuote.request for exact dates. Unknown is not available; a sample is not availability for the traveler's actual dates. Inspect actual currency, completeness, checkedAt and expiresAt. Quotes reserve nothing. Omit quoteMode for pure catalog discovery.Price requests require a supplied party size and stay context. Exact dates use arrival/departure/guests. Flexible travel uses quoteMode:estimate with explicit estimateWindowStart/estimateWindowEnd, estimateNights and guests; resolve a supplied month into bounds and ask only for missing details before requesting or displaying any price. A brief clarification may come before catalog search; budget is optional in the same question. With sufficient inputs, complete bounded shortlisted checks without asking permission. Without these inputs, discover homes without quoteMode and show no prices in cards or prose. Never invent dates, stay length or party size. When price is requested, first inspect already-ready quotes and use displayedPropertyIds to identify the inline cards when supplied. Join pending checks for promising displayed homes before starting not_checked homes or off-screen alternatives, using the returned request or estimate. Make at most three follow-up checks in total; never check every card. A pending search quote can finish independently in the cards, so resolve selected pending checks before giving a budget conclusion. Compare confirmed available, complete stay totals in the requested currency against the budget; do not reject a supported match. When a supported budget match is found, recommend it with any material qualification; omit failed or unchecked alternatives unless a comparison is requested. If no match is confirmed and selected checks remain unresolved, say that briefly rather than claiming no home fits the budget or is available. Make status claims per returned quote evidence; never blanket-label other cards unchecked or unavailable, since they update separately. Inspect terminal ready failures and sample diagnostics internally; briefly state only material unknown price or availability, and stop unchanged retries. Catalog totals count matching published homes, never confirmed available or affordable homes. Sample diagnostic reasons describe attempted stays only, never the whole window."
method: GET
path: "/api/public/v1/properties"
---

# Search currently published properties. Use geographicArea for continents/subregions returned by get_filters(kind:geography), countries for an explicit ISO country union, and country/region/city for specific destinations. Filters combine with AND; unknown or hidden facts never satisfy a filter. Use organization with a returned organization.slug for its entire portfolio, or relatedTo with a published property ID for other homes from that organization, same locality first. Optional quoteMode:exact with arrival, departure and guests adds host availability/prices; quoteMode:estimate with explicit flexible bounds, nights and guests adds a labeled sample stay found across up to four near-term/future-month windows (explicit window, nights and guests required). Quote enrichment waits at most 2.5 seconds, may be pending/not_checked/limited, and does not filter or rank homes by availability. Use get_stay_estimate with stayQuote.estimate to finish a flexible sample, or get_stay_quote with stayQuote.request for exact dates. Unknown is not available; a sample is not availability for the traveler's actual dates. Inspect actual currency, completeness, checkedAt and expiresAt. Quotes reserve nothing. Omit quoteMode for pure catalog discovery.Price requests require a supplied party size and stay context. Exact dates use arrival/departure/guests. Flexible travel uses quoteMode:estimate with explicit estimateWindowStart/estimateWindowEnd, estimateNights and guests; resolve a supplied month into bounds and ask only for missing details before requesting or displaying any price. A brief clarification may come before catalog search; budget is optional in the same question. With sufficient inputs, complete bounded shortlisted checks without asking permission. Without these inputs, discover homes without quoteMode and show no prices in cards or prose. Never invent dates, stay length or party size. When price is requested, first inspect already-ready quotes and use displayedPropertyIds to identify the inline cards when supplied. Join pending checks for promising displayed homes before starting not_checked homes or off-screen alternatives, using the returned request or estimate. Make at most three follow-up checks in total; never check every card. A pending search quote can finish independently in the cards, so resolve selected pending checks before giving a budget conclusion. Compare confirmed available, complete stay totals in the requested currency against the budget; do not reject a supported match. When a supported budget match is found, recommend it with any material qualification; omit failed or unchecked alternatives unless a comparison is requested. If no match is confirmed and selected checks remain unresolved, say that briefly rather than claiming no home fits the budget or is available. Make status claims per returned quote evidence; never blanket-label other cards unchecked or unavailable, since they update separately. Inspect terminal ready failures and sample diagnostics internally; briefly state only material unknown price or availability, and stop unchanged retries. Catalog totals count matching published homes, never confirmed available or affordable homes. Sample diagnostic reasons describe attempted stays only, never the whole window.

`GET /api/public/v1/properties`

## Request

- Base URL: `https://chucho.ai`
- URL: `https://chucho.ai/api/public/v1/properties`
- Auth: none required

## Query parameters

- `locale` 'en' | 'es'
- `quoteMode` 'exact' | 'estimate': Optional price/availability enrichment. exact uses supplied dates and guests; estimate requires estimateWindowStart, estimateWindowEnd, estimateNights and guests for a clearly labeled sample within supplied flexible bounds. Search does not wait for every host or filter unknown homes out.
- `estimateWindowStart` string, date: Earliest sample arrival (YYYY-MM-DD), paired with estimateWindowEnd. Only with quoteMode:estimate. Preserve the traveler's flexible month or date range.
- `estimateWindowEnd` string, date: Latest sample departure (YYYY-MM-DD), paired with estimateWindowStart. Window must fit estimateNights (required), at most 150 days.
- `arrival` string, date
- `departure` string, date
- `currency` 'USD' | 'EUR' | 'GBP' | 'CRC' | 'MXN' | 'COP' | 'PEN' | 'BRL' | 'AUD'
- `estimateNights` integer: Sample-stay nights, required. Only with quoteMode:estimate.
- `organization` string: Exact organization slug returned on a property or in get_filters. Restricts results to that organization, across destinations.
- `relatedTo` string: Published property ID. Find other homes from its organization, same locality first, then region/country and other locations. Excludes the source property. Additional filters still combine with AND.
- `q` string: Search public property names, locations and approved introduction text.
- `semantic` string: Rank indexed, eligible homes by text and photo similarity. Does not establish hard facts; no lexical fallback when unavailable.
- `semanticPreferences` string[]: Individual experiential preferences, each copied verbatim from semantic. Interpret the traveler in context: separate requested preferences without adding needs. Keep related words together when they describe one room, view or relationship. These are questions to assess, not property facts; omit for factual-only searches.
- `place` string: Place key from the live filter catalog.
- `bounds` string: Map viewport as south,west,north,east in degrees; keeps homes whose public area center is inside it. West greater than east crosses the antimeridian.
- `feature` '' | 'private-pools' | 'room-for-4' | 'room-for-6' | 'room-for-8' | 'room-for-10' | '2-bedrooms' | '3-bedrooms' | '4-bedrooms' | 'pets' | 'air-conditioning' | 'workspace' | 'step-free': Collection key from the filter catalog.
- `geographicArea` '' | 'africa' | 'northern-africa' | 'sub-saharan-africa' | 'eastern-africa' | 'middle-africa' | 'southern-africa' | 'western-africa' | 'americas' | 'latin-america-and-the-caribbean' | 'caribbean' | 'central-america' | 'south-america' | 'northern-america' | 'asia' | 'central-asia' | 'eastern-asia' | 'south-eastern-asia' | 'southern-asia' | 'western-asia' | 'europe' | 'eastern-europe' | 'northern-europe' | 'southern-europe' | 'western-europe' | 'oceania' | 'australia-and-new-zealand' | 'melanesia' | 'micronesia' | 'polynesia' | 'north-america': Exact geographic area key from get_filters(kind:geography), including continents and subregions. Americas includes North/Central/South America and the Caribbean. north-america includes Northern America, Central America and Caribbean; northern-america is the narrower UN M49 subregion. Filters by public ISO country/territory code; unknown locations never match. Combines with all other filters using AND.
- `countries` string[]: Explicit union of ISO 3166-1 alpha-2 country/territory codes, e.g. [CR, PA]. A home must match one selected country; combines with geographicArea, country and every other filter using AND. Use available codes from get_filters; never silently substitute a narrower country for an area.
- `country` string
- `region` string
- `city` string
- `accommodationType` '' | 'vacation_rental' | 'boutique_hotel': Filter by reviewed accommodation type. Hotel results represent one establishment; guest count requires a quote for one suitable room, never total hotel capacity.
- `guests` integer: Rental minimum sleeping capacity; for boutique hotels, actual adults for a one-room quote, with occupancy unconfirmed until that quote succeeds.
- `minBedrooms` integer
- `minBathrooms` number
- `amenities` string: Comma-separated amenity keys; every requested amenity must be explicitly present.
- `pool` '' | 'present' | 'private' | 'shared' | 'absent'
- `page` integer

## Response `200`

Current public facts

- object
  - `semantic` object
    - `model` 'voyageai/voyage-multimodal-3.5', required
    - `indexedCount` integer, required
    - `eligibleCount` integer, required
    - `indexedEligibleCount` integer, required
    - `comparison` object
      - `candidateCount` integer, required
      - `assessedCount` integer, required
      - `possibleFitCount` integer, required
      - `poorFitCount` integer, required
      - `unknownCount` integer, required
      - `rejectedCount` integer, required
      - `missingCount` integer, required
    - `matches` object[], required
      - `propertyId` string, required
      - `score` number, required
      - `assessment` object
        - `verdict` 'possible_fit', required
        - `references` object[], required
          - `role` 'fit' | 'contrast', required
          - `text` string, required
          - `evidenceIds` string[], required
          - `scope` 'unit' | 'private_outdoor' | 'shared' | 'any', required
          - `space` 'living' | 'kitchen' | 'dining' | 'bedroom' | 'bathroom' | 'outdoor' | 'pool' | 'other' | 'unknown', required
          - `basis` 'source_claim' | 'observed_visual', required
          - `limitations` string, required
        - `unconfirmedNeeds` string[], required
        - `provisional` true, required
      - `evidence` object[], required
        - `id` string, required
        - `kind` 'text' | 'image', required
        - `url` string, uri, required
        - `quote` string
        - `scope` string, required
      - `limitations` string[], required
    - `limitations` string[], required
  - `organization` object, nullable, required
    - `name` string, required
    - `slug` string, required
    - `canonicalUrl` string, required
  - `relatedTo` string, nullable, required
  - `total` integer, required
  - `page` integer, required
  - `pageSize` integer, required
  - `nextPage` integer, nullable, required
  - `nextUrl` string, nullable, required
  - `properties` object[], required
    - `sourceDescription` object, nullable: Explicitly reviewed original source text in its source language, separate from host-edited or generated facts. Omitted or null when unavailable or hidden.
      - `text` string, required
      - `language` string, nullable, required
      - `sha256` string, required
      - `sourceUrl` string, required
      - `capturedAt` string, required
    - `organization` object, nullable, required
      - `name` string, required
      - `slug` string, required
      - `canonicalUrl` string, required
    - `relatedPropertiesUrl` string, required
    - `id` string, required
    - `slug` string, required
    - `name` string, required
    - `city` string, required
    - `region` string, required
    - `country` string, required
    - `location` object, required
      - `countryCode` string, nullable, required
      - `revision` integer, required
      - `places` object[], required
        - `key` string, required
        - `kind` 'country' | 'region' | 'locality', required
        - `countryCode` string, required
        - `parentKey` string, nullable, required
        - `urlPath` string, required
        - `label` string, required
        - `labelEs` string, required
        - `fullLabel` string, required
        - `fullLabelEs` string, required
        - `center` object, nullable, required
          - `lat` number, required
          - `lng` number, required
    - `facts` object, required
      - `accommodationType` 'vacation_rental' | 'boutique_hotel'
      - `localContent` string[]
      - `capacity` integer
      - `bedrooms` integer
      - `beds` integer
      - `bathrooms` number
      - `description` object
        - `en` string, required
        - `es` string
      - `positioning` object
        - `en` string, required
        - `es` string
      - `constraint` object
        - `en` string, required
        - `es` string
      - `rooms` object[], required
        - `name` object, required
          - `en` string, required
          - `es` string
        - `beds` integer
        - `bedDescription` object
          - `en` string, required
          - `es` string
        - `airConditioning` boolean
        - `bathroom` boolean
      - `amenities` object[], required
        - `key` 'air-conditioning' | 'wifi' | 'workspace' | 'parking' | 'pets' | 'kitchen' | 'washer' | 'step-free', required
        - `present` boolean, required
        - `detail` object
          - `en` string, required
          - `es` string
      - `pool` object
        - `present` boolean, required
        - `privacy` 'private' | 'shared'
        - `fenced` boolean
        - `heated` boolean
        - `detail` object
          - `en` string, required
          - `es` string
      - `connectivity` object
        - `claim` object
          - `en` string, required
          - `es` string
        - `downloadMbps` number
        - `measuredAt` string, date
      - `rules` object
        - `en` string, required
        - `es` string
      - `checkinTime` string
      - `checkoutTime` string
      - `host` object
        - `name` string, required
        - `description` object
          - `en` string, required
          - `es` string
        - `languages` string[], required
      - `photos` object[], required
        - `id` string, uuid, required
        - `caption` object, required
          - `en` string, required
          - `es` string
        - `group` string
        - `publicListing` boolean
      - `faq` object[], required
        - `id` string, uuid, required
        - `question` object, required
          - `en` string, required
          - `es` string
        - `answer` object, required
          - `en` string, required
          - `es` string
    - `photos` object[], required
      - `id` string, required
      - `url` string, required
      - `caption` object, required
        - `en` string, required
        - `es` string
      - `group` string
      - `publicListing` boolean
    - `offerings` object[], required
      - `id` string, required
      - `name` object, required
        - `en` string, required
        - `es` string
      - `description` object, required
        - `en` string, required
        - `es` string
      - `imageUrl` string
      - `source` 'activity' | 'restaurant' | 'grocery' | 'offer', required
    - `bookingUrl` string, required
    - `bookingCapabilities` object
      - `mode` 'request' | 'quote' | 'price' | 'unknown' | 'unsupported', required
      - `verifiedAt` number
      - `expiresAt` number
    - `enquiryUrl` string
    - `canonicalUrl` string, required
    - `markdownUrl` string, required
    - `updatedAt` string, required
    - `revision` integer, required
    - `theme` object, required
    - `stayQuote` union
      - object
        - `basis` 'exact', required
        - `status` 'ready' | 'pending' | 'not_checked' | 'limited', required
        - `request` object, required
          - `id` string, required
          - `arrival` string, date, required
          - `departure` string, date, required
          - `guests` integer, required
          - `currency` 'USD' | 'EUR' | 'GBP' | 'CRC' | 'MXN' | 'COP' | 'PEN' | 'BRL' | 'AUD'
          - `execution` 'auto' | 'browser': Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.
        - `quote` object, nullable, required
          - `propertyId` string, required
          - `arrival` string, date, required
          - `departure` string, date, required
          - `guests` integer, required
          - `nights` integer, required
          - `roomSelection` object
            - `name` string, required
            - `ratePlan` string
            - `rooms` 1, required
            - `averageNightlyPrice` object
              - …
          - `availability` 'available' | 'unavailable' | 'unknown', required
          - `reason` 'checked' | 'blocked_dates' | 'minimum_stay' | 'maximum_stay' | 'arrival_departure_rules' | 'advance_notice' | 'capacity' | 'unsupported_host' | 'browser_unconfigured' | 'upstream_unavailable' | 'date_range_unknown', required
          - `minimumNights` integer, nullable, required
          - `partyBasis` 'all_adults'
          - `price` object, nullable, required
            - `currency` string, required
            - `total` number, required
            - `breakdown` object[], required
              - …
            - `completeness` 'total' | 'partial', required
            - `taxesIncluded` boolean, nullable, required
          - `startingNightlyPrice` object
            - `currency` string, required
            - `amount` number, required
          - `checkedAt` string, date-time, required
          - `expiresAt` string, date-time, required
          - `sourceUrl` string, uri, required
          - `bookingUrl` string, uri, required
          - `held` false, required
      - object
        - `basis` 'sample', required
        - `status` 'ready' | 'pending' | 'not_checked' | 'limited', required
        - `request` object, required
          - `id` string, required
          - `arrival` string, date, required
          - `departure` string, date, required
          - `guests` integer, required
          - `currency` 'USD' | 'EUR' | 'GBP' | 'CRC' | 'MXN' | 'COP' | 'PEN' | 'BRL' | 'AUD'
          - `execution` 'auto' | 'browser': Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.
        - `quote` object, nullable, required
          - `propertyId` string, required
          - `arrival` string, date, required
          - `departure` string, date, required
          - `guests` integer, required
          - `nights` integer, required
          - `roomSelection` object
            - `name` string, required
            - `ratePlan` string
            - `rooms` 1, required
            - `averageNightlyPrice` object
              - …
          - `availability` 'available' | 'unavailable' | 'unknown', required
          - `reason` 'checked' | 'blocked_dates' | 'minimum_stay' | 'maximum_stay' | 'arrival_departure_rules' | 'advance_notice' | 'capacity' | 'unsupported_host' | 'browser_unconfigured' | 'upstream_unavailable' | 'date_range_unknown', required
          - `minimumNights` integer, nullable, required
          - `partyBasis` 'all_adults'
          - `price` object, nullable, required
            - `currency` string, required
            - `total` number, required
            - `breakdown` object[], required
              - …
            - `completeness` 'total' | 'partial', required
            - `taxesIncluded` boolean, nullable, required
          - `startingNightlyPrice` object
            - `currency` string, required
            - `amount` number, required
          - `checkedAt` string, date-time, required
          - `expiresAt` string, date-time, required
          - `sourceUrl` string, uri, required
          - `bookingUrl` string, uri, required
          - `held` false, required
        - `estimate` object, required
          - `id` string, required
          - `windowStart` string, date, required
          - `windowEnd` string, date, required
          - `nights` integer, required
          - `guests` integer, required
          - `currency` 'USD' | 'EUR' | 'GBP' | 'CRC' | 'MXN' | 'COP' | 'PEN' | 'BRL' | 'AUD'
        - `diagnostics` object
          - `attemptedStays` integer, required
          - `reason` 'checked' | 'blocked_dates' | 'minimum_stay' | 'maximum_stay' | 'arrival_departure_rules' | 'advance_notice' | 'capacity' | 'unsupported_host' | 'browser_unconfigured' | 'upstream_unavailable' | 'date_range_unknown': Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.

## Other responses

- `400`: Invalid or unknown filters
- `404`: Property unavailable or unpublished
- `429`: Rate limit; respect Retry-After

---

[API](https://skmtc.dev/chucho/apis/chucho-public-property-discovery.md) · [All operations](https://skmtc.dev/chucho/apis/chucho-public-property-discovery/llms.txt) · [OpenAPI document](https://skmtc.dev/chucho/apis/chucho-public-property-discovery/revisions/b80049fc8cf0?raw)
