---
title: "Curate Flight Guide"
method: POST
path: "/conv/trips/{trip_id}/flight-curate"
tags: ["conversational"]
---

# Curate Flight Guide

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

Proxy only a typed, ID-keyed curation overlay for Flight Guide.

## Path parameters

- `trip_id` string, required

## Request body

- FlightGuideCurationRequest — Request one small, deterministic curation batch from a source frame. The browser never supplies flight candidates. ``source_frame_id`` is a server-issued identifier for the canonical search cohort persisted on the trip, so Brain can only judge entries that remain checkout-capable. ``observation_ids`` optionally targets a small exact set from that cohort for customer-opened cards; normal progressive curation uses ``cursor``.
  - `source_frame_id` string, required
  - `cursor` integer
  - `observation_ids` string[], nullable
  - `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
  - `locale` 'en' | 'es'

## Response `200`

Successful Response

- FlightGuideCurationResponse — Stable page metadata plus judgment-only patches; never inventory. ``retryable`` means this wave is not finished: some takes were dropped by grounding even after Brain's own repair ask. Every accepted judgment is still included, and ``next_cursor`` already points at the following wave, so a client may re-ask this cursor or move on. ``terminal`` means the model call itself failed; inventory stays usable and the client decides whether to re-ask.
  - `source_frame_id` string, required
  - `status` 'complete' | 'retryable' | 'terminal'
  - `next_cursor` integer, nullable
  - `lead_ids` string[]
  - `judgments` FlightGuideJudgmentPatch[]
    - `observation_id` string, required
    - `verdict` 'great' | 'good' | 'mixed' | 'painful', required
    - `take` string, required
    - `traits` FlightGuideTrait[], required
      - `fact_id` string, required
      - `sentiment` 'positive' | 'neutral' | 'negative', required
      - `display_text` string, required

## 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)
