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

Was this helpful?

  1. Products
  2. Inventory Management
  3. Global Inventory

Channel Inventory

This page is outdated. Please go to our new documentation under https://docs.fulfillmenttools.com/documentation.

Channel inventory is currently not fully operational as it is not considered in reservations and routing.

Summary

Channel inventory allows reserving inventory for specific sales channels or other purposes. Depending on the individual use case, different rules and time periods for stock assignment can be defined per channel. Reservations for specific channels are always performed on facility level.

Follow the below steps when introducing channel inventory for use cases:

  1. Manage availability channels

  2. Manage allocation groups

  3. Manage allocations for channels

Working with channel inventory

1. Manage availability channels

Availability channels in our platform are designed to represent sales channels or other topics inventory should be grouped by.

  • name: Each channel is characterized by a unique name for easy identification.

  • strategy: Depending on the priority of the distribution path, different strategies can be defined for stock reduction. In the UI this is referred to as "allocation type":

    • RESTRICT (Only stock that has been explicitly allocated to this channel is available for sales via this channel. As soon as the allocated stock is used up, no stock is available any more).

    • REGULAR (If an order is accepted via this channel, the allocated stock is first used up. Afterwards, stock that is has not been allocated to any channel is used.)

    • IRON_RESERVE (If an order is accepted via this channel, stock that is not assigned to any channel is used. Only after all other stock is used, the stock explicitly allocated to the channel is taken.)

Create a channel

Update a channel

Channel name and strategy can be changed after creation.

Delete a channel

When deleting a channel, the allocated stock is added back to the general availability.

2. Manage allocation groups

Each allocation must belong to a group. Groups are used to organize allocations in facilities for a specific product and channel. They are also used to display related allocations as grouped together in the Backoffice.

  • Active: This value can be set to true or false, depending on whether the allocated stock should be currently considered in stock availability and routing. This allows for flexibility in managing which distribution paths are currently operational. If active is set to false, the allocated stock is added back to the general availability.

  • ActivePeriod: The allocated stock can be considered for a timespan which is defined on group level. Channel allocations are only considered in stock availability and routing if the current time is within the defined time period. If the activePeriod is not defined, the allocations are considered as soon as they are created.

  • tenantArticleIds: A group organizes allocations for a product, identified by the tenantArticleId. Although not technically forbidden we advise users to only define one product per group.

Create a group

Update a group

Status (active) and activePeriod can be changed after creation.

Delete a group

When deleting a group, the allocated stock is added back to the general availability.

3. Manage allocations for channels

The core functionality of channels is realized through availabilityAllocationentities. These entities link channels to specific products (identified by tenantArticleIds) and assign a predetermined quantity of stock to each channel.

  • facilityRef: Each allocation can only allocate stocks from one facility to a channel.

  • initialStockQuantity: Defines the quantity of items that should be initially allocated to the respective channel within the facility.

Create an allocation

Update an allocation

InitialStockQuantity and groupId can be changed after creation.

Delete an allocation

When deleting an allocation, the allocated stock is added back to the general availability.

Availability Calculation

Active allocations reduce the available amount of the specified tenantArticleId(s) for all other channels by the specified amount. Initially, other availabilities are reduced by the defined initialStockQuantity. If orders are received via a channel, the quantity of allocated stock is reduced depending on the channel strategy:

  • Restrict: Available on Stock is equal to the stock that has been initially allocated to the channel minus all stock that has already been sold over this channel since the allocation has become active

  • Regular: Available on Stock is all stock that is generally available plus stock that has been initially allocated to the channel, minus all stock that has already been sold over this channel since the allocation has become active

  • Iron Reserve: Available on Stock is all stock that is generally available plus stock that has been allocated to the channel. Stock that has already been sold over this channel is only deducted if no other stock for that product is generally available

API documentation

PreviousStock availabilityNextExpected stock

Last updated 6 months ago

Was this helpful?

Delete an existing Availability Channel. PLEASE NOTE: This will also delete all groups and allocations under this channel.

delete

Path parameters
availabilityChannelIdstringRequired
Responses
200
The channel has been deleted
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
delete
DELETE /api/availabilitychannels/{availabilityChannelId} HTTP/1.1
Host: 
Accept: */*

No content

Delete an existing Group and all its allocations under Channel

delete

Path parameters
groupIdstringRequired
availabilityChannelIdstringRequired
Responses
200
The Group has been deleted.
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
delete
DELETE /api/availabilitychannels/{availabilityChannelId}/groups/{groupId} HTTP/1.1
Host: 
Accept: */*

No content

Delete an existing Allocation under Group

delete

