---
title: "Create Trip"
method: POST
path: "/trips"
---

# Create Trip

`POST /trips`

## Request

- Base URL: `https://stardrift.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://stardrift.ai/trips`
- Auth: none declared

Create a new trip with initial message and start streaming response.

## Request body

- ApiIndexCreateTripRequest
  - `message` string
  - `attachment_ids` string[], nullable
  - `model_choice` 'fast' | 'deep', nullable
  - `onboarding` OnboardingPayload: Onboarding answers sent alongside the user's first chat message.
    - `interests` OnboardingInterest[]
      - `category` string, required
      - `subcategories` string[]
    - `vibe` string[]
    - `destinations` string[]
    - `destination_country` string, nullable
    - `start_date` string, nullable
    - `end_date` string, nullable
    - `duration` 'weekend' | 'week' | 'two_weeks' | 'longer', nullable
    - `travelers` string[]
    - `pace` 'relaxed' | 'balanced' | 'packed', nullable
    - `place_ids` string[]
    - `home_location` HomeLocation: The user's home locality and home airports. Provenance drives the confirmation UX: backfilled values carry ``source="auto"`` with ``confirmed_at=None`` until the user accepts or edits them; anything the user picks or accepts is confirmed. The decision engine may consume unconfirmed values, but the app keeps nudging until ``confirmed_at`` is set.
      - `place_id` string, required: Google place_id of the selected locality
      - `lat` number, required
      - `lng` number, required
      - `city` string, required: Canonical locality name, e.g. "São Paulo"
      - `region` string, nullable: Admin area, e.g. "SP" or "California"
      - `country` string, required
      - `country_code` string, nullable: ISO-3166-1 alpha-2, e.g. 'BR'
      - `airports` string[]: Home-airport IATA codes, ordered by relevance
      - `source` 'user' | 'auto'
      - `confirmed_at` string, date-time, nullable
      - `raw_input` string, nullable: Free text the user typed, or the pre-migration users.city value
    - `home_location_skipped` boolean
  - `from_onboarding` boolean
  - `eclipse_mode` boolean
  - `entry_point` string, nullable

## Response `200`

Successful Response

- CreateTripResponse
  - `id` string, required
  - `conversation_id` string, required
  - `should_show_onboarding` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `places_attached` integer

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-29** `ccc16551a850`: 4 info
  - added the new optional request property `attachment_ids`
  - the request property `message` became optional
  - the `message` request property default value `` was added
  - the `message` request property's minLength was decreased from `1` to `0`

[Operation history](https://skmtc.dev/stardrift/apis/stardrift-api/changes/trips/post.md)

---

[API](https://skmtc.dev/stardrift/apis/stardrift-api.md) - [All operations](https://skmtc.dev/stardrift/apis/stardrift-api/llms.txt) - [OpenAPI document](https://skmtc.dev/stardrift/apis/stardrift-api/revisions/be9ed1e6c38a?raw)
