---
title: "Public property preview — no key required"
method: GET
path: "/properties/{property_id}/preview"
---

# Public property preview — no key required

`GET /properties/{property_id}/preview`

## Request

- Base URL: `https://api.b2a.bluepillow.com/v1`
- URL: `https://api.b2a.bluepillow.com/v1/properties/{property_id}/preview`
- Auth: none required

Unauthenticated, cacheable preview of a single property: the landing target of the per-property `rel=alternate` links published on bluepillow.com, and the most-fetched surface of this API. An agent following one of those links must never hit an authentication wall, so this endpoint answers without a key and returns a lean static record — identity, rating, star class, operator coverage, thumbnail and web URL — plus a machine-readable `upgrade` block describing how to reach the full toolset. Deliberately NO prices and NO availability: live data belongs to the authenticated tier, and the `upgrade` block says so explicitly. Rate limits are per IP and unauthenticated: 120 requests/minute (240 for recognized crawlers) and 60000/day. A 429 carries `Retry-After` and the same upgrade pitch — an authenticated key raises the ceiling to 60000/day.

## Path parameters

- `property_id` string, required

## Query parameters

- `src` string

## Response `200`

Preview record. Cache-Control is public, max-age=3600; the server also caches upstream for 6 hours, so two fetches of the same property within the window are identical.

- object
  - `id` string, required
  - `name` string, required
  - `property_type` string, required
  - `rating` number, nullable: 0-5 scale, coarse in practice (upstream scores arrive rounded). Read it together with rating_count.
  - `rating_count` integer, nullable
  - `stars` integer, nullable
  - `ota_coverage` OTA[]
  - `thumbnail_url` string, uri, nullable
  - `web_url` string, uri, nullable
  - `location` object, required: City and country only — the preview is not a geocoder.
    - `city` string, nullable
    - `country` string, nullable
  - `upgrade` object, required: Machine-readable on-ramp to the authenticated tier: what the key unlocks, how to get one, and the MCP endpoint with a concrete next call for this very property.
    - `what` string
    - `how` string
    - `get_key` string, uri
    - `docs` string, uri
    - `mcp` object
      - `endpoint` string, uri
      - `transport` string
      - `hint` string
      - `this_property` string
      - `discovery` string, uri

## Other responses

- `404`: Property not found, or its record is not renderable as a preview. Both cases answer 404 by design: this endpoint is judged by crawlers, and a 500 on degenerate data would be worse than a clean miss.
- `429`: Unauthenticated per-IP limit reached (minute burst or daily cap). Carries Retry-After and an `upgrade` hint in the body.

---

[API](https://skmtc.dev/bluepillow/apis/b2a-api.md) · [All operations](https://skmtc.dev/bluepillow/apis/b2a-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bluepillow/apis/b2a-api/revisions/1dfd82be92b6?raw)
