Stock availability

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

Introduction

Fulfillmenttools can act as the central source for stock information. It calculates and provides:

  • Stock that is physically present in a facility (Stock on Hand)

  • Stock that is available to be sold (Available on Stock)

  • Stock that is available to be sold & picked in a store or warehouse (Available for Picking)

  • Stock that is expected to arrive based on deliveries of goods, production, transfers from other facilities, etc. (Expected)

Stock information can be:

As an alternative, you can directly consume and operate on our stocks, i.e., get all stock entities and calculate the availabilities that you need in your software.

Stock on Hand (On hand)

Describes stock which is physically located in a facility. Stock that is, for example, still booked to the facility but is already in transit to another facility is not included.

Available on Stock (AOS)

Available on stock describes stock which is available for selling (not been earmarked for other purposes). In our platform it refers to stock that is accessible, reduced by:

  • stock that is reserved for orders

  • safety stock, i.e., stock that is held back for offline sales

  • expired stock (if defined)

Available for Picking (AFP)

Available for picking describes stock which is available (not been earmarked for other purposes), and also ready to be picked. In our platform it refers to all stock that is accessible and pickable, reduced by:

  • stock that is reserved for orders

  • safety stock, i.e., stock that is held back for offline sales

  • expired stock (if defined)

Expected Stock

API Documentation

Request sum of stocks over facilities per product

We recommend to use this endpoint, for example, for listing pages in online shops.

Get the accumulated Stock for each Article

get
Query parameters
sizenumber · min: 1 · max: 100OptionalDefault: 25
startAfterIdstringOptional
facilityRefsstring[]Optional
allowStalebooleanOptional
tenantArticleIdsstring[]Optional
channelRefsstring[] · max: 50Optional

The channels to included under "channelAdjusted" in the stock summary. Provide up to 50 channelRefs, specify "UNALLOCATED for unallocated stock."

Responses
200
Stock summaries was loaded & you were allowed to access it. The result is in the body.
application/json
get
GET /api/stocks/summaries HTTP/1.1
Host: 
Accept: */*
{
  "stockSummaries": [
    {
      "article": {
        "imageUrl": "text",
        "tenantArticleId": "text",
        "title": "text"
      },
      "details": {
        "availableForPicking": 1,
        "availableOnStock": 1,
        "byTrait": {
          "ACCESSIBLE": 1,
          "PICKABLE": 1
        },
        "channelAdjusted": [
          {
            "availableForPicking": 1,
            "availableOnStock": 1,
            "channelRef": "text"
          }
        ],
        "reserved": 1,
        "safetyStock": 1,
        "stockOnHand": 1,
        "totalAmount": 1
      },
      "includedFacilityRefs": [
        "text"
      ]
    }
  ],
  "total": 1
}

Request stocks per facility for a specific product

We recommend to use this endpoint, for example, for product detail pages in online shops.

Stock per Facility for a specific tenantArticleId, also includes the Tenant-Wide Summary

get
Path parameters
tenantArticleIdstring · min: 1Required
Query parameters
facilityNamestring · min: 1Optional
facilityIdsstring[]Optional
channelRefsstring[] · max: 50Optional

The channels to included under "channelAdjusted" in each summary and facility stock. Provide up to 50 channelRefs, specify "UNALLOCATED for unallocated stock."

Responses
200
Stock distribution was loaded & you were allowed to access it. The result is in the body.
application/json
get
GET /api/articles/{tenantArticleId}/stockdistribution HTTP/1.1
Host: 
Accept: */*
{
  "facilityStocks": [
    {
      "availableForPicking": 1,
      "availableOnStock": 1,
      "byTrait": {
        "ACCESSIBLE": 1,
        "PICKABLE": 1
      },
      "channelAdjusted": [
        {
          "availableForPicking": 1,
          "availableOnStock": 1,
          "channelRef": "text"
        }
      ],
      "facilityId": "text",
      "facilityName": "text",
      "facilityServiceTypes": [
        "SHIP_FROM_STORE"
      ],
      "facilityStatus": "ONLINE",
      "price": 1,
      "reserved": 1,
      "safetyStock": 1,
      "stockOnHand": 1,
      "totalAmount": 1
    }
  ],
  "summary": {
    "availableForPicking": 1,
    "availableOnStock": 1,
    "byTrait": {
      "ACCESSIBLE": 1,
      "PICKABLE": 1
    },
    "channelAdjusted": [
      {
        "availableForPicking": 1,
        "availableOnStock": 1,
        "channelRef": "text"
      }
    ],
    "reserved": 1,
    "safetyStock": 1,
    "stockOnHand": 1,
    "totalAmount": 1
  },
  "tenantArticleId": "text"
}

