# Get Reservations
> Source: /api-reference/members/reservations/get-reservations
> Get paginated list of member reservations with property summary cards
> Endpoint: GET /members/me/reservations

## Overview [#overview]

Returns a paginated list of the member's reservations with property summary information. Includes filtering and sorting options to help members find specific reservations.

## Authentication [#authentication]

Requires a valid Clerk JWT token in the Authorization header.

## Query Parameters [#query-parameters]

<ParamField query="dateFrom" type="string">
  ISO date string (YYYY-MM-DD) - filter check-in on or after this date
</ParamField>

<ParamField query="dateTo" type="string">
  ISO date string (YYYY-MM-DD) - filter check-out on or before this date
</ParamField>

<ParamField query="sortBy" type="string">
  Sort field: "id", "checkInDate", or "checkOutDate" (default: "id")
</ParamField>

<ParamField query="status" type="string">
  Filter by reservation status: "confirmed", "pending", "cancelled", "inquiry", "other"
</ParamField>

<ParamField query="limit" type="number">
  Maximum number of reservations to return (default: 20)
</ParamField>

<ParamField query="offset" type="number">
  Number of reservations to skip for pagination (default: 0)
</ParamField>

<RequestExample>

```bash cURL
curl -X GET "http://localhost:3000/v1/members/me/reservations?status=confirmed&sortBy=checkInDate&limit=10" \
  -H "Authorization: Bearer YOUR_CLERK_JWT"
```

```typescript TypeScript
const response = await fetch('http://localhost:3000/v1/members/me/reservations?status=confirmed&sortBy=checkInDate&limit=10', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_CLERK_JWT'
  }
});

const reservations = await response.json();
```

</RequestExample>

## Response [#response]

<ResponseField name="items" type="array" required>
  List of reservation summaries
  
  <Expandable title="array items">
    <ResponseField name="reservationId" type="string" required>
      Unique reservation identifier
    </ResponseField>
    
    <ResponseField name="checkInDate" type="string" required>
      Check-in date (YYYY-MM-DD)
    </ResponseField>
    
    <ResponseField name="checkOutDate" type="string" required>
      Check-out date (YYYY-MM-DD)
    </ResponseField>
    
    <ResponseField name="status" type="string" required>
      Reservation status: "confirmed", "pending", "cancelled", "inquiry", "other"
    </ResponseField>
    
    <ResponseField name="confirmationCode" type="string">
      PMS confirmation code for the reservation
    </ResponseField>
    
    <ResponseField name="guestCount" type="number" required>
      Total number of guests
    </ResponseField>
    
    <ResponseField name="bookingChannel" type="string">
      How reservation was booked: "direct", "journey_app", "pms", etc.
    </ResponseField>
    
    <ResponseField name="property" type="object" required>
      Property summary information
      
      <Expandable title="properties">
        <ResponseField name="id" type="number" required>
          Property ID
        </ResponseField>
        
        <ResponseField name="documentId" type="string" required>
          Property document identifier
        </ResponseField>
        
        <ResponseField name="name" type="string" required>
          Property name
        </ResponseField>
        
        <ResponseField name="location" type="string">
          Property location (city, country)
        </ResponseField>
        
        <ResponseField name="imageUrl" type="string">
          Property hero image URL
        </ResponseField>
        
        <ResponseField name="brand" type="object">
          Brand information (without internal ID)
          
          <Expandable title="properties">
            <ResponseField name="documentId" type="string" required>
              Brand document identifier
            </ResponseField>
            
            <ResponseField name="name" type="string" required>
              Brand name
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
    
    <ResponseField name="pointsStatus" type="object" required>
      Points earned/earning for this reservation
      
      <Expandable title="properties">
        <ResponseField name="totalPoints" type="number" required>
          Total points earned for this reservation
        </ResponseField>
        
        <ResponseField name="basePoints" type="number" required>
          Base points before multipliers
        </ResponseField>
        
        <ResponseField name="multiplier" type="number" required>
          Point multiplier applied
        </ResponseField>
        
        <ResponseField name="finalized" type="boolean" required>
          Whether points have been finalized (post-checkout processing complete)
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="total" type="number" required>
  Total number of reservations matching filters
</ResponseField>

<ResponseField name="limit" type="number" required>
  Current pagination limit
</ResponseField>

<ResponseField name="offset" type="number" required>
  Current pagination offset
</ResponseField>

<ResponseExample>

```json 200 Response
{
  "items": [
    {
      "reservationId": "550e8400-e29b-41d4-a716-446655440000",
      "checkInDate": "2024-05-15",
      "checkOutDate": "2024-05-18",
      "status": "confirmed",
      "confirmationCode": "ABC123",
      "guestCount": 2,
      "bookingChannel": "journey_app",
      "property": {
        "id": 1,
        "documentId": "prop_luxury_resort_bali",
        "name": "Luxury Resort Bali",
        "location": "Ubud, Bali, Indonesia",
        "imageUrl": "https://cdn.journey.com/properties/luxury-resort-bali.jpg",
        "brand": {
          "documentId": "brand_boutique_hotels",
          "name": "Boutique Hotels Collection"
        }
      },
      "pointsStatus": {
        "totalPoints": 2500,
        "basePoints": 2000,
        "multiplier": 1.25,
        "finalized": false
      }
    },
    {
      "reservationId": "550e8400-e29b-41d4-a716-446655440001",
      "checkInDate": "2024-03-10",
      "checkOutDate": "2024-03-12",
      "status": "confirmed", 
      "confirmationCode": "XYZ789",
      "guestCount": 1,
      "bookingChannel": "direct",
      "property": {
        "id": 2,
        "documentId": "prop_urban_hotel_tokyo",
        "name": "Urban Hotel Tokyo",
        "location": "Shibuya, Tokyo, Japan",
        "imageUrl": "https://cdn.journey.com/properties/urban-hotel-tokyo.jpg",
        "brand": {
          "documentId": "brand_urban_escapes",
          "name": "Urban Escapes"
        }
      },
      "pointsStatus": {
        "totalPoints": 1800,
        "basePoints": 1500,
        "multiplier": 1.2,
        "finalized": true
      }
    }
  ],
  "total": 12,
  "limit": 10,
  "offset": 0
}
```

</ResponseExample>

## Filtering Options [#filtering-options]

### Date Filters [#date-filters]
- **dateFrom**: Include reservations with check-in on or after this date
- **dateTo**: Include reservations with check-out on or before this date
- **Combined**: Use both to filter reservations within a date range

### Status Filters [#status-filters]
- **confirmed**: Confirmed reservations (most common)
- **pending**: Reservations pending confirmation
- **cancelled**: Cancelled reservations
- **inquiry**: Inquiry-only reservations
- **other**: Other status types

### Sorting Options [#sorting-options]
- **id**: Sort by reservation ID (default, newest first)
- **checkInDate**: Sort by check-in date
- **checkOutDate**: Sort by check-out date

## Points Status [#points-status]

### finalized [#finalized]
- **true**: Points processing is complete, points are in wallet
- **false**: Points are in escrow, will be finalized after checkout

### Point Calculation [#point-calculation]
- **basePoints**: Calculated from spend amount
- **multiplier**: Applied based on member tier and property campaigns
- **totalPoints**: Final points earned (basePoints × multiplier)
