# Property content

The content surface is your catalogue source: property headers, hero photos, and per-room detail. It is read-only and is **not** metered, so you can sync and refresh as often as you need. Both endpoints require the `distribution:read` scope.

The recommended pattern is **cache locally, then refresh by delta** — pull the full catalogue once, persist it, and on each subsequent sync ask only for what changed.

## List properties

```
GET /api/v1/properties
```

Returns a page of property summaries for your tenant, ordered by `content_updated_at` ascending (oldest-changed first within the window).

### Query parameters

| Parameter       | Type             | Default | Notes                                                                                                                           |
| --------------- | ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `page`          | integer          | `1`     | 1-based page index.                                                                                                             |
| `limit`         | integer          | `50`    | Page size, 1–200. Clamped to the server maximum.                                                                                |
| `updated_since` | RFC 3339 instant | —       | When present, returns only properties whose `content_updated_at` is strictly greater than this value. This is the delta cursor. |

### Example

```bash
curl -s \
  'https://ari.console.adrasis.com/api/v1/properties?limit=50' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'
```

```json
{
  "properties": [
    {
      "public_id": "7gQ2kPa9",
      "name": "Grand Bosphorus Hotel",
      "slug": "grand-bosphorus-hotel",
      "star_rating": 5,
      "country_code": "TR",
      "city_id": 34,
      "latitude": "41.0082",
      "longitude": "28.9784",
      "address": "Sultanahmet, Istanbul",
      "currency_code": "TRY",
      "timezone_iana": "Europe/Istanbul",
      "content_updated_at": "2026-06-01T08:30:00Z"
    }
  ],
  "pagination": { "page": 1, "limit": 50, "has_more": true }
}
```

### Paging

`pagination.has_more` is `true` when a following page exists. It is computed without a count, so do not rely on a total — page forward until `has_more` is `false`:

```bash
# page 1
curl -s 'https://ari.console.adrasis.com/api/v1/properties?page=1&limit=200' ...
# page 2 (only if has_more was true)
curl -s 'https://ari.console.adrasis.com/api/v1/properties?page=2&limit=200' ...
```

## Get one property

```
GET /api/v1/properties/{public_id}
```

Returns the full content document for one property: the summary header, the hero photo URLs, and the per-room catalogue.

### Query parameters

| Parameter | Type       | Notes                                                                                                                               |
| --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `locale`  | BCP 47 tag | Resolves room display names to this language (e.g. `tr-TR`). Falls back to the default locale (`en`) when a translation is missing. |

### Example

```bash
curl -s \
  'https://ari.console.adrasis.com/api/v1/properties/7gQ2kPa9?locale=tr-TR' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'
```

```json
{
  "property": {
    "public_id": "7gQ2kPa9",
    "name": "Grand Bosphorus Hotel",
    "star_rating": 5,
    "country_code": "TR",
    "currency_code": "TRY",
    "timezone_iana": "Europe/Istanbul",
    "content_updated_at": "2026-06-01T08:30:00Z",
    "primary_photo_url": "https://cdn.adrasis.com/media/hero.jpg",
    "primary_photo_medium_url": "https://cdn.adrasis.com/media/hero_medium.jpg",
    "rooms": [
      {
        "public_id": "r3Tz9Lm0",
        "name": "Deluxe Kral Oda",
        "name_locale": {
          "en": "Deluxe King Room",
          "tr-TR": "Deluxe Kral Oda"
        },
        "max_occupancy": 3,
        "max_adults": 2,
        "size_sqm": "28.5",
        "room_count": 12,
        "beds": [{ "bed_category_id": 1, "bed_count": 1 }],
        "primary_photo_url": "https://cdn.adrasis.com/media/abc.jpg"
      }
    ]
  }
}
```

The `name` field is resolved to the requested `locale`. The full `name_locale` map is always returned as well, so you can re-resolve client-side without a second call. A `public_id` that does not resolve under your tenant returns `404`.

## Recommended cache-and-delta-refresh pattern

1. **Initial sync.** Page through `GET /properties` with no `updated_since` until `has_more` is `false`. For each summary, call `GET /properties/{public_id}` to fetch the full document, and persist it.
2. **Record the cursor.** Track the maximum `content_updated_at` you have ingested.
3. **Delta refresh.** On a schedule, call `GET /properties` with `updated_since` set to that stored maximum. Only changed properties come back; fetch the detail for each and update your cache. Advance the stored cursor to the new maximum `content_updated_at`.

This keeps your catalogue current without re-pulling unchanged properties. Because content reads are not metered, the cost of a delta sync is bounded by how much actually changed.

## Next steps

* [The booking flow](/developer/booking-flow.md) — turn catalogue into bookings via `search → prebook → book`.
* [Authentication](/developer/authentication.md) — the `distribution:read` scope these endpoints require.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://adrasis.gitbook.io/developer/property-content.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
