Skip to content

Create a shipment

Logistics module

POST/shipmentsshipments.create

A shipment into or out of a venue. Creates a shipment. Requires `Idempotency-Key`; a replay returns the original response. The organization is derived from the credential or the parent row, never from the body.

  • Requires the capability logistics.shipment.write.
  • OAuth scopes: logistics.
  • Send an Idempotency-Key header. A replay with the same key returns the original response.
  • Error statuses: 400, 401, 409, 422, 429. Errors are RFC 9457 problem details.

Request body: ShipmentCreate

shipments.create: ShipmentCreate
FieldTypeRequiredDescription
project_idstring (uuid)YesIdentifier of the project.
tracking_identifierstring | nullNoCarrier tracking identifier.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
directionstringYesInbound or outbound.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
ships_atstring (date-time) | nullNoExpected arrival or departure.
carrier_counterparty_idstring (uuid) | nullNoIdentifier of the carrier, as a counterparty of the org.
freight_type_enum_idstring | nullNoCanon freight type, from xpms.std_enumeration.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
arrives_atstring (date-time) | nullNoWhen the shipment is due to arrive.
uridUrid | nullNo
descriptionstring | nullNoWhat the shipment carries, in a sentence.Constraints: length 1 to 2000
originstring | nullNoWhere the freight ships from, as a locality.Constraints: length 1 to 200
sender_counterparty_idstring (uuid) | nullNoIdentifier of the vendor sending the freight; the carrier is carrier_counterparty_id.
pallet_countinteger | nullNoNumber of pallets.Constraints: range 0 to any
piece_countinteger | nullNoNumber of pieces.Constraints: range 0 to any
length_ftnumber | nullNoLength of the load in feet.
width_ftnumber | nullNoWidth of the load in feet.
height_ftnumber | nullNoHeight of the load in feet.
weight_lbnumber | nullNoWeight of the load in pounds.
trailer_licensestring | nullNoLicense plate of the trailer.Constraints: length 1 to 100
seal_identifierstring | nullNoNumber of the seal applied to the trailer.Constraints: length 1 to 100
bill_of_lading_identifierstring | nullNoBill of lading number issued by the carrier.Constraints: length 1 to 100
{
  "project_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "tracking_identifier": "CF123456789",
  "direction": "inbound",
  "ships_at": "2026-10-08T14:30:00Z",
  "carrier_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "freight_type_enum_id": "ENM-041",
  "arrives_at": "2026-10-08T14:30:00Z",
  "description": "Two pallets of truss and motors.",
  "origin": "Orlando, FL",
  "sender_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "pallet_count": 2,
  "piece_count": 14,
  "length_ft": 48,
  "width_ft": 8.5,
  "height_ft": 9,
  "weight_lb": 12000,
  "trailer_license": "FL TRL-4410",
  "seal_identifier": "SL-778120",
  "bill_of_lading_identifier": "BOL-2027-0611"
}

Response 201: Shipment

