Building Vs Buying an OMS Part One: Fulfillment

Building Vs Buying an OMS Part One: Fulfillment
  • 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.

Order Fulfillment with an OMS

An OMS automates each step of the order fulfillment process, which begins when your customer places an order.

1. Order placed

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.

2. Picking and packing

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.

3. Shipping

When the product is ready for delivery to the customer, the OMS will mark its status as Shipping as it leaves the logistics center.

4. Order received

Once the order is received and confirmed by the customer, the OMS will mark it as Delivered.

5. Return

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.

6. Resupply

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.

How OMS Software Works

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.

Customer places an order

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": [
 "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.

Pick, Pack, and Ship

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:


Here’s an example of the request payload from the fabric API documentation:

 "orderId": "2947-5955-82579",
 "shipments": [
 "shipmentRef": "ref-1234",
 "shipmentCarrier": "FedEx",
 "shipmentCarrierUrl": "",
 "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"

OMS Challenges

An OMS is a great solution to manage e-commerce fulfillment, but it does face certain obstacles.

Shipping costs

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}

Inventory management

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.

Inaccurate orders

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.

Build or Buy an OMS?

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:

  • From the software development perspective, you must have a live database hosted somewhere to store your data and transactions.
  • You need effective data modeling to make sure your database system is designed for speed and efficiency; this ensures it will easily and efficiently retrieve, update, and save your data.
  • You have to build an API as an abstraction to your database so that other parts of your e-commerce system can easily connect to the database, and add an extra layer of security to it.
  • Of course, your API must also be well-designed for efficiency and security, like your database.
  • You should host this API preferably in the cloud, either by having a server you manage or through serverless architecture.
  • Additionally, you must decide whether you have the in-house expertise to build a system, whether your company can justify the expense, and whether the time is better spent on this system than on other projects.

Cash flow

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.

Developer time

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.

Topics: Product
Menard Maranan

Tech advocate and writer @ fabric.

Learn more about fabric