List Properties

Retrieve your full property catalog from every connected PMS in a single, normalized API call.

When to use this endpoint

  • Sync your property catalog into your own database
  • Build a property picker or search dropdown for a booking widget
  • Populate a calendar view with all available listings
  • Generate a property directory or portfolio page

Need property details?

Use GET /v1/properties/:id to fetch a single property with full details including custom fields, photos, and amenities.

List properties

GET/v1/properties
curl "https://api.repull.dev/v1/properties?limit=20&status=ACTIVE" \
  -H "Authorization: Bearer sk_test_YOUR_KEY"

Query parameters

limitintegerDefault: 50

Maximum number of results to return.

offsetintegerDefault: 0

Number of results to skip for pagination.

statusstring

Filter by property status.

ACTIVE INACTIVE DRAFT

Response format

Returns a paginated array of property objects.

{
  "data": [
    {
      "id": "123",
      "name": "Oceanview Villa",
      "publicName": "Stunning Oceanview Villa",
      "status": "ACTIVE",
      "address": {
        "line1": "123 Beach Rd",
        "city": "Malibu",
        "state": "CA",
        "country": "US",
        "postalCode": "90265"
      },
      "location": {
        "latitude": 34.025,
        "longitude": -118.779
      },
      "bedrooms": 3,
      "bathrooms": 2,
      "maxGuests": 8,
      "thumbnail": "https://images.example.com/villa-123.jpg",
      "currency": "USD",
      "createdAt": "2026-01-15T10:00:00Z"
    }
  ],
  "pagination": {
    "total": 12,
    "limit": 50,
    "offset": 0,
    "hasMore": false
  }
}

Response fields

idstring

Unique property identifier.

namestring

Internal property name.

publicNamestring

Guest-facing display name.

statusstring

Current status: ACTIVE, INACTIVE, or DRAFT.

addressobject

Property address.

locationobject

Geographic coordinates.

bedroomsinteger

Number of bedrooms.

bathroomsinteger

Number of bathrooms.

maxGuestsinteger

Maximum occupancy.

thumbnailstringnullable

URL of the primary listing photo.

currencystring

Default currency for this property (ISO 4217).

createdAtstring

ISO 8601 timestamp when the property was created.

Filtering examples

Active properties only

curl "https://api.repull.dev/v1/properties?status=ACTIVE" \
  -H "Authorization: Bearer sk_test_YOUR_KEY"

Paginate through all properties

curl "https://api.repull.dev/v1/properties?limit=10&offset=10" \
  -H "Authorization: Bearer sk_test_YOUR_KEY"

Pagination

Results are paginated using limit and offset. The response includes a pagination object with the total count and whether more results exist.

// Page through all properties
let offset = 0;
const limit = 20;
let hasMore = true;

while (hasMore) {
  const { data, pagination } = await repull.properties.list({ limit, offset });

  for (const property of data) {
    await syncProperty(property);
  }

  hasMore = pagination.hasMore;
  offset += limit;
}

API Reference

See the complete Properties API Reference for all endpoints including get, create, and update.

AI