The role of a Shipper starts the flow of data into the Orchestro Network. A Brand or a Carrier Participant can act as a Shipper by submitting an order to the network. A Participant Carrier in the role of the last mile Carrier, receives data from the Orchestro network and pushes events to Orchestro completing the package data lifecycle to the destination delivery.

For better understanding, see the table below for the journey of the parcel from origin to destination in a multi-party network.

StepsPartyRoleDescriptionData Provided by PartyData Available from Platform
1Origin Carrier or BrandShipperOrigin Carrier acts as a Shipper and initiates sequence by sending manifest to OrchestroManifest info

First mile tracking
Middle/last mile tracking

Async error messages
2OrchestroLast mile CarrierOrchestro acts as Carrier and receives manifest from Origin Carrier/BrandAll tracking infoAll tracking info

Async error messages
3OrchestroShipperOrchestro acts as Shipper and provides manifest to last Mile Carrier (middle mile may or may not be involved)Manifest info

All tracking info
All tracking info

Async error messages
4Last mile carrierCarrierDestination carrier receives manifest from Orchestro and delivers parcel to destinationLast mile tracking infoFirst/middle mile tracking info

Async error messages

Manifest Data Feed

The manifest data feed will send the information in the format as defined in the Standard Manifest section.

Tracking Data Feed

The tracking data feed will send the information in the format as defined in the Standard Event Format section.

Error Data Feed

Most errors encountered in the Orchestro system are asynchronous and could be due to an input from the carrier system or an event received from the network. Errors are published to all affected parties in real time, and carriers are expected to consume and process these errors.

A JSON object is used to deliver error messages via encapsulation. The body of the error message is identified via the headers in the parent object. Other headers include information about the origin and destination of the message.

FieldDescription
parcelSourceCARRIER or SHIPPER
sourceAccountNumberArray of Account number of carriers whose data experienced an issue
dispositionWARNING or ERROR
dispositionCodeCode for the error
dispositionDetailType of the object appearing in body
messageDetail of the error or warning encountered
BodyJSON Object
[
  {
    "parcelSource": "CARRIER",
    "sourceAccountNumber": [
      {
        "accountNumber": "TEST_ACCOUNT_1",
        "accountType": "CARRIER"
      }
    ],
    "disposition": "ERROR",
    "dispositionCode": "E_NO_ZIP_COVERAGE",
    "dispositionDetail": "universal-manifest",
    "message": [
      "Zip 10001 is not covered, package with tracking id ZY109879 cannot be delivered"
    ],
    "body": "{\"manifest_id\": 12345, \"package_id\": \"ABC123\", \"tracking_id\": \"ZY109879\", ...}"
  },
  {
    "parcelSource": "CARRIER",
    "sourceAccountNumber": [
      {
        "accountNumber": "TEST_ACCOUNT_1",
        "accountType": "CARRIER"
      }
    ],
    "disposition": "WARNING",
    "dispositionCode": "W_DUPLICATE_SCAN",
    "dispositionDetail": "universal tracking",
    "message": [
      "tracking id ZY109879 got a second duplicate scan with scan code P at 2024-01-15T15:55Z which will be ignored"
    ],
    "body": "{\"carrier_tracking_id\": \"ZY109879\", \"scan_code\": \"P\", \"scan_time\": \"2024-01-15T15:55Z\", ...}"
  }
]