# Get Property Rates
> Source: /api-reference/members/rates/get-rates
> Get property rates with Journey-enriched pricing including points options
> Endpoint: POST /members/reservations/rates

## Overview [#overview]

Retrieves available rates for a specific property with Journey-enriched pricing, including both cash and points payment options. This endpoint requires member authentication and provides personalized pricing based on the member's status and benefits.

The rates include detailed pricing breakdowns, room availability, cancellation policies, and Journey-specific features like points redemption options.

## Authentication [#authentication]

Requires a valid Clerk JWT token in the Authorization header.

## Request Body [#request-body]

<ParamField body="strapiPropertyId" type="string" required>
  Strapi property Document ID
</ParamField>

<ParamField body="checkIn" type="string" required>
  Check-in date in ISO format (YYYY-MM-DD). Cannot be in the past.
</ParamField>

<ParamField body="checkOut" type="string" required>
  Check-out date in ISO format (YYYY-MM-DD). Must be at least 1 day after check-in.
</ParamField>

<ParamField body="adults" type="number" required>
  Number of adults (minimum: 1, maximum: 20)
</ParamField>

<ParamField body="children" type="number">
  Number of children (minimum: 0, maximum: 10, default: 0)
</ParamField>

<ParamField body="strapiRoomIds" type="array">
  Array of Strapi room IDs to filter rates. If provided, only rates for these rooms will be returned.
</ParamField>

## Response [#response]

Returns available rates with Journey-enriched pricing and booking options.

