Orders and Shipments

Shipments API endpoints

Logical process flow

order-flow description

Get a list of orders

Get a list of orders: Retrieves a list of all open and handled orders. Handled orders will only remain visible for 48 hours after being handled.

This endpoint sorts all your currently open and handled orders by the creation date in the descending order. This means that the new orders appear at the top of the list. It supports pagination and allows you to filter your orders based on the fulfilment methods. For more information about the fulfilment methods, see Filtering order items by fulfilment method.

In the response, this endpoint returns a summary of the order consisting of the following information:

  • The order Id.

  • Details of the items present in an order.

  • Date and time when the order was placed.

Use the order-id as an input parameter to the Get an order by order id endpoint to get all the information about a single order.

Filtering order items by fulfilment method

Get a list of orders endpoint provides you the following fulfilment methods to filter your orders:

  • Fulfilment by retailer (FBR) - Specifies that the logistics of the order is handled by the retailer.

  • Fulfilment by bol (FBB) - Specifies that the logistics of the order is handled by bol.

  • ALL - Includes both FBR and FBB orders.

    Filtering orders by FBB is useful if you are participating in logistics through bol.

Filtering order items by status

Using the Get a list of orders endpoint, orders can be filtered by the following statuses:

  • OPEN: Retrieves all order items that still need to be shipped or cancelled.

    The following scenarios also fall under the category of OPEN orders:

    • Order items that have received the cancellation request but are yet to be cancelled.

    • Order items for which the ordered quantity is partially shipped or cancelled.

  • ALL: Retrieves all order items that were shipped or cancelled within the last 48 hours in addition to the open items.

  • SHIPPED: Retrieves all order items that are fully handled and were shipped within the last 48 hours.

Shipped items

When a part of the total quantity of an order item is shipped and the order item is fully handled, the status of the order item changes to SHIPPED. Then:

  • The order item remains visible when filtered with status=ALL for the next 48 hours.

  • The order item remains visible when filtered with status=SHIPPED for the next 48 hours.

  • The order item becomes visible in Get shipment list and Get a shipment by shipment id list.

Cancelled items

Once an order item is cancelled:

  • It remains visible when filtered with status=ALL for the next 48 hours.

If an FBR order item is not handled within three days of the expected delivery date, the order item will expire and automatically be cancelled by bol. The expiration date of an order item can be tracked through the expiryDate response field of the Get an order by order id endpoint.

Retrieving new or changed orders only

Use the change-interval-minute parameter of the Get a list of orders endpoint, to retrieve a list of all the new and changed orders within the specified timeframe. It sorts all your new and changed orders by the time of the latest change in the descending order. This means that orders that are changed last appear at the top of the list.

The events that are recognised as a change are:

  • A new order.

  • A cancellation requested by customer for one or more order items in an order.

  • Shipped order items within an order.

  • Cancelled order items within an order.

To avoid missing any orders, the value assigned to this parameter should be equal to or larger than the time elapsed between polling the API. For example, if you poll every 10 minutes, then assign a value of 12 minutes to the change-interval-minute parameter. As a result, you get a list of order items each having latestChangedDateTime field. You can use this field as a version identifier to check if version of the order item has changed compared to the most recent version in your system.

To use this parameter to its greatest advantage, combine it with the status parameter to filter on OPEN, SHIPPED or ALL order items. Combining the change-interval-minute parameter with status=ALL will return both open and handled orders. In case the status parameter is not specified, change-interval-minute parameter will return only open orders for the specified timeframe.

Retrieving orders for a specific date

Use the latest-change-date parameter of the Get a list of orders endpoint, to retrieve a list of all the order items that were last changed on a given date for up to three months in the past. It sorts all your changed orders by the time of the latest change in the descending order. This means that orders that are changed last appear at the top of the list.

The events that are recognised as a change are:

  • A new order.

  • A cancellation requested by customer for one or more order items in an order.

  • Shipped order items within an order.

  • Cancelled order items within an order.

To use this parameter to its greatest advantage, combine it with the status parameter to filter on ALL order items. Combining the latest-change-date parameter with status=ALL will return both open and handled orders. In case the status parameter is not specified, latest-change-date parameter will return only open orders for the specified date.

It is recommended to not use the latest-change-date parameter in combination with the change-interval-minute parameter while using the Get a list of orders endpoint. This will result in an error.
Use the latest-change-date parameter only in case of emergency. Do not use it as a part of the standard workflow.

Retrieving VVB Only Orders

The vvb-only parameter is used in the Get a list of orders endpoint to filter results specifically for VVB orders. In this context, VVB refers to orders fulfilled via the FBR (Fulfillment by Retailer) method and the bol distribution party.

  • When vvb-only=true - The response includes only new or changed VVB orders. If combined with fulfilment-method=FBB, the response will be empty, as FBB orders are excluded by design.

  • When vvb-only=false or the parameter is not set - The API returns all orders, for either FBR, VVB, FBB, or all, as per the standard behavior.