Request all stocks

Get stocks

get
Query parameters
facilityRefstringOptional
tenantArticleIdstring[] · max: 500Optional
locationRefstring[] · max: 500Optional
sizenumber · min: 1 · max: 100OptionalDefault: 25
startAfterIdstringOptional
Responses
200
Stocks
application/json
get
GET /api/stocks HTTP/1.1
Host: 
Accept: */*
{
  "stocks": [
    {
      "available": 1,
      "availableUntil": "2025-05-10T03:47:01.531Z",
      "conditions": [
        "DEFECTIVE"
      ],
      "created": "2025-05-10T03:47:01.531Z",
      "customAttributes": {},
      "facilityRef": "text",
      "id": "text",
      "lastModified": "2025-05-10T03:47:01.531Z",
      "locationRef": "text",
      "properties": {
        "expiry": "text"
      },
      "receiptDate": "2025-05-10T03:47:01.531Z",
      "reserved": 1,
      "scannableCodes": [
        "text"
      ],
      "scores": [
        "text"
      ],
      "serializedProperties": "text",
      "tenantArticleId": "text",
      "tenantStockId": "text",
      "traitConfig": [
        {
          "enabled": true,
          "trait": "text"
        }
      ],
      "traits": [
        "PICKABLE"
      ],
      "value": 1,
      "version": 1
    }
  ],
  "total": 1
}

Update all stocks

We recommend to use this endpoint, for example, to perform an inventory synchronisation with your ERP.

Update and create many stocks at once

put
Body
Responses
200
Stock upsert result
application/json
put
PUT /api/stocks HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 304

{
  "stocks": [
    {
      "availableUntil": "2025-05-10T03:47:01.531Z",
      "conditions": [
        "DEFECTIVE"
      ],
      "customAttributes": {},
      "facilityRef": "text",
      "locationRef": "text",
      "properties": {
        "expiry": "text"
      },
      "receiptDate": "2025-05-10T03:47:01.531Z",
      "tenantArticleId": "text",
      "traitConfig": [
        {
          "enabled": true,
          "trait": "text"
        }
      ],
      "value": 1
    }
  ]
}
[
  {
    "status": "UPDATED",
    "stock": {
      "available": 1,
      "availableUntil": "2025-05-10T03:47:01.531Z",
      "conditions": [
        "DEFECTIVE"
      ],
      "created": "2025-05-10T03:47:01.531Z",
      "customAttributes": {},
      "facilityRef": "text",
      "id": "text",
      "lastModified": "2025-05-10T03:47:01.531Z",
      "locationRef": "text",
      "properties": {
        "expiry": "text"
      },
      "receiptDate": "2025-05-10T03:47:01.531Z",
      "reserved": 1,
      "scannableCodes": [
        "text"
      ],
      "scores": [
        "text"
      ],
      "serializedProperties": "text",
      "tenantArticleId": "text",
      "tenantStockId": "text",
      "traitConfig": [
        {
          "enabled": true,
          "trait": "text"
        }
      ],
      "traits": [
        "PICKABLE"
      ],
      "value": 1,
      "version": 1
    }
  }
]

Last updated

Was this helpful?