Skip to content

Trips

A trip is a higher-level grouping of related flights, cruise voyages, hotel stays, place visits and bookings. Where a tag is a free-form label, a trip has its own page with its own statistics — and it can span every domain in a single journey.

ConceptExampleBest for
Tagbusiness, family, 2026Quick filters across years
Trip”Honeymoon 2024”, “Q3 client visits”One specific journey with start, end, story

You can absolutely use just tags and never make a trip; many users do. Trips earn their keep when you want to remember a particular journey as a unit — not “all my business flights” but “that one work trip to Japan in March”.

Trips → Add Trip. Fields:

  • Name — what you’ll see in the trip list
  • Date range (optional) — start and end dates
  • Status — planned, in progress, or completed (defaults to planned)
  • Category (optional) — vacation, business, weekend, family, or other
  • Colour — used to tint the trip’s map arcs and timeline dots. Auto-assigned from a palette if you don’t pick one
  • Icon (optional) — an emoji to brand the trip
  • Description (optional) — free-form notes (the trip page also has a separate markdown notes field)
  • Cover image (optional) — uploaded photo for the trip header
  • Companions (optional) — who you travelled with
  • Tags (optional) — free-form labels on the trip

Save. The trip is empty until you attach something to it.

Every domain’s form has a Trip selector — pick an existing trip or create one inline:

  • Flights — on the flight form, when creating and when editing.
  • Cruises — on the cruise form. Cruise imports can also assign the imported cruise (and any fly-and-cruise flights) to a trip in the import preview. The cruise list and the cruise page name the trip, and the trip counts the cruise and its price.
  • Stays — on the stay form, in a section of its own.
  • Place visits (beta) — on the visit form.

An entry belongs to only one trip at a time. Moving between trips is fine; assigning to two simultaneously is not supported (use tags for cross-cutting categorisation).

TravStats can propose trips from your existing flights. Trips → Detect trips runs a set of heuristics — flights sharing a booking reference, out-and-back loops from your home airport, and chains of connecting flights within a short window — and suggests clusters of three or more flights as candidate trips. It’s a dry run by default: you review, rename, and choose which proposals to keep before anything is created.

Detection works on flights only, and it deliberately leaves simple two-leg out-and-back trips alone — a flight is a first-class record without needing a trip wrapped around it.

Each trip has its own dashboard, organised into tabs:

  • Overview — summary tiles (flights, cruises, nights, countries, companions, total booked cost, tags) and your notes. A trip with only hotel stays shows the country of its stays; a cancelled booking never put anyone anywhere and is skipped. On a beta instance an AI-generated trip summary card appears here too.
  • Timeline — a merged, chronological view of every flight, cruise, stay, place visit and journal entry, colour-dotted by domain. A cruise or a flight expands where it stands: the cruise shows its ship, cabin, price and the itinerary day by day with sea days named as such; the flight shows airline and number, aircraft, seat and class. A button in the panel opens the full page for editing. A stay carries no time of day, so it sorts as unknown rather than as 00:00 — a check-in no longer lands above the flight that brought you there.
  • Map — flight arcs lying flat on the map, cruise paths, airports and ports, and one pin per hotel with this trip’s nights on it; names thin out with zoom. On a beta instance the trip’s tour sections are drawn too.
  • Gallery — photos you’ve uploaded for the trip, or linked from an Immich album. A geotagged photo can suggest the place it was taken at, and it outranks a hotel as the reason, because a photograph is a GPS fix at the moment the shutter opened.
  • Logistics — tables of the trip’s flights, cruises, stays and bookings, with a total booked cost. Every amount goes through one formatter; a missing currency yields a bare number, never an invented euro.
  • Tours (beta) — the trip’s road, hike, bike and ferry sections and their editor. See Tours.

Statistics are scoped to this trip only. The trip list shows each trip’s entry count, and on beta instances its section count, from one request. Trips also appear on the main dashboard in a Recent trips strip, newest first.

Flight detail → Trip dropdown → set to “(none)” — or use the unlink icon next to the flight on the trip page. The flight detaches from the trip; it stays in your overall flight history, just no longer associated with that journey. Cruises unlink the same way.

Trip detail → … → Delete trip. Deleting a trip keeps your flights, cruises and stays — they’re simply unlinked and stay in your overall history, and any bookings are unlinked too. Only the trip’s own content — its photos, stops, sections and journal entries — is removed with it; the dialog says so. To undo an entire import, revert its batch in the import log instead.

The pragmatic rules:

Use a tag when:

  • You want to slice across years (“all family flights”)
  • You want to combine multiple criteria (“business + premium-cabin”)
  • You want a label that applies to non-trip-related categorisation (“emergency”, “milestone-100k”)

Use a trip when:

  • The flights belong to one specific journey with a name
  • You want a dedicated dashboard for that journey
  • You’re going to share the trip page with someone (e.g. a family member who also flew the same itinerary)
  • You want photos and notes alongside the flights

You can use both at once: tag a flight family and assign it to the “Vacation Greece 2024” trip. The tag covers your “all family flights ever” view; the trip covers the one-journey-as-a-unit view.

A booking groups one or more flights and cruises under a shared reservation — its PNR (booking reference), price, and currency. A booking can be attached to a trip, in which case its cost rolls up into the trip’s totals.

Bookings surface in the trip’s Logistics tab, which lists each booking alongside the flights and cruises it covers and sums a “total booked” figure for the whole journey. This is how the trip page knows what a journey cost.

The dashboard’s Trips map mode (different from the Trips page — see Maps) animates each trip as one continuous flight path through time. Useful for showing off a year of travel without having to manually arrange every flight.

On an instance with the beta switch on, a trip can also be walked, driven and cycled rather than only flown: route sections — road, hike, bike, ferry — each a named, ordered chain of stops with driven legs, an editor that works with the mouse, and a line of its own on the dashboard map under a Tours tab. Recorded tracks can be pulled from a Dawarich instance and adopted onto a section. All of it is behind the beta switch; see Tours and Beta features.

Settings → API Tokens mint a write-scoped PAT, then:

Terminal window
# List trips
curl -fsS \
-H "Authorization: Bearer $TOKEN" \
https://travstats.example.com/api/v1/trips
# Create a trip
curl -fsS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Honeymoon 2024","startDate":"2024-09-15","endDate":"2024-09-30"}' \
https://travstats.example.com/api/v1/trips

GET /trips carries _count with flights, cruises, stays and routes per trip. Full shapes: the OpenAPI spec.

  • An entry belongs to one trip at a time — use tags for cross-cutting categorisation
  • No cross-user trip sharing (sharing your trip page with a family member who has their own TravStats user means re-creating the trip on their side)
  • The AI trip summary is behind the beta switch and needs a configured local LLM (Ollama) — without one, the summarise button returns an error
  • Automatic detection works on flights only; cruises and stays aren’t auto-detected and are attached to trips by hand
  • Tour sections are beta — see Tours