fulfillmenttools
  • Welcome to the fulfillmenttools Platform Documentation
  • Getting Started
    • Setup your access to fulfillmenttools
    • Make your first API Calls
      • Add your first facility
      • Add your first listing
      • Place your first order
    • Core concepts & terminology
      • Order Flow
    • Postman Collection
    • Client SDKs
    • FAQ
  • Clients
    • Backoffice
      • First steps - Registration
      • Network view
        • Home
        • Orders
          • Unroutable orders
          • Pre-orders & Backorders
          • Order History
        • Inventory Management
          • Stock Overview
          • Channel Inventory
        • Facilities
        • Users
        • Returns
        • DOMS configuration
        • Settings
        • Analytics
          • DOMS Pages
          • Fulfillment Operations Pages
          • Inventory Pages
          • Downloads Page
      • Facility view
        • Home
        • Inbound
        • Tasks
        • Listings
        • Storage Locations
        • Facility
        • Users
    • Inventory app
      • Registration Inventory App
      • App sections
        • Inbound
        • Storage and relocation
    • Operations app
      • Android
        • Manual Registration
        • Android Enterprise Registration
        • Sections
          • Picking
            • Load Units (legacy)
            • Substitute items
            • Weighed or measured products
            • Scanning configuration
            • Picking Methods
              • Batch Picking
              • Multi Order Picking
          • Packing
          • Handover
          • Returns (legacy)
        • Printing
        • Notifications
      • Webapp
        • Packing
      • Overview features Android & Webapp
    • Technical requirements
      • Zebra Hardware Scanner Configuration
      • Honeywell Hardware Scanner Configuration
      • Supported barcodes for camera scanning
      • Requirements for fft applications
      • Zebra printer
    • Returns app
      • Handle unannounced returns
      • Handle announced returns
  • Products
    • Core Functionality
      • Process
        • External actions
      • Add and manage facilities
      • Notification Center
      • Checking on features
      • Tags and Stickers Concept
      • GDPR
      • Remote Configuration
      • Expiry
      • Target time
      • Time calculation for queries of future availabilities (LPS-calculation)
      • Interfacility Transfer
    • Carrier Management
      • Overview
        • Available Carriers
      • Concepts
        • Carrier Country Service Mapping (CCSM)
        • Non-delivery-days
        • Custom Carrier & Headless operation of Carriers
      • Providing needed data
    • Fulfillment Options
      • Fulfillability Check
      • Checkout Options
        • Available fulfillment options based on basket
        • Earliest possible delivery date
        • Available delivery dates within time-period
        • Availability for delivery date
      • Delivery Promise
    • Inventory Management
      • Configurations
      • Entities
        • Listing
        • Stock
          • Stock Properties
        • Storage Location
        • Zone
      • Global Inventory
        • Stock availability
        • Channel Inventory
        • Expected stock
        • Inbound Process
        • Reservations
        • Safety Stock
      • Inventory Control
        • Inventory Traits
        • Measurement Units
        • Outbound Inventory Tracking
        • Storage Location Recommendations
    • Order Fulfillment
      • Headless Order Fulfillment
      • Pick Jobs
      • Zone picking
      • Load Units
      • Custom Service
      • Handover Jobs
      • Add External Documents
      • Configurations
        • Picking Configuration
          • Picking methods
          • Short Pick Reasons
        • Packing Configuration
          • Packing Container Types
        • Print / Document Configuration
        • Tag Configurations
          • Parcel Tag Configuration
        • Handover Configuration
        • Operative Container Types
    • Order Routing
      • Entities
        • Ship-from-Store Orders
        • Click-and-Collect Orders
        • Locked Orders
        • Custom Services Orders
          • Simple Custom Service Order
          • Complex Custom Service Order
      • Fences
      • Ratings
      • Order Split
        • Order split - initial routing
        • Order split after shortpick
        • Item bundles
      • Reroute
      • Shape the routing with the DOMS Toolkit
      • Decision logs
    • Returns Management
      • Returns legacy
        • Available status
      • Returns 2.0
        • Return Reasons
        • Item Conditions
        • Integrating Returns with Events
    • Use Cases
      • Demand-Driven Replenishment
      • Expected stock in availability
      • Multi Order Picking
      • Interfacility transfer
      • Assigned Users
  • Connecting to fulfillmenttools
    • General Topics
      • Use external identity providers to authenticate to fulfillmenttools
        • Microsoft Entra ID / Azure Active Directory (AD)
      • Public Event Export
      • Available Regions
      • Backup Policies
    • GraphQL API
    • RESTful API
      • General Topics
        • API Release Life Cycle
        • Versioning
        • Authorization
        • Customization via Attributes
        • Update Guarantees
        • Rate Limits
        • Resource Timestamps
        • Pagination Interface
        • Localization
        • Custom Attributes
      • OpenAPI Specification
        • Swagger UI
        • OpenAPI 3.0 Spec
    • Eventing
      • Structure of an Event
      • Available Events
      • Tutorial
    • commercetools Connect
    • Integration Tutorial
      • Adding facilities
      • Adding listings to facilities
      • Configuring stocks
      • Carrier configuration
      • Placing orders
      • Checkout Options
      • Distributed Order Management System (Routing)
      • Local fulfillment configuration
  • Incident Reporting
    • How to report incidents in fulfillmenttools
    • How to define incident priorities
  • Release Notes
    • Release Summary – May 2024
    • Release Summary – June 2024
    • Release Summary – July 2024
    • Release Summary – August 2024
    • Release Summary – September 2024
    • Release Summary – October 2024
