---
title: "Send Message"
method: POST
path: "/conv/trips/{trip_id}/messages"
tags: ["conversational"]
---

# Send Message

`POST /conv/trips/{trip_id}/messages`

Send a follow-up message to an existing trip.

## Path parameters

- `trip_id` string, required

## Request body

- ConversationMessageRequest
  - `message` string, nullable
  - `turn_id` string, nullable
  - `entry_context` union
    - TripFactsWorkflowSubmitEntryContext
      - `kind` 'tap_chip_workflow_submit', required
      - `field` 'trip_facts', required
      - `value` TripFactsPatch, required
        - `route` TripFactsRoute
          - `origin` TripFactPlace
            - `code` string, required
            - `display_name` string, nullable
            - `place_type` 'airport' | 'city', nullable
            - `alts` string[]
          - `dest` TripFactPlace
            - `code` string, required
            - `display_name` string, nullable
            - `place_type` 'airport' | 'city', nullable
            - `alts` string[]
        - `dates` TripFactsDates
          - `start` string, date, required
          - `end` string, date, required
          - `flex` union
            - TripFactsPlusMinusFlex
              - …
            - TripFactsWindowFlex
              - …
            - TripFactsMonthFlex
              - …
        - `pax` TripFactsPassengerMix
          - `adults` integer, nullable
          - `children` integer, nullable
          - `infants_in_seat` integer, nullable
          - `infants_on_lap` integer, nullable
        - `party` TripFactsParty — The durable travelling party written from the checkout roster (FAC-937). Distinct from ``pax``: ``party`` carries the resolved traveler_profile_ids the customer picked at checkout, so searches can price the exact same people.
          - `adults` integer, required
          - `children` integer
          - `infants` integer
          - `traveler_profile_ids` string[]
        - `hotel` HotelSearchCriteria — Criteria snapshot for a hotel search session/map token. Criteria changes create a new hotel search session; FE should reject stale updates whose criteria_hash does not match the active map instance.
          - `check_in` string, date, required
          - `check_out` string, date, required
          - `guests` HotelSearchGuestConfig, required — Wraps a list of GuestRoom into a typed config object for the discovery API. Reuses the shared GuestRoom model — just adds a container with validation.
            - `rooms` GuestRoomOutput[], required
              - …
          - `anchor` HotelSearchAnchor, required — Canonical search anchor for a hotel map session. Extends LocationRadius to keep the existing flat latitude/longitude/radius_km shape while adding the label/type metadata FE needs. This prevents map-first hotel search from falling back to a vague destination code or implicit city centroid.
            - `latitude` number, required
            - `longitude` number, required
            - `radius_km` number, required
            - `label` string, required
            - `source` 'city' | 'neighborhood' | 'hotel' | 'airport' | 'user_phrase' | 'map', required — Source/type of the canonical hotel map search anchor.
            - `place_code` string, nullable
        - `hotel_intent` TripFactsHotelIntent — The once-per-trip staying declaration made at flight checkout (FAC-942). ``answer="yes"`` means the traveller said they intend to book a stay for this trip — the flight session is re-priced to the bundle tier and post-booking stays wakes are guaranteed. ``answer="no"`` suppresses hotel-offer wakes for the trip. Written by travel's checkout path (``source="checkout_travelers"``) or, conversationally, by the LLM ``update_trip_facts`` tool (``source="conversation"``).
          - `answer` 'yes' | 'no', required
          - `declared_at` string, date-time, nullable
          - `source` 'checkout_travelers' | 'conversation'
    - TripSwitchDecisionEntryContext
      - `kind` 'trip_switch_decision', required
      - `action` 'accept' | 'decline', required
      - `target_trip_id` string, required
      - `target_trip_name` string, nullable
      - `offer_id` string, nullable
    - HotelMapRefinementEntryContext — Typed state attached to a visible turn sent from the hotel map. The IDs bind the turn to the exact map/search instance the customer saw. ``recommend_area`` is the only action that changes recommendation geography; an ordinary ``ask_axel`` turn can refine picks without treating the current camera position as intent. ``edit_criteria`` carries a complete, already-validated search draft from the map's own search editor — destination, dates and party. It is not a visible chat message and carries no customer prose: the customer filled in a form and pressed Search, so there is nothing for the model to interpret. Dates and guests are immutable on a Content search session (see ``HotelSearchCriteria``), so applying one mints a replacement session rather than mutating the current one. ``map_session_id`` and ``criteria_hash`` are the mounted map's identity and stay required for every map-local action. They are optional only for ``edit_criteria``, which the checkout surface also sends — the same stay and party editor sits above the room list there, with no map mounted and so no map identity to quote. When they are supplied they are still checked, so a map-originated edit keeps its staleness guarantee.
      - `kind` 'hotel_map_refinement', required
      - `action` 'ask_axel' | 'recommend_area' | 'edit_criteria', required
      - `hotel_search_session_id` string, uuid, required
      - `map_session_id` string, nullable
      - `criteria_hash` string, nullable
      - `area_label` string, 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
      - `selected_hotel_id` integer, nullable
      - `criteria` HotelSearchCriteria — Criteria snapshot for a hotel search session/map token. Criteria changes create a new hotel search session; FE should reject stale updates whose criteria_hash does not match the active map instance.
        - `check_in` string, date, required
        - `check_out` string, date, required
        - `guests` HotelSearchGuestConfig, required — Wraps a list of GuestRoom into a typed config object for the discovery API. Reuses the shared GuestRoom model — just adds a container with validation.
          - `rooms` GuestRoomOutput[], required
            - `adults` integer, required — Number of adults
            - `children` object[] — List of children with ages
              - …
        - `anchor` HotelSearchAnchor, required — Canonical search anchor for a hotel map session. Extends LocationRadius to keep the existing flat latitude/longitude/radius_km shape while adding the label/type metadata FE needs. This prevents map-first hotel search from falling back to a vague destination code or implicit city centroid.
          - `latitude` number, required
          - `longitude` number, required
          - `radius_km` number, required
          - `label` string, required
          - `source` 'city' | 'neighborhood' | 'hotel' | 'airport' | 'user_phrase' | 'map', required — Source/type of the canonical hotel map search anchor.
          - `place_code` string, nullable
    - HotelDetailQuestionEntryContext — Typed state attached to a visible turn sent from the hotel detail page. The detail page is the hotel the customer opened from the map, so it carries the same server-bound map/search identity plus the one hotel on screen. Only the hotel identity and what is on screen travel here: the hotel's own facts (amenities, location, description, policies, rates) are hydrated server-side from Content, never supplied by the client.
      - `kind` 'hotel_detail_question', required
      - `hotel_search_session_id` string, uuid, required
      - `map_session_id` string, required
      - `criteria_hash` string, required
      - `hotel_id` integer, required
      - `selected_room_group_id` string, nullable
      - `visible_section` 'rooms' | 'amenities' | 'about' | 'location' | 'policies', nullable
    - FlightGuideMessageEntryContext — Bind a visible message to the Flight Guide currently on screen. The frame and refinement are server-issued/search-owned state. They let the brain continue the mounted guide instead of falling back to the legacy flight-results renderer when the customer asks for a different fit.
      - `kind` 'flight_guide_message', required
      - `source_frame_id` string, required
      - `refinement` FlightGuideRefinement — Server-resolved filters for one canonical Flight Guide frame. The browser supplies preferences, never candidate inventory. Brain applies these constraints to the persisted outbound frame and the complete cached Phase-2 return market, selecting at most one checkout observation per outbound.
        - `nonstop_only` boolean
        - `airline_only` string, nullable
        - `avoided_airlines` string[]
        - `origin_airport_codes` string[], nullable
        - `destination_airport_codes` string[], nullable
        - `outbound_depart_after_minutes` integer, nullable
        - `outbound_depart_before_minutes` integer, nullable
        - `return_depart_after_minutes` integer, nullable
        - `return_depart_before_minutes` integer, nullable
  - `supports_pending_flight_guide` boolean — Client handles pending Flight Guide frames and same-frame recovery.

## Response `200`

Successful Response

- ApiConversationalTripResponse
  - `response` string, required
  - `trip_id` string, nullable, required
  - `session_id` string, required
  - `navigate_to_trip` string, nullable
  - `trip_facts` object, nullable
  - `stats` object, nullable

## Other responses

- `422` — Validation Error

---

[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-service-production.skmtc.workers.dev/v1/apis/helloaxel/client-api-gateway/revisions/7ffb16b1c40d/schema)