Get an order by order id

Get an order by order id: Retrieves specific details of an order using the orderId. It returns all open items in addition to the items that were shipped or cancelled within the last three months.

This endpoint gives you the following details about an order in its response body:

  • Order identifier - The items within the order are known as order items, and the `orderItemId`corresponds to each order item in a particular order . You can use this Id to perform specific tasks such as shipping or cancelling an order item within an order.

  • Order items in the order - This can either be 1 if the customer ordered only 1 item, or more if the customer ordered more than 1 item within the same order. The total price of an order item is calculated by multiplying the unitPrice with quantity.

    It includes details of the amount of products ordered, shipped products and cancelled products for a particular order item Id. Additionally, it offers the details related to products, fulfilment, offers and commisions. For more information on orderItems, see Orders Redoc.

  • Pick up point details (if applicable for an order).

  • Date and time of placing the order.

  • Billing and shipping details.

This endpoint gives you insights on the shipment and billing details that can be used for your shipments and to make invoices. Since billing and shipping details include sensitive customer information such as address, vatNumber and kvkNumber, the customer can choose to conceal all their personal information. If this option is enabled by the customer, the Get an order by order id endpoint returns the value ANONYMISED for all the fields in the shipmentDetails and billingDetails element except the Salutation field, which returns the value UNKNOWN.

The retailer must erase all the customer data from their own database if the customer chooses to conceal their information. The`Salutation` field returns the value UNKNOWN when the customer has not provided information about their gender. The email field returns no value after 61 days of placing the order. The billing information is not exposed to the retailer if the order has been created one month ago.

By default, a single order request returns all items in the order, including the FBB and FBR fulfilment methods.

To verify this, check the fulfilment method per orderItem when reviewing your open order. The order items can also be a mixture of Verzenden via bol and non-Verzenden via bol shipping methods, which will be indicated by the distributionParty being either BOL or RETAILER.

Shipment time frame

The timeFrameType field in Get an order by order id indicates which delivery time option was selected by the customer during the checkout. The possible values are:

Table 1. Timeframe values
Value Delivery type Remarks

STANDARD

All delivery types

This is the default value for FBR orders being delivered during the daytime.

EVENING

All delivery types

This is the default value for FBR orders being delivered during the evening.

APPOINTMENT

Logistics via bol. Currently not available for FBR orders.

Delivery option for oversized or overweighted orders for which the standard delivery option is not possible. This requires the customer to agree on a timeslot for the appointment.

SAMEDAY

Logistics via bol

Delivery option for orders to be delivered on the same day as the order is placed.

SUNDAY

Logistics via bol

Delivery option for orders to be delivered on Sunday during the daytime.

Cancel an order item by an order item id

Cancel an order item by an order item id: Cancels an order item and provides a reason for the cancellation.

There are two scenarios that can occur regarding cancelling an order item:

  1. Cancellation by the customer

    When retrieving a single order or a list of orders, you receive a cancellationRequest value for every order item. If this value is set to True, this implies that the order item is requested to be cancelled by the customer. In such cases, you should confirm the cancellation request through the Cancel an order item by an order item id endpoint and not ship this order item.The customer’s payment will be refunded by bol.

    It is possible that a customer only cancels a single item within an order.In such cases, you only have to cancel this one item and can ship the other order items.

    To confirm the cancellation of an order item within an order, assign the value REQUESTED_BY_CUSTOMER to the reasonCode parameter.

    A cancellation from the customer will not impact your cancellation performance indicator negatively.
    During the time between retrieving an open order and actually shipping an order item or cancelling an order item yourself, a customer can still request a cancellation. If there is a lot of time between retrieving an open order and shipping the order item, it is advisable to retrieve all the open orders again just before shipping the order item to check for a possible cancellation request from the customer.
  1. Cancellation by the retailer

    If you cannot ship an order item to the customer, for example due to missing stock, it is possible to cancel an order item from the order yourself.

    Cancelling an order item without a cancellation request from the customer will lead to a negative score on your cancellation performance indicator. You can track your performance scores through the Get performance indicators endpoint. bol will manage the refund towards the customer when cancelling an order item yourself.

    Using the reason REQUESTED_BY_CUSTOMER without a customer cancellation request will impact your performance scores negatively.

Create a shipment

Create a shipment: Creates a shipment and provides shipment information.