<ResponseField name="rates" type="array" required>
  Array of available rates
  
  <Expandable title="rate items">
    <ResponseField name="offerId" type="string" required>
      LiteAPI offer ID for booking
    </ResponseField>
    
    <ResponseField name="roomId" type="string" required>
      Strapi room Document ID
    </ResponseField>
    
    <ResponseField name="roomName" type="string" required>
      Room type name
    </ResponseField>
    
    <ResponseField name="rateCode" type="string" required>
      Rate plan code
    </ResponseField>
    
    <ResponseField name="rateName" type="string" required>
      Rate plan name
    </ResponseField>
    
    <ResponseField name="boardType" type="string">
      Meal plan included (e.g., "Room Only", "Breakfast Included")
    </ResponseField>
    
    <ResponseField name="refundable" type="boolean" required>
      Whether the rate is refundable
    </ResponseField>
    
    <ResponseField name="cancellationPolicy" type="object">
      Cancellation terms and deadlines
      
      <Expandable title="cancellation policy">
        <ResponseField name="refundable" type="boolean" required>
          Whether refunds are available
        </ResponseField>
        
        <ResponseField name="deadline" type="string">
          Cancellation deadline (ISO datetime)
        </ResponseField>
        
        <ResponseField name="penalty" type="object">
          Cancellation penalty details
          
          <Expandable title="penalty">
            <ResponseField name="amount" type="number">
              Penalty amount
            </ResponseField>
            
            <ResponseField name="currency" type="string">
              Penalty currency
            </ResponseField>
            
            <ResponseField name="type" type="string">
              Penalty type (fixed, percentage, nights)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
    
    <ResponseField name="pricing" type="object" required>
      Journey-enriched pricing options
      
      <Expandable title="pricing">
        <ResponseField name="cash" type="object" required>
          Cash payment option
          
          <Expandable title="cash pricing">
            <ResponseField name="total" type="number" required>
              Total cost in cash
            </ResponseField>
            
            <ResponseField name="currency" type="string" required>
              Currency code (USD, EUR, etc.)
            </ResponseField>
            
            <ResponseField name="breakdown" type="object">
              Cost breakdown
              
              <Expandable title="breakdown">
                <ResponseField name="baseRate" type="number" required>
                  Base room rate
                </ResponseField>
                
                <ResponseField name="taxes" type="number">
                  Taxes and fees
                </ResponseField>
                
                <ResponseField name="journeyFee" type="number">
                  Journey service fee
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>
        </ResponseField>
        
        <ResponseField name="points" type="object">
          Points payment option (if available)
          
          <Expandable title="points pricing">
            <ResponseField name="total" type="number" required>
              Total cost in points
            </ResponseField>
            
            <ResponseField name="available" type="boolean" required>
              Whether points payment is available
            </ResponseField>
            
            <ResponseField name="memberBalance" type="number">
              Member's current points balance
            </ResponseField>
            
            <ResponseField name="redemptionRate" type="number">
              Points to cash conversion rate
            </ResponseField>
          </Expandable>
        </ResponseField>
        
        <ResponseField name="reference" type="object">
          Reference pricing for transparency
          
          <Expandable title="reference pricing">
            <ResponseField name="retailRate" type="object">
              Journey's net cost before margin
              
              <Expandable title="retail rate">
                <ResponseField name="amount" type="number" required>
                  Amount
                </ResponseField>
                
                <ResponseField name="currency" type="string" required>
                  Currency
                </ResponseField>
                
                <ResponseField name="source" type="string">
                  Data source
                </ResponseField>
              </Expandable>
            </ResponseField>
            
            <ResponseField name="suggestedSellingPrice" type="object">
              Suggested selling price from provider
            </ResponseField>
            
            <ResponseField name="taxesAndFees" type="object">
              Separate taxes and fees
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
    
    <ResponseField name="occupancy" type="object" required>
      Room occupancy details
      
      <Expandable title="occupancy">
        <ResponseField name="maxAdults" type="number" required>
          Maximum adults for this room
        </ResponseField>
        
        <ResponseField name="maxChildren" type="number" required>
          Maximum children for this room
        </ResponseField>
        
        <ResponseField name="maxTotal" type="number" required>
          Maximum total occupancy
        </ResponseField>
      </Expandable>
    </ResponseField>
    
    <ResponseField name="amenities" type="array">
      Rate-specific amenities and inclusions
    </ResponseField>
    
    <ResponseField name="images" type="array">
      Room images
      
      <Expandable title="image items">
        <ResponseField name="url" type="string" required>
          Image URL
        </ResponseField>
        
        <ResponseField name="alt" type="string">
          Alt text
        </ResponseField>
        
        <ResponseField name="category" type="string">
          Image category
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="property" type="object" required>
  Property information summary
  
  <Expandable title="property details">
    <ResponseField name="id" type="string" required>
      Property Strapi Document ID
    </ResponseField>
    
    <ResponseField name="name" type="string" required>
      Property name
    </ResponseField>
    
    <ResponseField name="address" type="object" required>
      Property address
    </ResponseField>
    
    <ResponseField name="contact" type="object">
      Property contact information
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="searchCriteria" type="object" required>
  Echo of the search parameters
  
  <Expandable title="search criteria">
    <ResponseField name="checkIn" type="string" required>
      Check-in date
    </ResponseField>
    
    <ResponseField name="checkOut" type="string" required>
      Check-out date
    </ResponseField>
    
    <ResponseField name="adults" type="number" required>
      Number of adults
    </ResponseField>
    
    <ResponseField name="children" type="number">
      Number of children
    </ResponseField>
    
    <ResponseField name="nights" type="number" required>
      Number of nights
    </ResponseField>
  </Expandable>
</ResponseField>

## Example [#example]

```typescript
const response = await fetch('https://api.journey.com/members/reservations/rates', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${clerkToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    strapiPropertyId: 'fkihstwpqlezcm1ogi31yu8f',
    checkIn: '2024-06-15',
    checkOut: '2024-06-17',
    adults: 2,
    children: 0
  })
});
```

<RequestExample>

```bash cURL
curl -X POST "https://api.journey.com/members/reservations/rates" \
  -H "Authorization: Bearer YOUR_CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "strapiPropertyId": "fkihstwpqlezcm1ogi31yu8f",
    "checkIn": "2024-06-15",
    "checkOut": "2024-06-17",
    "adults": 2,
    "children": 0,
    "strapiRoomIds": ["k87cr02ph4s17msgcndg3yxz"]
  }'
```

