Fluent Commerce Logo
Docs
Sign In

Submit Inventory Batches With Attributes

How-to Guide

Author:

Fluent Commerce

Changed on:

9 Jan 2025

Key Points

  • Create new Inventory Batches using the Job API 
  • Sample Inventory batch payload 
  • Inventory batch details

Steps

Step arrow right iconAPI Authentication

Authenticate against the Retailer you are sending the Inventory Batch to 

Please follow the Authentication API page for how to Authenticate against a Retailer.

The returned token will be used to authenticate all the following API calls.

Step arrow right iconSet Up a New Job to Execute Your Batches

Using the Job API you can create a new Batch Job.

Inventory Batch Preprocessing Settings and Behavior in Job API

The `meta` object allows for the inclusion of additional metadata when creating a Job. The currently supported key within `meta` is `preprocessing`, which can influence whether the Batch Preprocessing (BPP) is utilized based on the 's settings.

The behavior of the `meta.preprocessing` key is governed by the `fc.enable.batch.preprocessing` configuration setting. Below is a table outlining the expected behavior:

`fc.enable.batch.preprocessing `value

`meta.preprocessing` Value

Additional Info in Job Payload

Result

true

"preprocessing": "skip"

BPP should not be used

Do not use BPP

true

"preprocessing": "enabled"

BPP should be used

Use BPP

true

"meta": null or "meta": {}

BPP should be used

Use BPP

true

Omitted or previously created Jobs

BPP should be used

Use BPP

false

Any value

BPP should not be used (overridden)

Do not use BPP

  • When `fc.enable.batch.preprocessing` is `true`:
    • "preprocessing": "skip"
      • Action: BPP should not be used.
    • "preprocessing": "enabled" ( any value other than "skip" )
      • Action: BPP should be used.
    • "meta": null or "meta": {}
      • Action: BPP should be used.
    • Jobs without `meta` 
      • Action: BPP should be used.
  • When `fc.enable.batch.preprocessing` is `false`:
    • Regardless of the `meta.preprocessing` value (including `null` or omitted)
      • Action: BPP should not be used.
  • The fc.enable.batch.preprocessing setting takes precedence over the `meta.preprocessing` value. If fc.enable.batch.preprocessing is set to `FALSE`, BPP will not be used regardless of the `meta.preprocessing` value.
  • Ensure that when setting `meta.preprocessing`, only the supported values (`"skip"` or `"any value not skip"`) are used to avoid unexpected behavior.
  • A job-level override will affect only the batches containing inventory data created under the specific job, and this impact will remain in effect until the job expires.
1{
2    "name": "Batch Inventory Job",
3    "retailerId": "{{retailer.id}}"
4} 
1{
2    "id": "199"
3}

This ID number is the created job ID. Save this ID as we will use it in the following requests for sending a Batch. This Job ID and the created Job will be used to group subsequent Batches together.

Step arrow right iconCreate and send a new Inventory Batch

Using the Job API you can create an Batch to be processed under the previously created Job.

The URL is using the Job id returned by the last API call, for example 199 as per the previous response.

Inventory Batch Model

The Batch Model consists of:

  • Batch-Level Fields: Define overall batch properties.
  • Entities Array: Contains individual inventory items to process.

Field

Type

Mandatory?

Possible Values

Default Value

Description

Notes

action

String

"UPSERT"

N/A

Specifies the operation on entities (e.g., "UPSERT" to insert/update).

Must be a valid type for operations.

entityType

String

""

N/A

Defines the type of being processed.

Must be "".

source

String

Any valid source identifier

"batch"

Identifies the origin of the batch data (e.g., "ERP", "POS").

Defaults to "batch" if not provided.

event

String

Any valid name

"InventoryChanged"

Custom name associated with the batch operation.

Defaults to "InventoryChanged" if not provided.

catalogueRef

String

Any valid catalogue reference

"DEFAULT:<retailerId>"

References the catalogue associated with the batch.

Influences `catalogueType` in `ref` construction.

conditions

Object

Configuration object

Uses default transient settings

Configurations like transient types and statuses are used in de-duplication checks.


entities

Array

List of items

N/A

List of items

Follows the entities object model. Nonconforming inputs are ignored. 



The conditions object has the following fields :

Field

Type

Mandatory?

Possible Values

Default Value

Description

hasRelatedInventoryQuantities

Array

List of transient IQ types and statuses

Default transient types and statuses

