Book a freight shipment
Changed onBook one of the offers returned by Get freight quotes. Booking dispatches the shipment with the LTL carrier and generates the shipment's documents, such as the Bill of Lading.
As with quoting, there are two ways to book:
- Linked to an existing shipment. Provide shipment_id. The shipment must already have a freight quote — call Get freight quotes for it first. The origin, destination, and handling units all come from the shipment and its saved freight configuration, so ship_from, ship_to, and handling_units must be omitted.
- Inline. Omit shipment_id and provide ship_from, ship_to, and handling_units. A shipment record is created for the booking and marked as shipped.
Pass the offer_id from the offer you are booking. The provider connection, carrier, and expiration are resolved server-side from the stored offer.
Request
- Base URL: https://api.shipengine.com
- URL: https://api.shipengine.com/v1/freight/shipments
- Auth: API key in header API-Key
Request body
Example request
{
"shipment_id": "se-28529731",
"offer_id": "0f2b41d8-6a17-4c9e-8f52-b71d3e9c4a68",
"ship_from": {
"name": "Marcus Bell",
"company_name": "Northgate Distribution",
"address_line1": "4200 Industrial Pkwy",
"address_line2": "Dock 12",
"city_locality": "Grand Rapids",
"state_province": "MI",
"postal_code": "49512",
"country_code": "US",
"phone": "+1 616 555 0142",
"email": "dock@northgate-dist.example",
"location_type": "commercial"
},
"ship_to": {
"name": "Marcus Bell",
"company_name": "Northgate Distribution",
"address_line1": "4200 Industrial Pkwy",
"address_line2": "Dock 12",
"city_locality": "Grand Rapids",
"state_province": "MI",
"postal_code": "49512",
"country_code": "US",
"phone": "+1 616 555 0142",
"email": "dock@northgate-dist.example",
"location_type": "commercial"
},
"pickup_details": {
"pickup_date": "2026-04-17",
"ready_time": "09:00",
"close_time": "16:30",
"location_type": "commercial"
},
"references": [
{
"type": "purchase_order",
"value": "PO-84213"
}
],
"pickup_instructions": "Check in with the guard at gate 3 before backing into dock 12.",
"delivery_instructions": "Delivery appointments accepted between 08:00 and 11:00 only.",
"handling_instructions": "Do not double stack. Load with forks from the long side.",
"notifications": [
{
"events": [
"booked",
"in_transit"
],
"email_addresses": [
"logistics@example.com"
]
}
]
}Response
The request was a success.
Example response
{
"freight_shipment_id": "se-28529731",
"shipment_id": "se-28529731",
"freight_provider_account_id": "se-28529731",
"freight_provider_code": "UNISHIPPERS",
"status": "booked",
"bol_number": "BOL-20260417-4821",
"pro_number": "072-51293847",
"confirmation_number": "FXFE-PU-884215",
"created_at": "2026-09-18T14:54:44Z",
"documents": [
{
"type": "BILL_OF_LADING",
"url": "https://api.shipengine.com/v2/downloads/p1/a1b2c3d4e5f6/bill_of_lading.pdf"
}
],
"notifications": [
{
"events": [
"booked",
"in_transit"
],
"email_addresses": [
"logistics@example.com"
]
}
]
}Changes
- warning
added the new
bring_your_own_label_not_supportedenum value to the//response property for the response status - warning
added the new
bring_your_own_label_not_supportedenum value to the//response property for the response status - warning
added the new
bring_your_own_label_not_supportedenum value to the//response property for the response status - warning
added the new
multiple_sales_ordersenum value to the//response property for the response status - warning
added the new
multiple_sales_ordersenum value to the//response property for the response status - warning
added the new
multiple_sales_ordersenum value to the//response property for the response status - warning
added the new
sales_order_link_requiredenum value to the//response property for the response status - warning
added the new
sales_order_link_requiredenum value to the//response property for the response status - warning
added the new
sales_order_link_requiredenum value to the//response property for the response status
- warning
- breaking
the
/response's property type changed from no type toobjectfor status - breaking
the
/response's property type changed from no type toobjectfor status - breaking
the
/response's property type changed from no type toobjectfor status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
removed from the
/response propertyallOflist for the response status - info
removed from the
/response propertyallOflist for the response status - info
removed from the
/response propertyallOflist for the response status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status
- breaking