With this endpoint, it is possible to ship one or multiple order items for a specific customer order. There are two ways to do this:

  1. Shipping using your own shipping label. If you want to ship an order item using your own shipment, you need to provide transport information. For this we require a transporterCode (see table below) and a trackAndTraceCode. Note that the trackAndTraceCode can optionally be left empty in this call.

    If you want to send them to bol later, you can use the Add transport information to a shipment endpoint. However, there is no need to do so if you send all the data to us at once.

    If you ship this order item by using your own transporter, you need to leave the shippingLabelId empty. It is not possible to submit transport information and also a shippingLabelId.

  2. Shipping using a purchased shipping label from bol. If you purchased a shipping label from bol, you can either:

    • Add the shippingLabelId which you obtained from get delivery options to the response. In this case, you need to omit the transport information.

    • Or, use the fields in the response from Get a shipping label in the transport object.

      • All items bearing a bol shipping label must be dispatched using a single shipment request.

      • In cases where VVB items are combined with non-VVB items, it is possible to transport them in the same package by generating multiple shipment requests utilizing the same Track and Trace code.

      • In case you want to create multiple shipments for one order item, the quantity field can be used. In the optional quantity field, you can specify the quantity so multiple shipments can be created for one order item. If the quantity field is not provided, the remaining open item quantity will be used.

Get shipment list

Get shipment list: Returns a list of shipments.

This endpoint is used to get all your shipments, sorted by the shipment date in descending order. The endpoint supports pagination by using the page query parameter, and allows you to filter on FBB orders if you are participating in Logistics Via bol and FBR orders. Moreover, you can search within all the shipments on orderId, so that you can find easily and quick a single shipment based on the orderId.

In the response, you will find – among other attributes – the shipmentId, shipmentItems and the related transport information. You can use the shipmentId to fetch more shipment details using the Get a shipment by shipment id endpoint. Moreover, the transportId is in the same response, and can be used to add transport information in case you didn’t do so while shipping the order item.

This endpoint will only return shipments that were created over the past three months.

Get a shipment by shipment id

Get a shipment by shipment id: Returns a single shipment.

To fetch the details of a shipment, you can use this endpoint to get all the shipment details based on the shipmentId. In the response, you will find the items that where shipped, the transport information, and the details of the customer. In compliance with GDPR, we omit the transport information from the response when the transport is more than a year old.

With the specific shipmentId you can get shipment information from up to two years ago.

Monitoring a shipment

The transport.transportEvents element in Get a shipment by shipment id allows you to track the shipment events when they are updated in the system.Transport events will show the entire history of the shipment with timestamps.You can use Subscriptions to receive updates whenever a new transport event is added to a shipment.

For a multi-line order which is shipped with one Track and Trace code, you will see transport events for only one of the orderlines in the order, even though they apply to the whole order.This will be improved in the future.

Add transport information to a shipment

Add transport information by transport id: Adds transport information to a shipment.

It is possible that you already want to ship an order item, but you don’t know the track and trace details at that moment in time. When this occurs, the customer will not be informed of the track and trace-related information. This is not an optimal customer experience for your customer. In this scenario, this endpoint allows you to still send us the track and trace code. From that moment on, the customer will also receive updates on events when this track and trace code is scanned.

Customers pay attention to the track and trace code, and it is therefore important that you provide this data.

This endpoint only allows you to add the tracking information only when the trackAndTrace code is missing. It is recommended to not use this endpoint to update the transporterCode or to update the current trackAndTrace code of a shipment.
You are not required to use this endpoint if you provide us directly with the track and trace code, and the transporter information when shipping an order item. For that reason, this step is optional in your flow when shipping an order item.

Transporters

The table below shows all available transporter codes that can be used while creating a shipment or adding a transporter code to a shipment that was created earlier. Please make sure that the transporter code is available for the version of the API that you are using at that time.

Some transporters use a DASH while others use an UNDERSCORE. Please make sure to use the correct notation.

This list applies to the current version of the Retailer API and could change between versions.

Table 2. Transport services and corresponding transporter codes
Transporter / service API transporter code URL template URL language Receiver country

Briefpost

BRIEFPOST

N/A

N/A

N/A

UPS

UPS

https://wwwapps.ups.com/tracking/tracking.cgi?tracknum={trackTraceCode}

EN

NL and BE

PostNL

TNT

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=NL&T=C&L=NL

NL

NL

PostNL

TNT

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=BE&T=C&L=NL

NL

BE

PostNL

TNT

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=BE&T=C&L=FR

FR

BE

PostNL extra@home

TNT-EXTRA

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=NL&T=C&L=NL

NL

NL

PostNL extra@home

TNT-EXTRA

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=BE&T=C&L=NL

NL

BE

PostNL Briefpost Netherlands

TNT_BRIEF

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=NL&T=C&L=NL

NL

NL

PostNL Briefpost Belgium

TNT_BRIEF

https://postnl.nl/tracktrace/?B={trackTraceCode}&P={zipCode}&D=BE&T=C&L=NL

NL

BE

TNT Express

TNT-EXPRESS

