May 2, 2025
You can now resend failed webhooks by selecting Replay Webhook next to the relevant event in the shipment's Activity Log. Note that this option is only available to Admin users.
April 10, 2024
The default label format for custom shipments is now ZPL instead of PDF.
March 5, 2024
Webhooks now include statuses on the package level. Note that package-level tracking is available when this level of detail is provided by the carrier.
January 30, 2024
- You can now send shipping manifests with the Manifest Shipments endpoint. The manifest includes a list of all shipments the carrier collected and the corresponding truck number.
Note that after creating a manifest, the shipments included are no longer editable. Creating a manifest may also finalize shipping labels and add them to your invoice from the carrier. - When a new shipment is created using the Create Shipment form with a location ID, location_id is sent in webhooks in place of the complete address object.
January 23, 2024
- You can now determine the origin of a shipment in Delivery Hub using the new
created_by
parameter.
Possible values include:api
(default)packer
for shipments created in the fulfillment screenhub
for shipments created in the Create Shipment screen
- [Fixed bug] The shipment modal and webhooks did not include the
user_id
of users who created shipments using the Create Shipment form. - You can now add Source IDs to products in the Create Shipment form in the UI.
December 21, 2023
- Carrier cancellation reasons are now included in the Shipment Canceled webhook.
- To accommodate German phone numbers, Delivery Hub now validates phone numbers with fewer than eight digits. Learn more about formatting requirements in the Customer object.
November 15, 2023
- Shipping labels are now stored in Delivery Hub's cloud file storage instead of being directly stored in the database. You can now find shipping label links under the
label_url parameter
in Shipment responses and webhooks, in addition to the base64-encodedlabel
parameter. - To streamline API integration and data management, the Shipments object can now be nested within the Fulfillment object when sending Create Fulfillment, Update Fulfillment, Create Order, and Update Order requests.
- You can now configure shipping rules using your internal service levels. For example, if certain hazardous materials require delivery within 72 hours, you can add the
72 hours
tag to therequired_service_level
parameter, and create a shipping rule that assigns shipments with this tag to specified carrier services. - Shipment responses and webhooks now include the
carrier_tracking_url
parameter so you can quickly access the carrier’s tracking page to follow shipment statuses. - For greater flexibility, the validation requirements for the
street1
andcity
parameters in the Address object have been updated. The minimum length forstreet1
is now 1 character, and the maximum length forcity
is now 40 characters.
October 26, 2023
For greater flexibility, the validation requirements for the street2
and street3
parameters in the Address object have been reduced to a minimum of 1 character when the field is filled (neither field is required).
October 4, 2023
- To speed up carrier assignment using shipping rules, Delivery Hub’s quote requests to carriers now time out after 3 seconds.
- The Shipments webhook payloads now include the
estimated_delivery_cost
parameter, enabling you to compare quoted and actual prices once a shipment is confirmed. - To improve custom label formatting, long reference fields are now truncated to fit neatly on the label.
September 27, 2023
- It is now easier to reduce costs in Delivery Hub! You can now automatically assign shipments to the cheapest carrier and service using shipping rules. To be sure that shipping rules are applied for a shipment, confirm that
disable_shipping_rules
isfalse
.
Learn more about setting up Shipping Rules. - Delivery Hub now prints labels sequentially to reduce confusion and make it easier to attach the correct label to each package.
September 21, 2023
To comply with carrier limitations and improve label formatting, the character limit for Customer names has been updated to 35.
September 20, 2023
You can now include a printer_id
and tray_id
in the Print Shipment Documents request, overriding selections in user settings.
September 11, 2023
You can now send shipment documents to print using the Print Documents API endpoint. Sending just the shipment ID prints all documents for a shipment, and you can optionally select to print only a specific document type
, print documentation for only a specified shipment_package_id
, and send to a specific printer_id
.
September 6, 2023
- You can now access Proof of Delivery images (PNG/JPG) from carriers in webhooks and the Get Shipment API response via a convenient link in the
proof_of_delivery
parameter. - The length restrictions of some address fields have changed, improving consistency between objects:
phone
: 10-15 charactersstreet1
,street2
,street3
,city
,state
, andcompany
: 2-35 characterspostal_code
: 2-20 charactersname
: 2-35 characters
August 23, 2023
Shipments responses and webhooks now include an array of products included in the shipment.
August 16, 2023
- The Shipment response now includes the
base_charge
in addition tonet_charge
,taxes
,surcharges
, anddiscounts
. - Shipping labels now include source IDs. To do this, Delivery Hub now includes the fulfillment
source_ID
in API requests to the carrier. - You can now update items (products) in an order or fulfillment regardless of its status.
- The Get Quotes response now includes
carrier
names in each quote object. Previously, only theservice_name
andservice_type
were included.
August 10, 2023
[Bug fix] Orders and fulfillments without any packed shipments were incorrectly marked as partially_fulfilled
. Now, only orders and fulfillments with at least one shipment created are marked as partially_fulfilled
and are otherwise considered new
.
August 2, 2023
- You can now delete a shipment using its source ID. Learn more.
- You can now update products in a fulfillment while the fulfillment’s status is
partially_fulfilled
(in addition tonew
). You can optionally push this change to the order level by adding"force_products_update" : true
.- Important notes:
- When the product
id
is not included, all required product fields (name, price, length, etc.) must be included. - When
"force_products_update" : true
is not included in the Update Fulfillment call, Delivery Hub only allows the addition of products on the fulfillment level if they are already included on the order level.
- When the product
- To update a product, send the Update Fulfillment call with the new data in place of the old.
For example, if a fulfillment includes a pair of jeans in size L and the customer requests size M instead, you can send the Update Fulfillment call with size M listed instead of L, and the product will be updated in Delivery Hub. - To delete a product on the fulfillment level, send the Update Fulfillment call without the item to delete.
To add a product, add it to the product array. - To remove an item from one fulfillment and move it to another fulfillment in the same order:
- Send the Update Fulfillment call with the item removed from the Products list.
Do not include"force_products_update" : true
(or mark this parameter asfalse
) so the item isn’t removed from the order level. - Send another Update Fulfillment call for the fulfillment you want to move the item to, adding the item to the second fulfillment’s product list.
- Send the Update Fulfillment call with the item removed from the Products list.
- Important notes:
July 27, 2023
- Shipping locations can now be identified using a
source_id
. - IDs generated in Delivery Hub now use integer format instead of string. This does not include
source_id
andquote_id
parameters. - You can now create a new Shipment in Delivery Hub using its source ID. Learn more.
- The
locale
parameter in the Customer object has been changed tolanguage
.
July 18, 2023
- API spelling consistency has improved with more parameters and descriptions using US English spelling. Instances of
harmonised code
are nowharmonized code
andfulfil
are nowfulfill
. - Fulfillments can now be created using a shipping location’s source ID. The parameter to include is
shipment_location_source_id
. Learn more about adding shipping locations in the Delivery Hub UI.
July 10, 2023
The following parameters have been added to the Fulfillment object to support PUDO and returns use cases:
Parameter | Description | Possible values |
---|---|---|
fulfillment_method | Designates if the fulfillment method is direct delivery to the recipient's address or via a PUDO (pickup/dropoff) location. When empty, the default value is direct. | pudo direct |
fulfillment_type | Designates if this is a delivery or return. When empty, the default value is delivery. | delivery return |
pudo_location_id | The ID of the PUDO (pickup/drop off) location of the sender or recipient. | Valid uuid |
Along with the new parameters, new validations have been added:
- Either
sender_location_id
orsender_ address
are required. - Either
recipient_location_id
orrecipient_ address
are required. - If the
fulfillment_method
isdirect
(notpudo
), an error will be returned if a value is included forpudo_location_id
. - When sending
pudo_location_id
, values are also required forshipping_account_id
andservice
.
July 4, 2023
-
The
locale
parameter has been added to the customer object. The new parameter uses ISO 639-1 codes to define customer language for delivery notifications. Learn more about configuring notifications. -
The following deprecated parameters have been removed:
sender_start
,sender_end
,recipient_start
, andrecipient_end
. -
You can now use your external system's source ID for a location as the value for the
sender_location_id
andrecipient_location_id
parameters. -
There have been a few clarifications to the process of assigning statuses:
- Shipment statuses cannot be assigned the
PartiallyFulfilled
status. - Fulfillments with no shipments are assigned the
New
status. - Fulfillments that have at least one shipment with a status of
ReadyToShip
are assigned thePartiallyFulfilled
status. - Delivery Hub always displays the status that is earliest in the delivery flow for a list of shipments. For example, if an order or fulfillment has one shipment that is ready for carrier collection and another that is out for delivery, the order or fulfillment is assigned the
ReadyToShip
status. - Orders with no fulfillments are assigned the
New
status.
- Shipment statuses cannot be assigned the