```typescript TypeScript
const getRates = async (propertyId: string, dates: { checkIn: string; checkOut: string }, guests: { adults: number; children?: number }) => {
  const response = await fetch('https://api.journey.com/members/reservations/rates', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_CLERK_JWT',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      strapiPropertyId: propertyId,
      checkIn: dates.checkIn,
      checkOut: dates.checkOut,
      adults: guests.adults,
      children: guests.children || 0
    })
  });
  
  return response.json();
};

// Usage
const rates = await getRates(
  'fkihstwpqlezcm1ogi31yu8f',
  { checkIn: '2024-06-15', checkOut: '2024-06-17' },
  { adults: 2, children: 0 }
);
```

</RequestExample>

<ResponseExample>

```json 200 Response
{
  "rates": [
    {
      "offerId": "GE5ESNBSIZKVMQ2Q...",
      "roomId": "k87cr02ph4s17msgcndg3yxz",
      "roomName": "Deluxe King Room",
      "rateCode": "JOURNEY_MEMBER",
      "rateName": "Journey Member Rate",
      "boardType": "Room Only",
      "refundable": true,
      "cancellationPolicy": {
        "refundable": true,
        "deadline": "2024-06-14T18:00:00Z",
        "penalty": null
      },
      "pricing": {
        "cash": {
          "total": 450.00,
          "currency": "USD",
          "breakdown": {
            "baseRate": 380.00,
            "taxes": 45.60,
            "journeyFee": 24.40
          }
        },
        "points": {
          "total": 45000,
          "available": true,
          "memberBalance": 125000,
          "redemptionRate": 0.01
        },
        "reference": {
          "retailRate": {
            "amount": 380.00,
            "currency": "USD",
            "source": "LiteAPI"
          },
          "suggestedSellingPrice": {
            "amount": 520.00,
            "currency": "USD",
            "source": "Hotel Direct"
          },
          "taxesAndFees": {
            "amount": 45.60,
            "currency": "USD"
          }
        }
      },
      "occupancy": {
        "maxAdults": 2,
        "maxChildren": 2,
        "maxTotal": 4
      },
      "amenities": [
        "Free WiFi",
        "City View",
        "Air Conditioning",
        "Mini Bar"
      ],
      "images": [
        {
          "url": "https://cdn.journey.com/rooms/deluxe-king-1.jpg",
          "alt": "Deluxe King Room interior",
          "category": "room"
        }
      ]
    }
  ],
  "property": {
    "id": "fkihstwpqlezcm1ogi31yu8f",
    "name": "Manhattan Boutique Hotel",
    "address": {
      "street": "123 Fifth Avenue",
      "city": "New York",
      "state": "NY",
      "country": "United States"
    },
    "contact": {
      "phone": "+1-212-555-0123",
      "email": "reservations@manhattanboutique.com"
    }
  },
  "searchCriteria": {
    "checkIn": "2024-06-15",
    "checkOut": "2024-06-17",
    "adults": 2,
    "children": 0,
    "nights": 2
  }
}
```

</ResponseExample>

## Usage Notes [#usage-notes]

### Date Requirements [#date-requirements]

- **Check-in date**: Cannot be in the past
- **Check-out date**: Must be at least 1 day after check-in
- **Date format**: ISO format (YYYY-MM-DD)

### Pricing Features [#pricing-features]

- **Points redemption**: Available when member has sufficient points balance
- **Transparent pricing**: Reference pricing shows Journey's cost structure
- **Member rates**: Exclusive rates available to authenticated members
- **Real-time availability**: Rates are live and subject to availability

### Room Filtering [#room-filtering]

Use `strapiRoomIds` to filter rates for specific room types when you already know which rooms are of interest.
