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?
GET /v1/properties/:id to fetch a single property with full details including custom fields, photos, and amenities.List properties
/v1/propertiescurl "https://api.repull.dev/v1/properties?limit=20&status=ACTIVE" \ -H "Authorization: Bearer sk_test_YOUR_KEY" # Only properties published on Booking.com curl "https://api.repull.dev/v1/properties?channel=booking" \ -H "Authorization: Bearer sk_test_YOUR_KEY"
Query parameters
limitintegerDefault: 50Maximum number of results to return.
offsetintegerDefault: 0Number of results to skip for pagination.
statusstringFilter by property status.
ACTIVE INACTIVE DRAFTchannelstringFilter to properties published on that OTA. Omit for all.
airbnb booking vrboResponse 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",
"channels": ["airbnb", "booking"],
"createdAt": "2026-01-15T10:00:00Z"
}
],
"pagination": {
"total": 12,
"limit": 50,
"offset": 0,
"hasMore": false
}
}Response fields
idstringUnique property identifier.
namestringInternal property name.
publicNamestringGuest-facing display name.
statusstringCurrent status: ACTIVE, INACTIVE, or DRAFT.
addressobjectProperty address.
locationobjectGeographic coordinates.
bedroomsintegerNumber of bedrooms.
bathroomsintegerNumber of bathrooms.
maxGuestsintegerMaximum occupancy.
thumbnailstringnullableURL of the primary listing photo.
currencystringDefault currency for this property (ISO 4217).
channelsstring[]The OTAs this property is currently published on (e.g. airbnb, booking, vrbo). Empty if the property is not linked to any channel.
createdAtstringISO 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"
Properties published on a specific OTA
curl "https://api.repull.dev/v1/properties?channel=booking" \ -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.