https://www.tnt.com/webtracker/tracking.do?navigation=1&searchType=CON&respLang=en&respCountry=GENERIC&genericSiteIdent=.&cons={trackTraceCode}

EN

NL and BE

Dynalogic

DYL

https://trackentrace.dynalogic.eu/?ordernumber={trackTraceCode}&zipcode={zipCode}

EN

NL and BE

DPD Nederland

DPD-NL

https://tracking.dpd.de/parcelstatus?query={trackTraceCode}&locale=nl_BE

NL

BE

DPD België

DPD-BE

https://tracking.dpd.de/parcelstatus?query={trackTraceCode}&locale=nl_BE

NL

NL and BE

Bpost België Dutch Netherlands and Belgium

BPOST_BE

https://track.bpost.cloud/btr/web/#/search?itemCode={trackTraceCode}&postalCode={zipCode}&lang=NL

NL

NL and BE

Bpost België

BPOST_BE

https://track.bpost.cloud/btr/web/#/search?itemCode={trackTraceCode}&postalCode={zipCode}&lang=FR

FR

BE

Bpost Briefpost

BPOST_BRIEF

https://track.bpost.cloud/btr/web/#/search?itemCode={trackTraceCode}&postalCode={zipCode}&lang=NL

NL

NL and BE

DHLFORYOU

DHLFORYOU

https://dhlparcel.nl/nl/particulier/ontvangen/volg-uw-zending?tt={trackTraceCode}&pc={zipCode}

NL

NL and BE

GLS

GLS

https://gls-group.eu/BE/vl/pakket-volgen?match={trackTraceCode}

NL

BE

GLS

GLS

https://www.gls-info.nl/Tracking?parcelno={trackTraceCode}&zipcode={zipCode}

NL

NL

FedEx Nederland

FEDEX_NL

https://www.fedex.com/apps/fedextrack/?tracknumbers={trackTraceCode}&cntry_code=NL

NL

NL

FedEx Belgie

FEDEX_BE

https://www.fedex.com/apps/fedextrack/?tracknumbers={trackTraceCode}&cntry_code=BE

EN

BE

Anders

OTHER

N/A

N/A

N/A

DHL

DHL

https://dhlparcel.nl/nl/particulier/ontvangen/volg-uw-zending?tt={trackTraceCode}&pc={zipCode}

NL

NL and BE

DHL Germany

DHL_DE

https://www.dhl.com/nl-nl/home/tracking/tracking-parcel.html?submit=1&tracking-id={trackTraceCode}

NL

NL

DHL Germany

DHL_DE

https://www.dhl.com/be-nl/home/tracking/tracking-parcel.html?submit=1&tracking-id={trackTraceCode}

NL

BE

DHL Germany

DHL_DE

https://www.dhl.com/be-fr/home/tracking/tracking-parcel.html?submit=1&tracking-id={trackTraceCode}

FR

NL and BE

DHL Germany

DHL_DE

https://www.dhl.com/nl-en/home/tracking/tracking-parcel.html?submit=1&tracking-id={trackTraceCode}

EN

NL

DHL Germany

DHL_DE

https://www.dhl.com/be-en/home/tracking/tracking-parcel.html?submit=1&tracking-id={trackTraceCode}

EN

BE

DHL Global mail

DHL-GLOBAL-MAIL

https://webtrack.dhlglobalmail.com/?trackingnumber={trackTraceCode}

EN

NL and BE

DHL Global mail

DHL-GLOBAL-MAIL

https://webtrack.dhlglobalmail.com/?trackingnumber={trackTraceCode}&locale=nl

NL

NL and BE

DHL Same Day

DHL-SD

https://dhlparcel.nl/nl/particulier/ontvangen/volg-uw-zending?tt={trackTraceCode}&pc={zipCode}

NL

NL

Transportservice Nederlands

TSN

N/A

N/A

N/A

TransMission

TRANSMISSION

https://www.mijnzending.nl/portal/index.php?view=tt/vAnoniem&zendingnummer={trackTraceCode}&postcode={zipCode}`

NL

NL and BE

Parcel.nl

PARCEL-NL

https://www.dpost.be/Parceltracking/tracking/trackingnumber/{trackTraceCode}

NL

NL and BE

Packs

PACKS

https://www.packs.nl/tracktrace/?zendingnr={trackTraceCode}&pc6hnr={zipCode}

NL

NL and BE

Bezorgafspraak

COURIER

N/A

N/A

N/A

Parts Express

PES

https://tnt.partsexpress.nl/#/orderdetail/{trackTraceCode}/{zipCode}

NL

NL

Amperé and BUDBEE

BUDBEE

https://tracking.budbee.com/{UniqueHashId}auth={UniqueHash}

NL

NL

Trunkrs

TRUNKRS

https://parcel.trunkrs.nl/{trackTraceCode}/{zipcode}

EN

NL and BE