Using Direct Fulfillment (in what follows called DF) you can ship orders with an external service provider.
This process is partly known as "dropshipping", when the shipment is made directly from a supplier’s or manufacturer’s warehouse to the end customer – without the merchant having any physical contact with the goods.
Direct Fulfillment Methods
Items that are not on stock can be sent to customers using two different methods:
The ordered items are directly shipped to the end customer by the fulfillment supplier.
The fulfillment supplier sends the items to the merchants warehouse who then ships them to the end customer.
In any case: The fulfillment supplier owns the items in his warehouse. Items that were shipped due to customer orders are being invoiced.
Shipping from DF Supplier to the End Customer
The most commonly used direct fulfillment method is shipping the ordered items directly to the end customer by the DF supplier.
The advantage of this method is, that the merchant does not need to pay anything for employees or any warehouse capacities. The items are directly shipped from the DF supplier's warehouse.
This kind of fulfillment is used for DF types 1 and 3.
Note: In case you don't own any warehouse and the DF supplier ships items, which are your property, you can operate as described in this section.
Shipping from DF Supplier to the Merchant
With this method the ordered items are shipped to the merchant's warehouse, who then ships them the the end customers, by the DF supplier.
The advantage of this method is that the end customer gets his order completely, also if an item was not on stock at the time the orders was placed. The downside is that the end customer might need to wait a bit longer until he gets his order because of the items short stop in the merchants warehouse.
This kind of fulfillment is used for DF type 2.
If you don't have any items on stock but you delivery items from your warehouse (on demand), you can do this also with the help of the pixi Web application in combination with Picco or pixi Mobile.
You need to create new supplier orders by using the On demand supplier order suggestion method. When the orders were delivered, you can process the items with pixi Mobile or Picco further using Cross Docking / On Demand programs.
Read more: Supplier Order Suggestion, Order Method On demand, pixi Mobile: Cross Docking
Direct Fulfillment Types
Due to the flag which is imported with the order, pixi automatically decides what to do with the order. A fulfillment order is treated as a normal order until the payment was received. If an order was not paid, then it waits for the payment until it is transfered to the DF supplier. Orderlines in status HAL (hold) are therefore not handed over to the DF supplier.
As soon as the payment was received and the orderline was put to ANG (accepted), pixi checks the DF type of every orderline and assigns the appropriate DF supplier if needed.
In pixi there are 3 fulfillment types:
DF Type |
Procedure |
Description |
pixi ships |
pixi ships the orderline directly to the end customer - no DF. |
|
Fulfillment supplier ships |
The orderline is transferred to the DF supplier. |
|
pixi ships; but the items are ordered by the DF supplier |
pixi ships the orderline directly to the end customer. |
|
Depending on the item stock, either pixi or the DF supplier ships |
pixi ships the items, if they are on stock (available stock (res.) > quantity of ordered items). |
If the orderlines are not on stock, the orderline status changes to FUT. Those orders are then ready to be collected by the pixi API. After this, every single orderline needs to be confirmed using an additional API call to ensure that all orders were transferred crrectly.
The DF supplier then processes the orders. The package only contains a delivery note. There is also the possibility to use an external invoice number, if the DF supplier creates an invoice. This external invoice then needs to match the invoice which is automatically created by pixi.
After the order was shipped, it is put to status shipped in pixi using the API. By doing this, one tracking ID per orderline can be passed, which will then be applied to the invoice at invoice creation. As an alternative - if the orderline can also not be delivered by the DF supplier - it can also be cancelled by the DF supplier.
pixi does the rest: If the order consists of other items that are on stock, they are picked, packed and shipped as usual (DF type 0 / empty).
Orderlines that are on stock are automatically grabbed by the invoice automatism and an invoice gets created. Invoices for orderlines that are shipped by the DF supplier, can either be created manually using the API or also automatically using the invoice automation.
The following descriptions for every DF type consider whole orders. DF types can also be set per orderline - then the description applies to a single orderline.
DF Type 0 / empty
The order is shipped from the merchant's warehouse to the end customer.
If an item is not on stock, it gets cancelled or is ordered at a supplier and later on shipped by the merchant. There is no DF supplier involved in this.
The order is processed normally:
If the payment was not settled yet, the order remains in status HAL - it waits for the payment.
If the payment was received and assigned to the order, the status changes to ANG.
If all ordered items are on stock, they get picked, scanned into the shipping boxes (status EIN) and shipped (status AUS).
Graphic: Orderline status history in pixi |
DF Type 1
The DF supplier ships the order in any case - independent of the items stock.
The order is processed as follows:
If the payment was not settled yet, the order remains in status HAL - it waits for the payment.
If the payment was received and assigned to the order, the status changes to FUT (Fulfillment Transfer). The orderlines are collected using API calls pixiDFGetOrders & pixiDFGetOrderlines by the DF supplier.
Afterwards, the orderlines are confirmed using the API call pixiDFGetChangesConfirmation.(Optional) Using pixiDFGetChanges you can check before the items are shipped, if orderlines might already be cancelled by customers in between or if changes to the quantity were made.
The DF supplier ships the order and sets the order to shipped using the API call pixiDFSetStatus or pixiDFUpdateOrderlineStatus. In pixi the status then automatically changes to FUS (Fulfillment Sent).
After the DF invoice was created either by the pixi invoice automatism or using the API call pixiDFCreateInvoices, the order is put to status AUS in pixi.
Graphic: Orderline status history in pixi |
Graphic: API call process (DF supplier perspective) |
DF Type 2
The ordered items are shipped by the merchant in any case.
The order is processed as follows:
If the payment was not settled yet, the order remains in status HAL - it waits for the payment.
If the payment was received and assigned to the order, the status of each orderline changes depending on the stock for this item in the merchant's warehouse.
If there is enough stock, the status changes to ANG. There is no DF supplier involved in this case.
-
If there is not enough stock, the status changes to FUT (Fulfillment Transfer).
The orderlines are collected using API calls pixiDFGetOrders & pixiDFGetOrderlines by the DF supplier.
Afterwards, the orderlines are confirmed using the API call pixiDFGetChangesConfirmation.(Optional) Using pixiDFGetChanges you can check before the items are shipped, if orderlines might already be cancelled by customers in between or if changes to the quantity were made.
The DF supplier ships the order to the merchant's warehouse and sets the order to shipped using API call pixiDFSetStatus or pixiDFUpdateOrderlineStatus. In pixi the status automatically changes to BES (ordered).
The items are now picked and scanned into the shipping boxes (status EIN).
After the DF invoice was created either by the pixi invoice automation or using the API call pixiDFCreateInvoices, the order is put to status AUS in pixi.
Graphic: Item is on stock |
Graphic: Item is not on stock |
Graphic: API call process (DF supplier perspective) |
DF Type 3
The ordered items are shipped either by the merchant or the DF supplier depending on the items stock.
The order is processed as follows:
If the payment was not settled yet, the order remains in status HAL - it waits for the payment.
If the payment was received and assigned to the order, the status of each orderline changes depending on the stock for this item in the merchant's warehouse.
If there is enough stock, the status changes to ANG. There is no DF supplier involved in this case.
-
If there is not enough stock, the status changes to FUT (Fulfillment Transfer).
The orderlines are collected using API calls pixiDFGetOrders & pixiDFGetOrderlines by the DF supplier.
Afterwards, the orderlines are confirmed using the API call pixiDFGetChangesConfirmation.(Optional) Using pixiDFGetChanges you can check before the items are shipped, if orderlines might already be cancelled by customers in between or if changes to the quantity were made.
The DF supplier ships the order to the merchant's warehouse and sets the order to shipped using API call pixiDFSetStatus or pixiDFUpdateOrderlineStatus. In pixi the status automatically changes to FUS (Fulfillment Sent).
After the DF invoice was created either by the pixi invoice automatism or using the API call pixiDFCreateInvoices, the order is put to status AUS in pixi.
Graphic: Item is on stock |
Graphic: Item is not on stock |
Graphic: API call process (DF supplier perspective) |
Special Processes
No own warehouse; the merchants items are shipped by the DF supplier
In this scenario the merchant does not have an own warehouse. The items are exclusively shipped to the end customers by the DF supplier. But the items in the DF supplier's warehouse are the marchant's property.
This is a possible scenario of handling such orders:
After the order has been created either by the order import or manually in pixi, the DF supplier collects all orders using the API calls pixiGetOrderHeader and pixiGetOrderlines. The orderlines are in status HAL, in case no payment has been received yet and they have status ANG, if the orderlines are ready to be shipped.
-
The DF supplier now processes all shippable orderlines and can also check orders for possible changes that were possibly made between the order import and processing the order using the API call pixiGetOrder.
In the same step a comment can be added to orderlines or the whole order using pixiUpdateOrderline or pixiAddOrderComments. Like this you can easily see that the order is being processed and changes should not be made anymore.
-
If the DF supplier processed the order, the orderline status of every item is put to DF type 1 using API call pixiUpdateOrderline.
In pixi the orderline status for items with DF type 1 changes to FUT.
Since the the items stock in the DF supplier's warehouse is property of the merchant and needs to be exported to all connected channels, this stock has to be corrected accordingly for all items that were picked. Because of this the DF supplier needs to decrease the items stock using pixiSetStockMultiple.
After the stock was adjusted, the orderline status is put to FUS using pixiDFSetStatus.
The DF invoice is then created either by the pixi invoice automatism or using the API call pixiDFCreateInvoices and the order is automatically put to AUS - it is considered to be shipped.
Graphic: Orderline status history in pixi |
Graphic: API call process (DF supplier perspective) |
Configuration
Important Database Settings
Enable DF: pixi Control Center > Database Settings > Direct Fulfillment
This setting needs to be activated in order to being able to use direct fulfillment. If this setting is not activated, please contact your account manager to buy the direct fulfillment licence.
DF API - Allow full Access without Password: pixi Control Center > Database Settings > Direct Fulfillment
If this setting is activated, then the supplier number and the supplier customer number don't have to be provided when getting DF orders using the API. If this setting is deactivated, then that information needs to be provided.
Enable Fullfillment Type One & Fullfillment Type Two: pixi Control Center > Database Settings > Direct Fulfillment
Those two settings need to be activated so pixi can automatically create invoices for DF orders that contain orderlines in status FUS.
Show status FUA instead of FUT: pixi Control Center > Database Settings > Customer Service
If this setting is activated, then status FUA is shown as orderline status instead of FUT if the orderline was not yet confirmed by the DF supplier using the API call pixiDFGetChangesConfirmation.
Picklist - Include Orders with FUT Orderlines: pixi Control Center > Database Settings > Shipping
If the setting is enabled, then a picklist can be created also for orders where some of the orderlines are on status FUT.
Note: Only orderlines on ANG from such orders can go to picklist.
If the setting is disabled, then all orders where some of the orderlines are on status FUT, are excluded.
Default: OFF
Include FUT Status for Supplier Orders: pixi Control Center > Database Settings > Direct Fulfillment
If you enable this setting (ON), open Direct Fulfilment orders in status FUT are included in in Purchase Order Suggestions and FUT order lines are generally interpreted in pixi as part of the Open Order Qty for the item.
With this setting you can thus generate Purchase Order Suggestions usually via the On-Demand method in pixi Purchasing. Once the supplier reports shipment, the status of the oldest open orderlines in FUT can be changed for the shipped items via the pixi API from FUT to BES up until the shipped quantity is matched.
Order Import
On order import, every order includes a flag which says that an item or the order should be shipped via pixi or a DF supplier. If an order doesn't contain this flag, the DF type is determined using this database setting:
DF Type - Default Value: pixi Control Center > Database Settings > Direct Fulfillment
This setting sets the default value for the DF type of an orderline, if the order import XML doesn't contain any value.
You can enter values from 1 to 3.
Detailed information about how to provide the values can be found in the openTRANS Syntax Specification.
DF Suppliers
To mark a supplier as DF supplier, you need to open it in the pixi Web application > Buying > Suppliers. Go to General and set Direct fulfillment to "Yes".
You also need to set a customer number (My customer ID) which needs to be provided when using API calls next to the Supplier ID. This customer number can be up to 20 characters long.
In pixi LOU suppliers are managed in pixi Control Center > Tables > Suppliers.
Read more: Suppliers
API Calls
pixiDFGetOrders
This API call returns all open orders without customer or shipping lock for a specific supplier.
Parameter |
Data Type |
Mandatory |
Description |
SupplNr |
varchar (4) |
yes |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
no |
Customer number of the supplier in pixi, needs to be provided as an additional security |
AllOrders |
bit |
no |
0 = not confirmed orders are returned |
The result set contains important data which are need for a further processing besides customer related data (shipping address, etc.):
Column |
Data Type |
Description |
OrderNR |
int |
Customers order number |
pixiDFGetOrderlines
This API call returns all orderlines for a specific supplier.
Parameter |
Data Type |
Mandatory |
Description |
OrderNR |
int |
yes |
Order number in pixi from the previous API call pixiDFGetOrders => column: OrderNR |
SupplNr |
varchar (4) |
no |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
no |
Customer number of the supplier in pixi, needs to be provided as an additional security |
AllOrderlines |
bit |
no |
0 = not confirmed orderlines in status FUT |
The result set contains important data which are need for a further processing:
Column |
Data Type |
Description |
OrderlineRef |
int |
Unique ID of the orderline |
OrderHistKey |
int |
Unique key for the conformation of an orderline by the DF supplier |
pixiDFGetChanges
This API call returns orderlines for a specific supplier which have not been confirmed yet.
Parameter |
Data Type |
Mandatory |
Description |
OrderNRExternal |
int |
yes |
Order number shop |
SupplNr |
varchar (4) |
no |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
no |
Customer number of the supplier in pixi, needs to be provided as an additional security |
ExcludeStatuses |
varchar (200) |
no |
Do not consider the status for the result |
LockedCustomers |
bit |
no |
0 = return orderlines of not locked customers only |
The result set contains important data which are need for a further processing:
Column |
Data Type |
Description |
ordernr |
int |
Customer order number |
OrderLineRef |
int |
Unique ID of the orderline |
OrderHistKey |
int |
Unique (max) key for the confirmation of an orderline by the DF supplier |
pixiDFGetChangesConfirmation
Every single orderline needs to be confirmed with this call.
Parameter |
Data Type |
Mandatory |
Description |
SupplNr |
varchar (4) |
yes |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
yes |
Customer number of the supplier in pixi, needs to be provided as an additional security |
OrderHistKey |
int |
no |
The Key OrderHistKey from the previous API call pixiDFGetOrderlines or pixiDFGetChanges => column: OrderHistKey |
Afterwards, the orderline is not shown anymore in the result of pixiDFGetOrderlines and (if all orderlines were confirmed) also not in pixiDFGetOrders.
pixiDFUpdateOrderlineStatus
With this API call, one orderline can be set to shipped, cancelled or ordered.
Note: To avoid a potential invoice split in pixi, we recommend to use pixiDFSetStatus for shipment updates, i.e. to update all shipped order lines in a single request.
Parameter |
Data Type |
Mandatory |
Description |
SupplNr |
varchar (4) |
yes |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
yes |
Customer number of the supplier in pixi, needs to be provided as an additional security |
OrderHistoryKey |
int |
yes |
The Key OrderHistoryKey from the previous API call pixiDFGetOrderlines or pixiDFGetChanges => column: OrderHistKey |
Status |
varchar (3) |
yes |
FUS (Fulfillment Sent), if the orderline was sent |
DFShipDate |
datetime |
no |
Shipping time of the order |
DFTrackingID |
varchar (100) |
no |
Packages tracking ID, if available; seperate several IDs with , |
Qty |
int |
no |
Quantity of the orderlines, whose status should be changed |
InvoiceNrExternal |
varchar (20) |
no |
External invoice number, if it was created by the DF supplier |
OrderLineRef |
int |
no |
Unique ID of the orderline |
The result returns error code 200, if the orderline was marked successfully and in any other case it returns 500 as well as an error description.
pixiDFSetStatus
With this API call one or more orderlines can be set to cancelled (DF type 1, 2 and 3), ordered (DF type 2) or shipped (DF type 1 and 3).
Parameter |
Data Type |
Mandatory |
Description |
XML |
varchar (max) |
yes |
Several orderlines can be updated in one XML. An example:
Info: Depending on where you execute the call, the XML might need to be put into a <![CDATA[...]]> block. |
CreateInvoices |
varchar (1) |
no |
N (default) = no invoice is created for the orderline |
SupplNr |
varchar (4) |
no |
Supplier number in pixi (e.g. MGS for the default supplier) |
Secret |
varchar (20) |
no |
Customer number of the supplier in pixi, needs to be provided as an additional security |
The result returns error code 200, if the orderline was marked successfully and in any other case it returns 500 as well as an error description.
pixiDFCreateInvoices
With this API call you can create an invoice for DF orders that contain orderlines in status FUS.
In case no parameter is provided, the API call works the same as the button Create fulfillment invoices in the pixi Invoices application.
There is no result set.
Parameter |
Data Type |
Mandatory |
Description |
OrderLinesXML |
varchar (max) |
no |
Several orderlines can be updated in one XML. An example:
Info: Depending on where you execute the call, the XML might need to be put into a |
ShowDetailedMessages |
BIT |
no |
NULL / 0 = no result |
Result set:
Column |
Data Type |
Description |
ReturnCode |
varchar (10) |
OK or ERROR |
ErrorMessage |
varchar (512) |
OK
ERROR
|