Journey Docs
Members APIProperties

Hydrate Properties

Bulk enrichment of property data by property IDs

POST/members/properties/search/hydrate

Overview

Enriches multiple properties with detailed information in a single request. This endpoint is optimized for hydrating property cards with full details including pricing, availability, amenities, and media.

Use this endpoint when you have property IDs from search results and need complete property details for display.

Authentication

Requires a valid Clerk JWT token in the Authorization header.

Request Body

propertyIdsbodyarrayrequired

Array of property IDs to hydrate (maximum 50 properties per request)

datesbodyobject

Check-in and check-out dates for pricing and availability

properties
checkInbodystring

Check-in date (YYYY-MM-DD)

checkOutbodystring

Check-out date (YYYY-MM-DD)

includeAvailabilitybodyboolean

Whether to include real-time availability data (default: false)

includeReviewsbodyboolean

Whether to include review summaries (default: false)

includeMediabodyboolean

Whether to include full media galleries (default: false)

Response

Returns enriched property data for the requested properties.

propertiesarrayrequired

Array of hydrated property objects

property items
idnumberrequired

Property identifier

documentIdstringrequired

Property document identifier

namestringrequired

Property name

descriptionstring

Full property description

brandNamestring

Brand or chain name

typestringrequired

Property type

nightlyCostnumberrequired

Cost per night in points

guestRatingnumber

Average guest rating (1-5 stars)

maxGuestsnumberrequired

Maximum guest capacity

addressobjectrequired

Property location details

address
streetstring

Street address

citystringrequired

City name

statestring

State or region

countrystringrequired

Country name

postalCodestring

Postal/ZIP code

latitudenumberrequired

Latitude coordinate

longitudenumberrequired

Longitude coordinate

amenitiesarray

Detailed amenity information

amenity items
idstringrequired

Amenity identifier

namestringrequired

Amenity name

categorystring

Amenity category

iconstring

Amenity icon URL

mediaobject

Property images and media (when includeMedia=true)

media
heroobject

Hero/primary image

hero image
urlstringrequired

Image URL

altstring

Alt text

galleryarray

Additional property images

gallery images
urlstringrequired

Image URL

altstring

Alt text

categorystring

Image category (room, exterior, amenity, etc.)

availabilityobject

Real-time availability data (when includeAvailability=true)

availability
availablebooleanrequired

Whether property is available for requested dates

roomsAvailablenumber

Number of rooms available

restrictionsarray

Any booking restrictions

reviewsobject

Review summary data (when includeReviews=true)

reviews
ratingnumberrequired

Average rating (1-5 stars)

countnumberrequired

Total number of reviews

breakdownobject

Rating breakdown by category

breakdown
cleanlinessnumber

Cleanliness rating

servicenumber

Service rating

locationnumber

Location rating

valuenumber

Value rating

notFoundarray

Array of property IDs that could not be found

Example

const response = await fetch('https://api.journey.com/members/properties/search/hydrate', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${clerkToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    propertyIds: [123, 456, 789],
    dates: {
      checkIn: '2024-06-15',
      checkOut: '2024-06-17'
    },
    includeAvailability: true,
    includeReviews: true,
    includeMedia: false
  })
});

Request

cURL
curl -X POST "https://api.journey.com/members/properties/search/hydrate" \
  -H "Authorization: Bearer YOUR_CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "propertyIds": [123, 456, 789],
    "dates": {
      "checkIn": "2024-06-15",
      "checkOut": "2024-06-17"
    },
    "includeAvailability": true,
    "includeReviews": true,
    "includeMedia": false
  }'

Response

200 Response
{
  "properties": [
    {
      "id": 123,
      "documentId": "prop_manhattan_boutique",
      "name": "Manhattan Boutique Hotel",
      "description": "A sophisticated boutique hotel in the heart of Manhattan...",
      "brandName": "Journey Urban Collection",
      "type": "Hotel",
      "nightlyCost": 45000,
      "guestRating": 4.6,
      "maxGuests": 4,
      "address": {
        "street": "123 Fifth Avenue",
        "city": "New York",
        "state": "NY",
        "country": "United States",
        "postalCode": "10001",
        "latitude": 40.7128,
        "longitude": -74.0060
      },
      "amenities": [
        {
          "id": "wifi",
          "name": "Free WiFi",
          "category": "Technology",
          "icon": "https://cdn.journey.com/icons/wifi.svg"
        },
        {
          "id": "pool",
          "name": "Rooftop Pool",
          "category": "Recreation",
          "icon": "https://cdn.journey.com/icons/pool.svg"
        }
      ],
      "availability": {
        "available": true,
        "roomsAvailable": 3,
        "restrictions": []
      },
      "reviews": {
        "rating": 4.6,
        "count": 1247,
        "breakdown": {
          "cleanliness": 4.8,
          "service": 4.5,
          "location": 4.9,
          "value": 4.2
        }
      }
    }
  ],
  "notFound": []
}

Usage Notes

Performance Considerations

  • Batch size: Maximum 50 properties per request
  • Response time: Varies based on included data (availability checks add ~200ms)
  • Caching: Property data is cached for 5 minutes, availability for 30 seconds

Best Practices

  1. Request only needed data - Use include flags to control response size
  2. Handle not found properties - Check the notFound array for missing properties
  3. Cache results - Cache hydrated data to reduce API calls
  4. Parallel requests - For >50 properties, make parallel requests

On this page