Powered by GitBook
On this page
  • Ship-from-Store Orders
  • Address Formats for Specific Carriers
  • Reference

Was this helpful?

  1. Products
  2. Order Routing
  3. Entities

Ship-from-Store Orders

Orders are one of the most commonly used entities in the fulfillmenttools platform. Orders are typically used to trigger the DOMS and furthermore to start the overall fulfillment process.

PreviousEntitiesNextClick-and-Collect Orders

Last updated 5 months ago

Was this helpful?

This page is outdated. Please go to our new documentation under .

Ship-from-Store (SfS) are shipped from a facility by a (logistics) carrier to the customer's address. Whether this facility is actually a store or a warehouse does not matter for this example. When placing an order with the fulfillmenttools platform, the deliveryPreferences are used to mark the order for shipping. Typically, a shipping label is needed for the parcels to be sent.

The other type of orders are Click-and-Collect (C&C) orders which are described in another .

Ship-from-Store Orders

Here's an example on how to create a Ship-from-Store (SfS) order:

curl -sSL -X POST 'https://your.api.fulfillmenttools.com/api/orders' \
  --header 'Authorization: Bearer <TOKEN>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "consumer": {
    "addresses": [
      {
        "addressType": "POSTAL_ADDRESS",
        "firstName": "Test",
        "lastName": "Customer",
        "street": "Domstr.",
        "houseNumber": "20",
        "postalCode": "50668",
        "city": "Köln",
        "country": "DE"
      }
    ],
    "email": "customer@mail.com"
  },
  "orderDate": "2023-03-06T17:30:00Z",
  "status": "OPEN",
  "tenantOrderId": "order-111",
  "customAttributes": {
    "someInternalId": "xyz-123"
  },
  "deliveryPreferences": {
    "shipping": {
      "preferredCarriers": [ "DHL_V2" ],
      "serviceLevel": "DELIVERY",
      "desiredDeliveryTime": "2024-05-05T15:00:00.000Z"
    },
    "reservationPreferences": {
      "mode": "ASAP" (default), "ALAP", "SCHEDULED"
      "reservationTime": "2024-05-04T13:00:00.000Z" // only for SCHEDULED
    }
  },
  "orderLineItems": [
    {
      "quantity": 2,
      "article": {
        "tenantArticleId": "111222333",
        "title": "T-Shirt",
        "imageUrl": "https://loremflickr.com/320/240/shirt",
        "attributes": [
          {
            "key": "%%subtitle%%",
            "value": "Super Brand",
            "category": "descriptive",
            "priority": 100
          },
          {
            "key": "Color",
            "value": "white",
            "category": "descriptive",
            "priority": 101
          },
          {
            "key": "Size",
            "value": "M",
            "category": "descriptive",
            "priority": 102
          }
        ]
      },
      "scannableCodes": [
        "5714500878421"
      ],
      "customAttributes": {
        "someInternalId": "0815"
      }
    }
  ]
}'

Some details on the example:

  • The deliveryPreferences mark this order as a shipping order:

    • The preferredCarriers is used to select the (logistics) carrier that was chosen for delivery.

    • The serviceLevel: This could be either DELIVERY for standard shipping, or SAMEDAY for sameday delivery.

    • Note there is no targetTime attribute as this is calculated by the fulfillmenttools platform depending on the facility and carrier configuration.

    • The desiredDeliveryTime contains the selected delivery time of the customer within the checkout of the shop. This in combination with the reservation preference mode defines when we check for stock reservation.

  • The email address is forwarded to the logistics carrier when a shipping label is requested. Make sure you have the customer's consent to process this data. Otherwise, supply a generic email address.

  • The "reservationPreferences" are used in case the order should not be fulfilled and the respective stock should not be reserved directly after the routing was performed. This is the case if the consumer places an order where the delivery date is further in the future (see desiredDeliveryTime ) and the stock should not be reserved instantly (e.g. if the items do have a best before date).