shipments.create: Shipment
FieldTypeRequiredDescription
idstring (uuid)YesIdentifier of the shipment.
org_idstring (uuid)YesIdentifier of the owning organization, derived from the parent row and never accepted from the caller.
created_atstring (date-time)YesWhen the row was created.
created_bystring (uuid) | nullYesIdentifier of the person who created the row; null when a seed, platform or system process created it.
updated_atstring (date-time)YesWhen the row was last updated.
updated_bystring (uuid) | nullYesIdentifier of the person who last updated the row; null when a seed, platform or system process updated it.
project_idstring (uuid)YesIdentifier of the project.
tracking_identifierstring | nullYesCarrier tracking identifier.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
directionstringYesInbound or outbound.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
ships_atstring (date-time) | nullYesExpected arrival or departure.
carrier_counterparty_idstring (uuid) | nullYesIdentifier of the carrier, as a counterparty of the org.
freight_type_enum_idstring | nullYesCanon freight type, from xpms.std_enumeration.Constraints: pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
arrives_atstring (date-time) | nullYesWhen the shipment is due to arrive.
shipment_numberintegerYesNumber within the project; the display key is {project_key}-{shipment_number}.Constraints: range 1 to any
uridUrid | nullYes
descriptionstring | nullYesWhat the shipment carries, in a sentence.Constraints: length 1 to 2000
originstring | nullYesWhere the freight ships from, as a locality.Constraints: length 1 to 200
sender_counterparty_idstring (uuid) | nullYesIdentifier of the vendor sending the freight; the carrier is carrier_counterparty_id.
pallet_countinteger | nullYesNumber of pallets.Constraints: range 0 to any
piece_countinteger | nullYesNumber of pieces.Constraints: range 0 to any
length_ftnumber | nullYesLength of the load in feet.
width_ftnumber | nullYesWidth of the load in feet.
height_ftnumber | nullYesHeight of the load in feet.
weight_lbnumber | nullYesWeight of the load in pounds.
trailer_licensestring | nullYesLicense plate of the trailer.Constraints: length 1 to 100
seal_identifierstring | nullYesNumber of the seal applied to the trailer.Constraints: length 1 to 100
bill_of_lading_identifierstring | nullYesBill of lading number issued by the carrier.Constraints: length 1 to 100
{
  "id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "org_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "created_at": "2026-10-08T14:30:00Z",
  "created_by": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "updated_at": "2026-10-08T14:30:00Z",
  "updated_by": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "project_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "tracking_identifier": "CF123456789",
  "direction": "inbound",
  "ships_at": "2026-10-08T14:30:00Z",
  "carrier_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "freight_type_enum_id": "ENM-041",
  "arrives_at": "2026-10-08T14:30:00Z",
  "shipment_number": 7,
  "urid": "4000.01.01",
  "description": "Two pallets of truss and motors.",
  "origin": "Orlando, FL",
  "sender_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "pallet_count": 2,
  "piece_count": 14,
  "length_ft": 48,
  "width_ft": 8.5,
  "height_ft": 9,
  "weight_lb": 12000,
  "trailer_license": "FL TRL-4410",
  "seal_identifier": "SL-778120",
  "bill_of_lading_identifier": "BOL-2027-0611"
}

Code samples

curl -X POST "$XOS_BASE_URL/shipments" \
  -H "Authorization: Bearer $XOS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","tracking_identifier":"CF123456789","direction":"inbound","ships_at":"2026-10-08T14:30:00Z","carrier_counterparty_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","freight_type_enum_id":"ENM-041","arrives_at":"2026-10-08T14:30:00Z","description":"Two pallets of truss and motors.","origin":"Orlando, FL","sender_counterparty_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","pallet_count":2,"piece_count":14,"length_ft":48,"width_ft":8.5,"height_ft":9,"weight_lb":12000,"trailer_license":"FL TRL-4410","seal_identifier":"SL-778120","bill_of_lading_identifier":"BOL-2027-0611"}'
const { data } = await xos.shipments.create({
    "project_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
    "tracking_identifier": "CF123456789",
    "direction": "inbound",
    "ships_at": "2026-10-08T14:30:00Z",
    "carrier_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
    "freight_type_enum_id": "ENM-041",
    "arrives_at": "2026-10-08T14:30:00Z",
    "description": "Two pallets of truss and motors.",
    "origin": "Orlando, FL",
    "sender_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
    "pallet_count": 2,
    "piece_count": 14,
    "length_ft": 48,
    "width_ft": 8.5,
    "height_ft": 9,
    "weight_lb": 12000,
    "trailer_license": "FL TRL-4410",
    "seal_identifier": "SL-778120",
    "bill_of_lading_identifier": "BOL-2027-0611"
  });
response = xos.shipments.create({"project_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f", "tracking_identifier": "CF123456789", "direction": "inbound", "ships_at": "2026-10-08T14:30:00Z", "carrier_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f", "freight_type_enum_id": "ENM-041", "arrives_at": "2026-10-08T14:30:00Z", "description": "Two pallets of truss and motors.", "origin": "Orlando, FL", "sender_counterparty_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f", "pallet_count": 2, "piece_count": 14, "length_ft": 48, "width_ft": 8.5, "height_ft": 9, "weight_lb": 12000, "trailer_license": "FL TRL-4410", "seal_identifier": "SL-778120", "bill_of_lading_identifier": "BOL-2027-0611"})
xos shipments create --data '{"project_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","tracking_identifier":"CF123456789","direction":"inbound","ships_at":"2026-10-08T14:30:00Z","carrier_counterparty_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","freight_type_enum_id":"ENM-041","arrives_at":"2026-10-08T14:30:00Z","description":"Two pallets of truss and motors.","origin":"Orlando, FL","sender_counterparty_id":"0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f","pallet_count":2,"piece_count":14,"length_ft":48,"width_ft":8.5,"height_ft":9,"weight_lb":12000,"trailer_license":"FL TRL-4410","seal_identifier":"SL-778120","bill_of_lading_identifier":"BOL-2027-0611"}'