> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.chrt.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.chrt.com/_mcp/server.

# Multi-Leg Orders

> How forwarders compose multi-segment orders in chrt — ground, flight, and OBC segments, assignment, and flight tasks.

A forwarder's shipment usually crosses more than one leg and more than one
courier. chrt models that as a list of **segments** on a single order, where
each segment is a [task group](/docs/concepts/orders) that can be assigned to
its own courier and tracked independently. This page walks the **Segments**
and **Flights** tabs of the draft builder end to end.

## Before you start

* You need a connected shipper (or an off-platform shipper you've recorded) so
  the draft has a customer on it.
* For ground legs, you need connected couriers in the markets where pickups
  and deliveries happen.
* For flight legs, no separate carrier connection is required — chrt tracks
  flights through its FlightAware integration. WebCargo bookings are made
  in-line from the Flights tab.

> **Note**
>
> Segments are also called task groups. Couriers see a task group as their
> job; the shipper and you see the full order. See
> [Orders](/docs/concepts/orders) for how the two views relate.

## 1. Start a draft and complete Order setup

Open [chrt.com/orders/drafts/new](https://chrt.com/orders/drafts/new). The
**Segments** tab stays locked until **Order setup** is complete — you'll see
an alert reading *"Order required — Please complete Order Setup first to
create a draft order."* until the shipper and basics are saved.

1. On **Order setup**, pick the shipper this order is for.
2. Add an **External reference ID** if the customer gave you a PO or order ID.
3. Add **cargo** on the Cargo tab. Cargo is required before you can attach it
   to stops on each segment.

## 2. Add segments

Open the **Segments** tab. The header reads **"Add Segments"** with the
subtitle *"Segments — Add and arrange the segments for this shipment."*

From the empty state or the **+ Add Segment** dropdown in the top-right, pick
one of:

| Option              | Use for                                                                                                                  |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Ground Segment**  | A single ground leg run by one courier. The most common shape.                                                           |
| **Flight Segment**  | An air leg with cargo on a commercial flight. Pair with ground segments before and after for a tender-and-recover chain. |
| **Onboard courier** | A hand-carry shipment where one person accompanies the cargo door-to-door, including one or more flight legs.            |

Add segments in the physical order they happen — pickup ground, then flight,
then delivery ground for a typical ground → flight → ground chain.

> **Tip**
>
> Drag unsaved segments to reorder them before saving. Once a segment is
> saved (it has a task group ID), you can't reorder it, but you can still
> delete and re-add it.

## 3. Assign a courier to each ground segment

Open each ground segment and pick the courier from your connected providers.
You can use a different courier per leg — that's the whole point of the
multi-segment model.

* Pickup leg → courier in the origin market.
* Delivery leg → courier in the destination market.
* Cross-dock or transfer leg → courier handling the middle hop, if any.

Flight segments don't have a courier selector — chrt handles flight tracking
through integrations. Onboard-courier segments have one selector for the
person accompanying the cargo.

## 4. Configure flight segments on the Flights tab

The **Flights** tab only appears when the order has at least one flight or
onboard-courier segment. The header reads **"Flight Details"** with the
subtitle *"Configure flight information for each air segment (flight
segments and onboard courier legs)."*

For each flight segment:

1. Pick **origin** and **destination** airports.
2. Pick a search window in the **Show flights:** dropdown — **Next 6 hr**,
   **Next 12 hr**, **Next 24 hr**, or **Select Date** for a specific date.
3. Optionally toggle **Include connections** to surface connecting itineraries.
4. Click **Search Flights**.
5. Pick a flight from the results.
6. Click **Save Flight \{n}**. chrt writes the flight info onto the segment
   and creates 7 milestone tasks for that leg (e.g. airline accepted cargo,
   tendered, departed, arrived, recovered).

The card status badge tells you where each flight segment is:

* **Pending** — no tasks created yet.
* **Action Required: Select Flight** — tasks exist but no flight has been
  attached.
* **Configured** — flight info and tasks are both in place.

Use **Edit Flight Details** on a configured card to swap the flight before
the order goes live.

## 5. Configure an onboard-courier segment

An onboard-courier (OBC) segment is a single task group that holds **multiple
flight legs** plus wrapper milestones for pickup, airport handling, customs,
and delivery. Use OBC for the highest-value, time-critical shipments where a
person accompanies the cargo door-to-door.

On the Flights tab, find the OBC card titled **"Onboard courier — flight
legs"** with the subtitle *"Add each flight the courier will board. Saving
creates \{N} milestone tasks (\{L} legs)."*

1. Click **Add flight leg**.
2. For each leg, search the origin → destination → time window and pick the
   flight (same flow as a flight segment).
3. Add additional legs if the courier is taking multiple flights.
4. Click **Save flights & create tasks** to commit. chrt writes per-leg
   **board / depart / arrive / deboard** milestones plus the surrounding
   pickup, handling, customs, and delivery tasks.

> **Note**
>
> OBC segments don't generate ground tasks until you save the flights —
> that's why the segment card shows *"Stops for this segment are created
> when you save flights."* in the Segments tab.

## 6. Book cargo space with WebCargo (optional)

For commercial flight legs, you can request rates and book cargo space
directly from the Flights tab via the embedded **WebCargo by Freightos**
integration. See [Flights and WebCargo](/forwarders/flights#book-with-webcargo)
for the booking flow.

## 7. Add stops on each segment

Open the **Stops** tab. Each segment has its own default stop set:

* **Ground segments** — pickup + deliver.
* **Flight segments** — tender (drop at the airline) + recover (pick up from
  the airline). Created automatically when you save the flight.
* **OBC segments** — pickup, board, deboard, customs, and deliver per leg.
  Created automatically when you save the OBC flights.

For each stop:

1. Set the **address** (autocomplete or use a saved contact's map pin).
2. Add a **point of contact** with phone and email so drivers can reach
   someone on arrival.
3. Select **which cargo** applies to this stop. Forgetting this is the most
   common multi-leg mistake — the preview validation catches it, but it's
   faster to do it as you go.
4. Set a **time window** for the appointment.
5. Add **special instructions** and required **task artifacts** (photo,
   signature, barcode scan).

> **Warning**
>
> On a multi-leg order, every cargo item needs both a pickup stop and a
> delivery stop on the correct segment. A tender stop counts as the "delivery"
> for the pickup leg; a recover stop counts as the "pickup" for the delivery
> leg. The preview validator confirms each cargo line has a complete path.

## 8. Preview and submit

Open the **Preview** tab.

1. Click **Validate** to run all checks (missing addresses, unassigned cargo,
   missing stops on a segment, missing flight info).
2. Fix anything flagged.
3. Click **Submit** to stage the order.

chrt assigns each ground task group to its courier; couriers see only their
own task group. You see the full order at `/orders/<order-ref>`.

## How to know it worked

* The URL changes from `/orders/drafts/<short-id>` to
  `/orders/<order-ref>`.
* Each ground segment has a **Pending acceptance** badge until its courier
  accepts.
* Each flight segment shows its flight info with a live tracker once the
  order is in motion.
* The order timeline lists order-staged plus the staged event for each task
  group.

## If something looks different

* **Flights tab is missing.** Add at least one flight segment or
  onboard-courier segment first — the tab only renders when one exists.
* **No courier selector on a flight segment.** That's expected — flight
  segments are auto-tracked, not courier-assigned.
* **You can't reorder a saved segment.** Saved segments lock to preserve task
  group integrity. Delete and re-add if you need to change the order.
* **Validation fails with no obvious error.** Open each stop and confirm
  cargo selection — that's the most common silent failure.
* Contact [hi@chrt.com](mailto:hi@chrt.com) if something looks wrong.

## Related guides

* [Flights and WebCargo](/forwarders/flights) — search, book, and track
  commercial cargo flights.
* [Tracking shipments](/shippers/tracking) — read the map, timeline, and
  ETA on an in-motion order.
* [Trackers for international cargo](/forwarders/trackers) — attach hardware
  trackers across the full chain.
* [Billing for forwarders](/forwarders/billing) — rate sheet per leg, line
  items per task group.
* [Orders](/docs/concepts/orders) — the task group / task / cargo data model.