> ## Documentation Index
> Fetch the complete documentation index at: https://tatallo-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Property discovery on staging

> Walk every property connected to your PMS, read one, and see why another one is a 404.

This guide builds the mapping step of an integration: find every Tatallo property your hosts have connected to your PMS, so you can store each `id` next to your own listing. It runs on staging, where the fixture properties match these examples exactly. It uses the variables from the [Quickstart](https://tatallo-docs.mintlify.site/get-started/quickstart.md).

## 1. Walk the whole list

Lists come a page at a time. Ask for a small page to see the cursor at work:

```bash theme={null}
curl -s "$TATALLO_BASE_URL/v1/properties?limit=1" \
  -H "Authorization: Bearer $TATALLO_API_KEY"
```

```json theme={null}
{
  "data": [
    {
      "id": "6cfa992d-1805-4de6-892c-23785031aba0",
      "name": "Fixture Loft Kreuzberg",
      "timezone": "Europe/Berlin",
      "status": "active",
      "country": "Germany",
      "city": "Berlin",
      "max_guests": 2,
      "currency": "EUR",
      "updated_at": "2026-10-01T09:00:00.000Z"
    }
  ],
  "page": {
    "next_cursor": "pKZAA9cXZioUAmmXQVzN4RBwg8cC3KXflLg_Ys2qB0vNw7TfJ1kq3m8cWl5yHh0eE4tR6uD1aPo"
  }
}
```

`page.next_cursor` is not `null`, so there is more. Send it back as `cursor`, exactly as you received it, and repeat until `next_cursor` is `null`:

```bash theme={null}
cursor=""
while :; do
  page=$(curl -s -G "$TATALLO_BASE_URL/v1/properties" \
    -H "Authorization: Bearer $TATALLO_API_KEY" \
    --data-urlencode "limit=100" \
    ${cursor:+--data-urlencode "cursor=$cursor"})
  echo "$page" | jq -r '.data[] | "\(.id)  \(.status)  \(.name)"'
  cursor=$(echo "$page" | jq -r '.page.next_cursor // empty')
  [ -z "$cursor" ] && break
done
```

On staging this prints three properties:

```text theme={null}
6cfa992d-1805-4de6-892c-23785031aba0  active  Fixture Loft Kreuzberg
934f807c-39d6-45de-b107-d5c9e03cb041  inactive  Fixture House Alfama
bef2859f-2444-47ec-b5f4-f1e6701f087f  active  Fixture Apartment Trastevere
```

The order is stable across pages, so walking every page returns each property exactly once. A cursor is opaque and works only with the key and environment that received it: don't store it, and don't build one by hand.

## 2. Read one property

```bash theme={null}
curl -s "$TATALLO_BASE_URL/v1/properties/934f807c-39d6-45de-b107-d5c9e03cb041" \
  -H "Authorization: Bearer $TATALLO_API_KEY"
```

```json theme={null}
{
  "id": "934f807c-39d6-45de-b107-d5c9e03cb041",
  "name": "Fixture House Alfama",
  "timezone": "Europe/Lisbon",
  "status": "inactive",
  "country": "Portugal",
  "city": "Lisbon",
  "max_guests": 6,
  "currency": "EUR",
  "updated_at": "2026-10-01T09:00:00.000Z"
}
```

This one is `inactive`: its host suspended it, so guests cannot book it. It stays in your list, so keep its mapping.

## A property that is not connected to your PMS

The staging fixture host has one more property, `a7591591-4684-4bf6-b66f-4d039414e433`, which is not connected to your PMS:

```bash theme={null}
curl -s "$TATALLO_BASE_URL/v1/properties/a7591591-4684-4bf6-b66f-4d039414e433" \
  -H "Authorization: Bearer $TATALLO_API_KEY"
```

```json theme={null}
{
  "error": {
    "code": "property_not_found",
    "message": "Property not found.",
    "request_id": "385c1118-7082-4e15-97a7-16703f74d58b"
  }
}
```

That is not a bug. A property your PMS may not see answers exactly as a property that does not exist, apart from the `request_id`, so the API reveals nothing about properties outside your connection. The property appears in your list, and reads normally, from the moment its host connects it to your PMS.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.