An OMS is a great way to streamline your fulfillment process, but building your own system can be time-consuming in an industry where speed is crucial.
With a third-party provider, you can leverage a prebuilt OMS and save time, money, and resources without the stress of maintenance.
With fabric OMS, you can streamline your fulfillment process.
Look out for the next article in this three-part series, which will focus on how an OMS handles inventory management.
Building an e-commerce site that converts shoppers into customers is just half the battle. The other half is to win the post-purchase experience by delivering orders with speed and accuracy. To do this, you can minimize errors and automate tasks with an order management system (OMS).
An OMS facilitates the process of fulfilling your customers’ orders. It sends orders to fulfillment centers for packing and shipping, in addition to monitoring inventory and handling returns.
OMS solutions have evolved from their monolithic origins. During the first years of e-commerce, big retailers had on-premise enterprise solutions that were hard to customize and required management by an entire IT team. Thanks to more flexible, low-cost platforms like Shopify and BigCommerce, smaller retailers were able to enter the market.
Big retailers, though, outgrew these out-of-the-box solutions because of their limited features and scalability. Now, decoupling the frontend and backend, using microservices, and embracing headless software gives retailers more control over their e-commerce system.
This article will explain how an OMS can handle fulfillment for your business. It also compares building your own OMS with using a third-party solution.
An OMS automates each step of the order fulfillment process, which begins when your customer places an order.
Your OMS, which is connected to all of your e-commerce channels such as your website, online marketplaces, and social media, prepares the order and sends it to the fulfillment center. It labels the order as Order Placed
and updates the inventory data.
Once the fulfillment center receives the order, the OMS updates its status to Order Received
. It adds the order data to the pick list to select the item(s) from the inventory, then sends the order to the packaging center. Once the order is packaged and labeled, the OMS updates its status to Ready to Ship
. This process can vary depending on your fulfillment solution and infrastructure.
When the product is ready for delivery to the customer, the OMS will mark its status as Shipping
as it leaves the logistics center.
Once the order is received and confirmed by the customer, the OMS will mark it as Delivered
.
If the customer returns the item, the OMS will change its status to Returned
. The customer generally gets a refund after the item is back in the warehouse and the QA check is complete.
The OMS can also alert you and the manufacturer or supplier when something needs to be resupplied. The warehouse team or system will handle the new supply and the OMS will update its inventory record.
An OMS executes multiple commands for each stage in the fulfillment process. From placing of an order, all the way until the order is delivered, an OMS manages all the different aspects of the lifecycle of an order. This section will go into detail about each of these stages.
The fulfillment process starts when a customer places an order. Your OMS saves this order data and sends it to the fulfillment center. It may also update the inventory record.
If you build your own OMS, your database design may consider a many-to-many relationship between User
and Items
with Transactions
as the JOIN table. On your API, you must secure the order by ensuring that the user is authorized to place it and that the payment process succeeds (or manage it with a third-party API like Stripe). You must save this transaction in the database, update the inventory data, and send the order data to the fulfillment center.
Alternatively, you can use a headless solution like fabric to handle these low-level operations for you. For example, to handle checkout, you can use the Checkout route and pass the order data in the request payload:
POST https://{given-fabric-domain}/api-order/checkout
Here’s an example request payload of an order from fabric API documentation:
{
"cartId": "5e4876e10cfe1d8902005d33",
"customerAccountId": "5e3598e3007c5e00080d2bb8",
"customerEmail": "[email protected]",
"customerPhoneNumber": {
"number": "123-456-7890",
"kind": "Mobile"
},
"paymentDetails": [
{
"billToId": 1000001,
"shipToId": [
1000001,
1000002
],
"transactionDetails": {},
"paymentMethod": "Visa",
"paymentKind": "string",
"amount": 533.33,
"currency": "USD",
"conversion": 1.12,
"billToAddress": {
"name": {
"first": "John",
"middle": "Paul",
"last": "Smith"
},
"email": "[email protected]",
"phone": {
"number": "123-456-7890",
"kind": "Mobile"
},
"street1": "10400 NE 4th St",
"street2": "Suite 500",
"city": "Bellevue",
"state": "WA",
"country": "USA",
"zipCode": "98004",
"kind": "Bill to address"
}
}
],
"estimatedTax": {
"itemsTaxes": [
{
"lineItemId": 2,
"amount": 20
}
],
"shipToTaxes": [
{
"shipToId": "5ec35a857e6cac8d99a57d3b",
"amount": 20
}
]
},
"shipFrom": {
"street1": "10400 NE 4th St",
"city": "Bellevue",
"state": "WA",
"country": "USA",
"zipCode": "98004"
}
}
fabric offers other OMS APIs for customer checkout: Cart, Bill To, Ship To, Tax/Address Validate, Shipping, Payments, and Order. Different APIs handle the other stages of fulfillment management, like resupplying or handling returns.
The OMS will track the picking and packing process so that you and the customer constantly know the status of the order, from packing to shipping to delivery.
If building your own OMS API, you can create a PUT /change-order-status
endpoint with the order status on the request payload, which will be saved into the database. Make sure you include the necessary security.
If you use fabric OMS API, you can update the status with the Sync order status endpoint:
https://{given-fabric-domain-name}/app/routes/order/pos/syncOrderStatus
Here’s an example of the request payload from the fabric API documentation:
{
"orderId": "2947-5955-82579",
"shipments": [
{
"shipmentRef": "ref-1234",
"shipmentCarrier": "FedEx",
"shipmentCarrierUrl": "https://www.fedex.com/",
"trackingNumber": "2345367890876543",
"lineItems": [
{
"lineItemId": 1,
"quantity": 1
}
],
"shipmentStatus": "Delivered",
"shippedDate": "2019-12-14T00:00:00.000Z",
"estimatedDeliveryDate": "2019-12-14T00:00:00.000Z"
}
]
}
If you’ve accepted a returned item, the OMS updates the order status to Returned
and payment is refunded based on your terms.
Handling returns can be easily implemented with the Order API of fabric OMS. You can use the PATCH route Return order to tell your OMS the customer returned the item:
PATCH https://{your-given-fabric-domain-name}/api-order/orders/return
Here’s a sample request payload for a returned item from the fabric API documentation:
{
"returnCode": "2001",
"orderId": "2947-5955-82579",
"returnMessage": "Customer not interested",
"sugarRefund": true
}
The OMS alerts you about items to resupply. Depending on your use case, your OMS must be able to handle the incoming inventory and update all sales channels with the new data.
When building an OMS, you may dedicate an SQL table for Inventory
or Item
and create an API route to update this table.
With fabric, you have the Inventory API with sets of routes to manage your inventory. To update and insert bulk data into your inventory, use the Bulk insert to inventory route:
POST https://{your-given-fabric-domain-name}/api-inventory/inventory/bulk-insert
Here’s the sample request payload from fabric API documentation for a bulk inventory import:
[
{
"sku": "1597422",
"itemId": 1597422,
"totalQuantity": 25,
"reservedQuantity": 0,
"locationId": 175,
"type": "Stock",
"channelId": 12,
"transitRef": "wo-2002",
"transitOrderDate": "2019-12-14T00:00:00.000Z",
"transitStockDate": "2019-12-14T00:00:00.000Z"
}
]
An OMS is a great solution to manage e-commerce fulfillment, but it does face certain obstacles.
Calculating shipping costs can be tricky since it involves a variety of factors, including the distance between the warehouse and the customer, the dimensions and weight of the item, the type of shipment, the labor cost, and the expected delivery time. This calculation will be determined by the business side of your company, no matter which OMS you use.
One solution is to have a shipping calculator, either built-in or third-party, that considers all variables when determining the shipping cost for an order. You can feed this data to your OMS and add it to the total cost of the order upon checkout.
In fabric, you can use the Create ship-to route to pass the order’s shipping info with the shipping cost data provided by your calculator:
POST https://{your-given-fabric-domain-name}/api-cart/ship-to/cart/{cartId}
Not all software is created equal. Although order management systems are built to handle inventory management, the reality is that some of their features and capabilities are limited. As a result, businesses may choose to use a dedicated inventory management system (IMS) in conjunction with an OMS to manage inventory and communicate it effectively to sales channels.
However, having two overlapping systems “work together” is inefficient and a poor use of resources. fabric OMS is built to include a single source of inventory truth for customers, thereby eliminating the need for a separate IMS.
If there are inaccurate orders, it’s likely that the OMS has a bug, the QA and logistics teams defaulted on their tasks, or the customer didn’t clarify their order.
Your company must take preemptive measures. If you have a custom OMS, it might need a bug patched. This is less likely with a third-party solution, but not impossible. Make sure your fulfillment center is accurately picking, packing, and shipping orders as well, as these manual processes are more prone to human error.
The decision to build your own OMS or use an existing system depends on your business and its use cases. If you’re thinking of building an in-house OMS, consider the following points:
Money and resources are huge factors when deciding whether to build or buy an OMS. If your enterprise company has enough of both to use on development, building an OMS may be the right option.
But if you’re concerned about maximizing efficiency and saving operational costs and resources, it’s better to leverage third-party solutions, especially headless ones, for more scalability. Using them frees your company to focus on other priorities. Headless OMS options allow you to reduce the cost of the infrastructure while taking the burden of maintenance costs off your shoulders.
Speed is crucial for businesses, especially in e-commerce. If you want to quickly get an OMS up and running, third-party solutions can kickstart your development process. The dev team can focus on building websites or apps and release them quickly rather than taking weeks or months to develop something that might already be on the market.
Tech advocate and writer @ fabric.