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 screen
    • hub 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-encoded label 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 the required_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 and city parameters in the Address object have been updated. The minimum length for street1 is now 1 character, and the maximum length for city 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 is false.
    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 characters
    • street1, street2, street3, city, state, and company: 2-35 characters
    • postal_code: 2-20 characters
    • name: 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 to net_charge, taxes, surcharges, and discounts.
  • 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 the service_name and service_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 to new). 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.
    • 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:
      1. Send the Update Fulfillment call with the item removed from the Products list.
        Do not include "force_products_update" : true (or mark this parameter as false) so the item isn’t removed from the order level.
      2. 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.

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 and quote_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 to language.

July 18, 2023

  • API spelling consistency has improved with more parameters and descriptions ‌using US English spelling. Instances of harmonised code are now harmonized code and fulfil are now fulfill.
  • 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:

ParameterDescriptionPossible values
fulfillment_methodDesignates 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_typeDesignates if this is a delivery or return. When empty, the default value is return
pudo_location_idThe 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 or sender_ address are required.
  • Either recipient_location_id or recipient_ address are required.
  • If the fulfillment_method is direct (not pudo), an error will be returned if a value is included for pudo_location_id.
  • When sending pudo_location_id, values are also required for shipping_account_id and service.

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, and recipient_end.

  • You can now use your external system's source ID for a location as the value for the sender_location_id and recipient_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 the PartiallyFulfilled 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.