---
title: "Curate Hotels"
method: POST
path: "/conv/trips/{trip_id}/hotel-curate"
tags: ["conversational"]
---

# Curate Hotels

`POST /conv/trips/{trip_id}/hotel-curate`

Get Axel's current shortlist for an existing hotel search.

## Path parameters

- `trip_id` string, required

## Request body

- HotelCurateRequest
  - `hotel_search_session_id` string, uuid, required
  - `trigger` 'inventory_update' | 'ask_axel' | 'recommend_area' | 'browse_preferences'
  - `area` string, nullable
  - `area_lat` number, nullable
  - `area_lng` number, nullable
  - `viewport` Viewport — Map viewport defined by SW and NE corners of the visible area. Sent by the client whenever the user pans or zooms the map.
    - `sw` LatLng, required — Geographic coordinate pair. Used by both pricing and discovery APIs.
      - `latitude` number, required
      - `longitude` number, required
    - `ne` LatLng, required — Geographic coordinate pair. Used by both pricing and discovery APIs.
      - `latitude` number, required
      - `longitude` number, required
  - `stars` string, nullable
  - `notes` string, nullable
  - `selected_hotel_id` integer, nullable
  - `browse_preferences` HotelBrowsePreferences — Current hotel-list controls; prices use the displayed nightly dollar amount.
    - `sort_by` 'recommended' | 'price-asc' | 'price-desc' | 'rating' | 'rating-asc' | 'deal'
    - `min_stars` number, nullable
    - `min_rating` number, nullable
    - `min_price` number, nullable
    - `max_price` number, nullable
    - `price_basis` 'standard' | 'member'

## Response `200`

Successful Response

- HotelCurateResponse
  - `take` string, required
  - `notes_location` object, nullable
  - `hotels` HotelCurationResult[], required
    - `hotel_id` integer, required
    - `highlight` string
    - `comment` string
    - `is_pick` boolean
    - `is_featured` boolean
  - `picks` HotelCurationPick[]
    - `hotel_id` integer, required
    - `fit` 'great' | 'good' | 'fine', required
    - `map_tag` string, nullable
    - `verdict` string, required
    - `reasons` HotelCurationReason[]
      - `stance` 'for' | 'tradeoff' | 'against', required
      - `text` string, required
  - `map_annotations` HotelMapAnnotation[]
    - `hotel_id` integer, required
    - `map_tag` string, required
    - `kind` 'draw' | 'caveat', required
  - `pick_hotel_ids` integer[]
  - `new_pick_hotel_ids` integer[]
  - `curation_status` 'applied' | 'waiting_for_inventory' | 'preserved'

## Other responses

- `422` — Validation Error

## Changes

> 19 revisions in range; 1 not diffed.

- **2026-09-23** `5d2121d26b96` — 1 breaking, 9 info
  - added the new required request property `hotel_search_session_id`
  - added the new optional request property `area`
  - added the new optional request property `area_lat`
  - added the new optional request property `area_lng`
  - …6 more

[Change history](https://skmtc.dev/helloaxel/apis/client-api-gateway/changes/conv/trips/:trip_id/hotel-curate/post.md)

---

[API](https://skmtc.dev/helloaxel/apis/client-api-gateway.md) · [All operations](https://skmtc.dev/helloaxel/apis/client-api-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/helloaxel/apis/client-api-gateway/revisions/201bba08e85c?raw)