Address Formats for Specific Carriers

Home Delivery

For most carriers and countries, Home Delivery is requested simply by setting the addressType to POSTAL_ADDRESS. Here are some examples (carrier = DHL_V2, DHL_BENELUX, POSTNL, GLS):

"addresses": [
  {
    "addressType": "POSTAL_ADDRESS",
    "firstName": "Karl",
    "lastName": "Kunde",
    "street": "Alexanderplatz",
    "houseNumber": "3",
    "postalCode": "10178",
    "city": "Berlin",
    "country": "DE"
  }
]
"addresses": [
  {
    "addressType": "POSTAL_ADDRESS",
    "firstName": "Jan",
    "lastName": "Janssen",
    "street": "Grote Markt",
    "houseNumber": "22",
    "postalCode": "2011 RD",
    "city": "Haarlem",
    "country": "NL"
  }
]
"addresses": [
  {
    "addressType": "POSTAL_ADDRESS",
    "firstName": "Jens",
    "lastName": "Jensen",
    "street": "Banegårdspladsen",
    "houseNumber": "14",
    "postalCode": "8000",
    "city": "Aarhus",
    "country": "DK",
    "additionalAddressInfo": "ring venligst"
  }
]

DHL Packstation (Germany)

"addresses": [
  {
    "addressType": "POSTAL_ADDRESS",
    "firstName": "Karl",
    "lastName": "Kunde",
    "additionalAddressInfo": "<Postnummer>",
    "street": "Packstation",
    "houseNumber": "171",
    "postalCode": "50667",
    "city": "Köln",
    "country": "DE"
  }
]

DHL Service Point / Parcel Locker (Netherlands, Belgium, Luxemburg)

"addresses": [
  {
    "addressType": "INVOICE_ADDRESS",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  },
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo": "8004-NL-201117",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  }
]

The next example is for delivery to a DHL parcel locker. The PARCEL_LOCKER address must include the ServicePoint ID (including prefix) of the locker in the additionalAddressInfo field.

"addresses": [
  {
    "addressType": "INVOICE_ADDRESS",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  },
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo": "8004-NL-201585",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  }
]

PostNL Service Point / Parcel Locker (Netherlands)

"addresses": [
  {
    "addressType": "INVOICE_ADDRESS",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  },
  {
    "addressType": "PARCEL_LOCKER",
    "companyName": "ACME",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Zijdstraat",
    "houseNumber": "38",
    "postalCode": "1431 ED",
    "city": "Aalsmeer",
    "country": "NL"
  }
]
"addresses": [
  {
    "addressType": "INVOICE_ADDRESS",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Kudelstaartseweg",
    "houseNumber": "22",
    "postalCode": "1431 GA",
    "city": "Aalsmeer",
    "country": "NL"
  },
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo":"<PostNL ID>",
    "companyName": "PostNL",
    "firstName": "Mieke",
    "lastName": "Janssen",
    "street": "Werf",
    "houseNumber": "15",
    "postalCode": "1435 KP",
    "city": "Rijsenhout",
    "country": "NL"
  }
]

bpost Pick-up Point (Belgium)

Here's an example for delivery to a bpost Pick-up Point (carrier = BPOST):

"addresses": [
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo": "100472",
    "firstName": "Jean",
    "lastName": "Peeters",
    "street": "Carrefour de l'Europe",
    "houseNumber": "2",
    "postalCode": "1000",
    "city": "Bruxelles",
    "country": "BE"
  }
]

Another option is to specify an address of type PARCEL_LOCKER with the actual customer address but without an additionalAddressInfo field. In this case, when the shipping label is requested the point of delivery is chosen automatically by determining the nearest service point. This address will then be printed on the shipping label instead of the customer's address.

"addresses": [
  {
    "addressType": "PARCEL_LOCKER",
    "firstName": "Jean",
    "lastName": "Peeters",
    "street": "Rue de l'Etuve",
    "houseNumber": "44",
    "postalCode": "1000",
    "city": "Bruxelles",
    "country": "BE"
  }
]

postnord Service Point / Parcel Locker

"addresses": [
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo": "105926",
    "firstName": "Peter",
    "lastName": "Nielsen",
    "street": "Gymnasievej",
    "houseNumber": "29",
    "postalCode": "4600",
    "city": "Køge",
    "country": "DK"
  }
]

GLS ParcelShop Delivery

