API surface. Shippers book across the network through REST rates and shipments. Members and the operator manage member listing, catalogs, interline agreements, ledgers, settlements and service levels over GraphQL Interface.A network is a platform where many logistics service providers (LSPs) offer capacity, and many shippers buy it. Each member is an independent business with its own services, tariffs and routes. The network adds what no single member has: reach across members, multi-leg journeys that hand off between them, one API for shippers, and settlement between all parties. Regional courier alliances, postal unions, freight marketplaces, air cargo consortia and last-mile collectives all have this shape. Network mode reuses almost everything:
1. Carrier accounts
A member is anaccount with type: "carrier" (chapter 19 §1). Its people sign in through the member’s own identity provider, and its systems use the member’s own API keys. Everything a member creates is scoped to its account by the Shipping-Account header, or by the token’s account.
Endpoints are those of chapter 19, plus:
What a member defines
Using its own credentials, a carrier account authors, publishes and versions exactly the same objects a Carrier-mode implementer does, through the GraphQL Interface (GraphQL Interface):
A published catalog becomes the member’s entry in the network’s
GET /v1/carriers, with shipment_config_schema generated from its options (chapter 14 §3). Shippers see one catalog of all members, and members never write per-network adapters.
Member roles: first, middle and last mile
Most real journeys are relays. A courier collects in the origin city, a freight forwarder or airline moves the goods between countries, and a local courier or fleet delivers. A network member declares which segments it serves, and where:
A
customs_broker member offers brokerage as a service at a gateway, attached to the middle-mile segment that crosses the border.
The network plans composed journeys by chaining compatible segments: a first-mile member whose delivery facility is a middle-mile member’s handoff point, then a middle-mile lane ending at a facility where a last-mile member accepts freight. Interline agreements (§3) make each junction bookable.
A member can serve several segments, so a courier can be first mile in one city and last mile in another. Shippers see one composed rate (§2) whose composition.segments[] carry the segment type, and one parent shipment whose journey (chapter 16 §4) lists every segment and member.
2. Rating and booking across members
A shipper callsPOST /v1/rates against the network as usual. The network answers from two kinds of candidates:
- Single-member rates. A member whose coverage spans origin to destination prices the whole shipment from its own rate sheets.
- Composed rates. The network plans multi-member journeys through interline agreements (§3), prices each segment from the responsible member’s rate sheet, adds the agreed handoff fees and the network’s own pricing rules, and returns one rate.
rate.compositionis present only on composed rates. The servicecarrierisnetwork, and itscodeis generated per route pattern.- Single-member rates look exactly like any other carrier’s rate, with
service.carrier = "net_…". - Shippers can restrict rating with
carrier_configskeys as usual, or setcarrier_configs.network.compose: falseto see only single-member rates.
- Creates the shipper’s parent shipment, with
tracking.journeyholding every segment. - Creates one child shipment per segment in the responsible member’s account, as an injection (chapter 18) with
injection.channel: "carrier",injection.partner= the previous member (or the network for segment 1), andlabel_modeper the interline agreement. - Issues the shipper one label, normally the first member’s, or a network label when the agreement says
label: "network".
3. Interline agreements
An interline agreement lets one member hand shipments to another at agreed points, on agreed terms.
Endpoints:
4. Network operator controls
The operator account (type: "platform") governs the network through objects it already has:
- Fees:
pricing_rules withtype: "markup", scoped byconditions.carriersor by composed services. - Listing and quality: member
carrier.status, plus network-wideservice_leveltargets. These are optional objects (sla_) with{ carrier, metric: "on_time_delivery" | "first_attempt_success" | "scan_compliance", target, window_days }. The operator reads achieved values atserviceLevel(GraphQL Interface query), computed from trackers. - Shared facilities: facilities owned by the operator account, usable as handoff points by any member.
- Disputes:
disputeSettlement(GraphQL Interface mutation) (§5).
5. Settlement
Every money movement between parties is a ledger entry, and entries roll up into periodic settlements.typeisshipper_charge(shipper to network),segment_charge(network to member),handoff_fee,network_fee,adjustment(reweighs at receipt, chapter 18 §6),claim(loss or damage, charged to the member liable at the time), orrefund.statusispending(the shipment is not yet delivered, or the period is open),posted, orreversed.- Settlements (
stl_) aggregate entries per account and period:{ account, period: { from, to }, currency, totals: { debits, credits, net }, status: "open" | "closed" | "invoiced" | "paid" | "disputed", statement: "file_..." }.
invoice with kind: "settlement" (chapter 28 §1). Members are paid through payouts on the network’s payments connection (chapter 28 §6), so the settlement records who owes whom and the payments interface moves the money.
6. Events
account.listed, account.paused, account.delisted, interline_agreement.proposed, .signed, .activated, .suspended, .terminated, ledger_entry.posted, settlement.closed, settlement.disputed, service_level.breached. Members receive the events for their own child shipments. Shippers receive events for their parent shipments.