Path parameters
allocationIdstringRequired
groupIdstringRequired
availabilityChannelIdstringRequired
Responses
200
The Allocation has been deleted
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
delete
DELETE /api/availabilitychannels/{availabilityChannelId}/groups/{groupId}/allocations/{allocationId} HTTP/1.1
Host: 
Accept: */*

No content

  • Summary
  • Working with channel inventory
  • 1. Manage availability channels
  • POSTCreate a new Availability Channel
  • PUTReplace an existing Availability Channel
  • DELETEDelete an existing Availability Channel. PLEASE NOTE: This will also delete all groups and allocations under this channel.
  • 2. Manage allocation groups
  • POSTCreate a Group under Channel
  • PUTReplace a Group under Channel
  • DELETEDelete an existing Group and all its allocations under Channel
  • 3. Manage allocations for channels
  • POSTCreate a new Allocation under Group
  • PUTReplace an existing Allocation under a group
  • DELETEDelete an existing Allocation under Group
  • Availability Calculation
  • API documentation

Create a new Availability Channel

post

Body
namestringRequired
strategystring · enumRequiredPossible values:
Responses
200
The created Availability Channel
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
post
POST /api/availabilitychannels HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 36

{
  "name": "text",
  "strategy": "REGULAR"
}
{
  "created": "2025-06-21T11:15:57.508Z",
  "id": "text",
  "lastModified": "2025-06-21T11:15:57.508Z",
  "name": "text",
  "strategy": "REGULAR",
  "version": 1
}

Replace an existing Availability Channel

put

Path parameters
availabilityChannelIdstringRequired
Body
namestringRequired
strategystring · enumRequiredPossible values:
versionnumberRequired
Responses
200
The replaced Availability Channel
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
put
PUT /api/availabilitychannels/{availabilityChannelId} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 48

{
  "name": "text",
  "strategy": "REGULAR",
  "version": 1
}
{
  "created": "2025-06-21T11:15:57.508Z",
  "id": "text",
  "lastModified": "2025-06-21T11:15:57.508Z",
  "name": "text",
  "strategy": "REGULAR",
  "version": 1
}

Create a Group under Channel

post

Path parameters
availabilityChannelIdstringRequired
Body
activebooleanRequired
tenantArticleIdsstring[] · max: 1Required
Responses
200
The created Group
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
post
POST /api/availabilitychannels/{availabilityChannelId}/groups HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 128

{
  "active": true,
  "activePeriod": {
    "end": "2025-06-21T11:15:57.508Z",
    "start": "2025-06-21T11:15:57.508Z"
  },
  "tenantArticleIds": [
    "text"
  ]
}
{
  "active": true,
  "activePeriod": {
    "end": "2025-06-21T11:15:57.508Z",
    "start": "2025-06-21T11:15:57.508Z"
  },
  "channelRef": "text",
  "created": "2025-06-21T11:15:57.508Z",
  "id": "text",
  "lastModified": "2025-06-21T11:15:57.508Z",
  "tenantArticleIds": [
    "text"
  ],
  "version": 1
}

Replace a Group under Channel

put

Path parameters
availabilityChannelIdstringRequired
groupIdstringRequired
Body
activebooleanRequired
versionnumberRequired
Responses
200
The replaced Group
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
put
PUT /api/availabilitychannels/{availabilityChannelId}/groups/{groupId} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 112

{
  "active": true,
  "activePeriod": {
    "end": "2025-06-21T11:15:57.508Z",
    "start": "2025-06-21T11:15:57.508Z"
  },
  "version": 1
}
{
  "active": true,
  "activePeriod": {
    "end": "2025-06-21T11:15:57.508Z",
    "start": "2025-06-21T11:15:57.508Z"
  },
  "channelRef": "text",
  "created": "2025-06-21T11:15:57.508Z",
  "id": "text",
  "lastModified": "2025-06-21T11:15:57.508Z",
  "tenantArticleIds": [
    "text"
  ],
  "version": 1
}

Create a new Allocation under Group

post

Path parameters
groupIdstringRequired
availabilityChannelIdstringRequired
Body
facilityRefstringRequired
initialStockQuantitynumberRequired
Responses
200
The created Allocation
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
post
POST /api/availabilitychannels/{availabilityChannelId}/groups/{groupId}/allocations HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "facilityRef": "text",
  "initialStockQuantity": 1
}
{
  "channelRef": "text",
  "created": "2025-06-21T11:15:57.508Z",
  "facilityRef": "text",
  "groupRef": "text",
  "id": "text",
  "initialStockQuantity": 1,
  "lastModified": "2025-06-21T11:15:57.508Z",
  "version": 1
}

Replace an existing Allocation under a group

put

Path parameters
groupIdstringRequired
allocationIdstringRequired
availabilityChannelIdstringRequired
Body
groupIdstringOptional
initialStockQuantitynumberRequired
versionnumberRequired
Responses
200
The replaced Allocation
application/json
401
Your user is not allowed to operate against this API instance
application/json
403
Your user, although recognized, is not authorized to use this
application/json
404
The requested entity was not found
application/json
put
PUT /api/availabilitychannels/{availabilityChannelId}/groups/{groupId}/allocations/{allocationId} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 55

{
  "groupId": "text",
  "initialStockQuantity": 1,
  "version": 1
}
{
  "channelRef": "text",
  "created": "2025-06-21T11:15:57.508Z",
  "facilityRef": "text",
  "groupRef": "text",
  "id": "text",
  "initialStockQuantity": 1,
  "lastModified": "2025-06-21T11:15:57.508Z",
  "version": 1
}