"addresses": [
  {
    "addressType": "PARCEL_LOCKER",
    "additionalAddressInfo": "2080095282",
    "firstName": "Jens",
    "lastName": "Jensen",
    "street": "Gymnasievej",
    "houseNumber": "29",
    "postalCode": "4600",
    "city": "Køge",
    "country": "DK"
  }
]

Service Options

Some carriers offer additional service options to be requested with the shipping labels, e.g. "signature required", "insurance", "cash on delivery", etc. You can specify these services in the preferredCarriersWithProduct element of the deliveryPreferences within the order.

Here's an example how to request the "signature" option for Belgian carrier bpost:

 "deliveryPreferences": {
    "shipping": {
        "preferredCarriersWithProduct": [
            {
                "carrierKey": "BPOST",
                "carrierServices": [
                    "SIGNATURE"
                ]
            }
        ],
        "serviceLevel": "DELIVERY"
    }
}

The list of supported options/services depends on the chosen carrier. Please contact us if you find an option missing that you would like to use for your labels.

Reference

This section explains some carrier/country specific details for the consumer address. See for an overview of all available carriers.

In Germany, it is possible to have the parcel shipped to a DHL . The consumer address must contain the customer's DHL "Postnummer" so make sure that information is provided by the customer during the checkout process. The "Postnummer" must be set in the additionalAddressInfo field and the street must be "Packstation" (fixed value). The houseNumber must be the number of the selected Packstation. Here's an example (carrier = DHL_V2):

In the Netherlands, the customer can pick up her parcel at a DHL or (pakketautomaat). For this to work, the order needs to include two consumer addresses: one of typeINVOICE_ADDRESS, the other of type PARCEL_LOCKER. The PARCEL_LOCKER address must be the customer's address and it must include the ServicePoint ID in the additionalAddressInfo field. In the INVOICE_ADDRESS you should also provide the real customer name because it is used on the label so that the customer can be identified when picking up the parcel at the service point. Check the DHL BeNeLux for details. Here's an example for delivery to a DHL service point (carrier = DHL_BENELUX):

In the Netherlands, the customer can pick up her parcel at a PostNL (PostNL-punt) or parcel locker (pakketautomaat). For this to work, the order needs to have two consumer addresses: one of typeINVOICE_ADDRESS, the other of type PARCEL_LOCKER. The PARCEL_LOCKER address should be the address of the pickup point and it must include a companyName. In the INVOICE_ADDRESS you should also provide the real customer name because it is used on the label so that the customer can be identified when picking up the parcel at the service point. Check the PostNL for details. Here's an example for delivery to a service point (carrier = POSTNL):

The next example is for delivery to a The PARCEL_LOCKER address should be the address of the parcel locker and it must include a companyName. The additionalAddressInfo must contain the customer's PostNL ID number. Example (carrier = POSTNL):

In Belgium, bpost offers the customer to pick up the parcel at a or a . The order must contain an address of type PARCEL_LOCKER and the additionalAddressInfo must contain the service point id as determined by the bpost API. At the moment, we support bpost service points of type 1 (PostOffice), 2 (Post Point & Parcel Point), 4 (Pack Station/Parcel Locker), and 16 (Kariboo/Parcel Point).

As always, you can provide an optional INVOICE_ADDRESS. Check the bpost for details.

In the Nordics, e.g. Denmark, Finland, Sweden, the customer can choose to pick up the parcel at a postnord Service Point or (Pakkeboks/Nærboks). For this to work, the PARCEL_LOCKER address must include the Service Point ID (e.g. 105926) in the additionalAddressInfo field. Optionally, you can provide an INVOICE_ADDRESS. Check the postnord for more information. Here's an example for delivery to a postnord Service Point (carrier = POST_NORD):

In Denmark and many other countries, the customer can pick up the parcel at a GLS depot or (PakkeShop). For this to work, the PARCEL_LOCKER address must be the address of the parcel shop and it must include the ParcelShopID (e.g. 2080099016, 0560013596) in the additionalAddressInfo field. First name and last name must be of the customer so he can be identified when picking up the parcel. Optionally, you can provide an INVOICE_ADDRESS. Check the for more information on parcel shops. Here's an example for delivery to a GLS parcel shop (carrier = GLS):

Full specification of the orders endpoint in our

https://docs.fulfillmenttools.com/documentation
use case document
Packstation
service point
parcel locker
API documentation
service point
API documentation
parcel locker.
Pick-up point
Parcel locker
GeoLocator
integration helpdesk
Parcel locker
API documentation
ParcelShop
GLS ShipIT documentation
fulfillmenttools API
this list