Defines custom transient types and statuses for checking during de-duplication
       eg) `"hasRelatedInventoryQuantities": `

`[`

` {"type": "SALE", "status": "ACTIVE"}, `

`{"type": "SALE", "status": "CREATED"}, `

`{"type": "CORRECTION", "status": "ACTIVE"} `

`]`




Each object within the `entities` array should follow this structure:

Field

Type

Mandatory?

Possible Values

Constraints

Description

Notes

locationRef

String

Any valid reference

N/A

The reference used to match the .


skuRef

String

Any valid SKU reference

N/A

The SKU reference of the item.


qty

Integer

Any non-negative integer

N/A

The quantity to match the on-hand .


correctedQty

Integer

Any non-negative integer

Defaults to 0 if not provided

The current outstanding correction quantity to be saved.


type

String

Any valid type identifier

N/A

Specifies the type of operation (e.g., "LAST_ON_HAND").

Defaults to "LAST_ON_HAND" if not provided.

ref

String

Any valid reference

Must follow `<skuRef>:<locationRef>:<catalogueType>:<type>`

A reference identifier for the .

If not provided, constructed using `skuRef`, `locationRef`, `catalogueType`, and `type`.

status

String

Any valid status value

N/A

The status of the (e.g., "ACTIVE").


retailerId

String

Any valid retailer ID

N/A

The retailer ID for which the is uploading.


attributes

Object

Any complex key-value pairs

Keys must be strings; values can be any valid JSON type

Additional attributes for flexible metadata storage.


1{
2    "action": "UPSERT",
3    "entityType": "INVENTORY",
4    "source": "SAP_ERP",
5    "event" :"InventoryChanged",
6    "catalogueRef": "FUTURE:2",
7      "conditions": {
8    "hasRelatedInventoryQuantities": [
9      {"type": "SALE", "status": "ACTIVE"},
10      {"type": "SALE", "status": "CREATED"},
11      {"type": "CORRECTION", "status": "ACTIVE"}
12    ]
13  },
14    "entities": [
15        {
16            "locationRef": "LOC_MEL",
17            "skuRef": "D45",
18            "qty": 350,
19            "correctedQty": 0,
20            "retailerId": 2,
21            "type": "FUTURE",
22            "ref": "24-MG02:LOC_MELB_RET2:FUTURE",
23            "status": "ACTIVE",
24            "attributes": {
25                "expectedOn": "2024-10-31T00:00:00.00Z", // ISO 8601 format
26                "storageAreaRef": "LOC_MELB_RET2-SR1",
27                "condition": "NEW",
28                "countryOfOrigin": "China",
29                "expiryDate": "2025-12-31T23:59:59.00Z", // ISO 8601 format
30                "supplierId": "SUP12345",
31                "unitOfMeasurement": "PCS",
32                "serialNumber": "SN123456789",
33                "purchaseOrderNumber": "PO987654321",
34                "transferFrom": "STORE01",
35                "inventoryPurpose": "For Sale",
36                "manufacturingBatchInfo": {
37                    "batchNumber": "BATCH001",
38                    "productionDate": "2024-01-15T00:00:00.00Z" // ISO 8601 format
39                }
40                    }
41
42            }
43        
44    ]
45}
1{
2  "id": "331"
3}

The returned id will be used to check the Batch status in a following call. If you needed to send multiple groups of updates you would run this call for each group of Batches that you are running. If you needed to send 15,000 updates, you would run this 3 times for every 5,000 records( for illustration ) , all under the same Job, using the same job ID.

For a more technical deep dive into how works when BPP is enabled, check out this document 

Step arrow right iconCheck Job status

You can use the Job API again to check the status of an existing Job

1{
2  "jobId": "199",
3  "status": "OPEN",
4  "batch": [
5    {
6      "batchId": "331",
7      "status": "COMPLETE",
8      "createdOn": "2022-10-06T00:31:08.104+0000"
9    }
10  ],
11  "createdOn": "2022-10-06T00:31:08.104+0000"
12}

Step arrow right iconCheck Inventory Batch status

You can view the status of a specific Batch as well, this provides a few more details than the previous Job status check.

The URL uses the Job id and the Batch id returned by previous APIs.

1{
2  "batchId": "331",
3  "entityType": "INVENTORY",
4  "status": "COMPLETE",
5  "start": 1,
6  "count": 10,
7  "total": 0,
8  "results": [],
9  "createdOn": "2022-10-06T00:36:09.344+0000"
10}
Fluent Commerce

Fluent Commerce