Legacy event formats

This section lists the legacy event format of the events in the Inventory service. The existing events will continue to be delivered in older format which is now being referred to as legacy format. Eventually, all legacy events will also be migrated to a new event formats.

The following table lists events delivered in legacy format.
Event ID in Inventory Visibility Event code in Payload
Supply.Change supplyChange
ProductAvailabilityToSell.DistributionGroupSnapshot dgAvailabilitySnapshot
ProductAvailabilityToSell.ShipNodeChange productAvailability
DgAvailabilityChange dgAvailabilityChange
ProductAvailabilityToSell.ShipNodeSnapshot productAvailabilitySnapshot
Demand.Change demandChange
Supply.Change

When the supply changes for an item, the Supply.Change event is triggered. The code for this event is supplyChange.

The following sample JSON is an example of a published event.
Note: The files on IBM Cloud® Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
   "eventbatch":[
   {
     "channel":"Order Management",
     "identifiers":[],
     "events":[
   {
   "code": "supplyChange",
   "timestamp": "2020-01-18T06:00:00.021Z",
   "attributes": [
     { "name":"tenantId", "type":"String", "value":"tenant1" },
     { "name":"productID", "type":"String", "value":"SKU1024" },
     { "name":"unitOfMeasure", "type":"String", "value":"EACH" },
     { "name":"productClass", "type":"String", "value":"NEW" },
     { "name":"shipNode", "type":"String", "value":"Matrix-Store-001" },
     { "name":"shipByDate", "type":"dateTime", "value":"2500-01-01T00:00:00.000Z" },
     { "name":"lineReference", "type":"String", "value":"" },
     { "name":"reference", "type":"String", "value":"" },
     { "name":"referenceType", "type":"String", "value":"" },
     { "name":"segment", "type":"String", "value":"" },
     { "name":"segmentType", "type":"String", "value":"" },
     { "name":"quantity", "type":"Number", "value":"1.0" },
     { "name":"changedQuantity", "type":"Number", "value":"1.0" },
     { "name":"type", "type":"String", "value":"ONHAND_BACKROOM_01" },
     { "name":"baseType", "type":"String", "value":"ONHAND" },
     { "name":"tagNumber", "type":"String", "value":"|||" },
     { "name":"updatedTs", "type":"dateTime", "value":"IGNORE_VALUE" },
     { "name":"eta", "type":"dateTime", "value":"1900-01-01T00:00:00.000Z" },
     { "name":"adjustmentReason", "type":"String", "value":"ADJUSTMENT" }
     ]
   },
   {
      "code":"supplyChange",
      "timestamp":"2020-01-03T15:48:02Z",
      "attributes":[
        { "name":"tenantId", "value":"tenant1", "type":"String"},
        { "name":"productID", "value":"SKU1024", "type":"String"},
        { "name":"unitOfMeasure", "value":"EACH", "type":"String"},
        { "name":"productClass", "value":"NEW", "type":"String"},
        { "name":"lineReference", "value":" ", "type":"String"},
        { "name":"shipNode", "value":"Matrix-Store-002", "type":"String"},
        { "name":"shipByDate", "value":"2500-01-01T00:00:00Z", "type":"dateTime"},
        { "name":"reference", "value":" ", "type":"String"},
        { "name":"referenceType", "value":" ", "type":"String"},
        { "name":"quantity", "value":"200.0", "type":"Number"},
        { "name":"segment", "value":" ", "type":"String"},
        { "name":"segmentType", "value":" ", "type":"String"},
        { "name":"type", "type":"String", "value":"ONHAND_BACKROOM_01" },
        { "name":"baseType", "type":"String", "value":"ONHAND" },
        { "name":"tagNumber", "type":"String", "value":"|||" },
        { "name":"updatedTs", "value":"2020-01-03T15:47:48Z", "type":"dateTime"},
        { "name":"eta", "value":"1900-01-01T00:00:00Z", "type":"dateTime"},
        { "name":"adjustmentReason", "type":"String", "value":"ADJUSTMENT" }
      ]}
    ]
  }]
}

The updatedTs field indicates the time when the database was updated for this supply. If no database record is present, then it will be null during the forcePublish. By default when a supply sync is performed, the supply change event is published only for those records which have to be upserted as part of the supply sync. However, when forcePublish is passed as true in a supply sync, an event is published for every supply record that is part of supply sync. This, in turn, publishes node and network availability change events as well, regardless of change in availability due to incoming supply record. If a supply record is not present in the system and is ignored as part of the sync process then updatedTs is null for this record's event.

ProductAvailabilityToSell.DistributionGroupSnapshot

This event is used to gather the snapshot of availability for a specific DG or all DGs belonging to the tenant.

The following sample JSON is an example of a published event.
Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
    "type": "dgAvailabilitySnapshot",
    "datacontenttype": "application/json",
    "id": "2a8d36a3-485b-3fc0-bd15-d530625a6ec5",
    "specversion": "1.0",
    "time": "2021-03-10T00:00:00.288Z",
    "data": 
    {
      "tenantId" : "tenant1",
      "snapshotId" : "bae67c1d-be0f-6b4e-1233-ffc924607fa0",
      "productID" : "SKU1024",
      "unitOfMeasure" : "EACH",
      "productClass" : "NEW",
      "deliveryMethod" : "SHP", 
      "segment" : " ", 
      "segmentType" : " ", 
      "distributionGroupId" : "US_Group",
      "computeTs" : "2020-01-03T15:47:44Z",
      "thresholdLevel" : 1, 
      "thresholdType" : "REALTIME_ONHAND", 
      "totalAvailableQuantity" : 98.0, 
      "onhandAvailableQuantity" : 38.0, 
      "futureAvailableQuantity" : 60.0, 
      "earliestOnhandAvailableDate" : "1900-01-01T00:00:00.000Z", 
      "latestOnhandAvailableDate" : "1900-01-01T00:00:00.000Z", 
      "earliestFutureAvailableDate" : "2020-12-31T05:00:00.000Z", 
      "latestFutureAvailableDate" : "2020-12-31T05:00:00.000Z", 
      "totalReservedQuantityWithheld" : 10.0,
      "firstReservedExpiryTs" : "2020-01-08T08:10:00Z",
      "lastReservedExpiryTs" : "2020-01-08T20:45:00Z", 
      "onhandSafetyQuantityWithheld" : 0.0, 
      "futureSafetyQuantityWithheld" : 0.0, 
      "totalSafetyQuantityWithheld" : 0.0, 
      "totalShortageQuantity" : 0.0
    }
 }
The following end of file (EOF) sample is an example of a published event:
{
  "type": "dgAvailabilitySnapshot",
  "datacontenttype": "application/json",
  "id": "736af2e8-86c0-3ccf-a134-79854ab0b6c6",
  "specversion": "1.0",
  "time": "2020-05-21T00:00:00.328Z",
  "data": {
    "snapshotId": "DGSnapshotTest01", 
    "tenantId": "tenant1" 
  }
}
You can manually trigger the snapshot for a specific distribution group by calling the publish_all API. The dgAvailabilitySnapshot publish_all API returns a job URL along with the jobId. It also publishes a dummy event when the process is complete, which has the same format as the normal message, but it omits all attributes other than tenantId and snapshotId. You can generate a snapshot for a specific distribution group or all of them.

For more information, see REST API documentation.

Use the following URL for demandSnapshot:
https://api.watsoncommerce.ibm.com/inventory/{tenantId}/v1/configuration/events/ProductAvailabilityToSell.DistributionGroupSnapshot/publish_all
ProductAvailabilityToSell.ShipNodeChange

When the availability for an item at a ship node changes, the ProductAvailabilityToSell.ShipNodeChange event is triggered. The code for this event is productAvailability.

The following sample JSON is an example of a published event.
Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
"eventbatch":[
  {
    "channel":"Order Management",
    "identifiers":[],
    "events":[
       {
          "code":"productAvailability",
          "timestamp":"2020-01-03T15:48:01Z",
          "attributes":[
             { "name":"tenantId", "value":"tenant1", "type":"String"},
             { "name":"productID", "value":"SKU1024", "type":"String"},
             { "name":"unitOfMeasure", "value":"EACH", "type":"String"},
             { "name":"productClass", "value":"NEW", "type":"String"},
             { "name":"deliveryMethod", "value":"SHP", "type":"String"},
             { "name":"segment", "value":"WALK_IN", "type":"String"},
             { "name":"segmentType", "value":"CHANNEL", "type":"String"},
             { "name":"shipNode", "value":"Matrix-Store-001", "type":"String"},
             { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"},
             { "name":"alertType", "value":"REALTIME_ONHAND", "type":"String"},
             { "name":"alertLevel", "value":"1", "type":"Number"},
             { "name":"totalAvailableQuantity", "value":"0", "type":"Number"},
             { "name":"onhandAvailableQuantity", "value":"0", "type":"Number"},
             { "name":"earliestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"},
             { "name":"latestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"},
             { "name":"earliestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"},
             { "name":"latestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"},
             { "name":"futureAvailableQuantity", "value":"20", "type":"Number"},
             { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"},
             { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"}, 
             { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"},
             { "name":"onhandSafetyQuantityWithheld", "value":"5", "type":"Number"},
             { "name":"futureSafetyQuantityWithheld", "value":"10", "type":"Number"},
             { "name":"totalSafetyQuantityWithheld", "value":"15", "type":"Number"},
             { "name":"totalShortageQuantity", "value":"0", "type":"Number"}
          ]
       },{
          "code":"productAvailability",
          "timestamp":"2020-01-03T15:48:02Z",
          "attributes":[
             { "name":"tenantId", "value":"tenant1", "type":"String"},
             { "name":"productID", "value":"SKU1024", "type":"String"},
             { "name":"unitOfMeasure", "value":"EACH", "type":"String"},
             { "name":"productClass", "value":"NEW", "type":"String"},
             { "name":"deliveryMethod", "value":"PICK", "type":"String"},
             { "name":"segment", "value":"WALK_IN", "type":"String"},
             { "name":"segmentType", "value":"CHANNEL", "type":"String"},
             { "name":"shipNode", "value":"Matrix-Store-001", "type":"String"},
             { "name":"computeTs", "value":"2020-01-03T15:47:56Z", "type":"dateTime"},
             { "name":"alertType", "value":"REALTIME_ONHAND", "type":"String"},
             { "name":"alertLevel", "value":"1", "type":"Number"},
             { "name":"totalAvailableQuantity", "value":"100.0", "type":"Number"},
             { "name":"onhandAvailableQuantity", "value":"40.0", "type":"Number"},
             { "name":"earliestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"},
             { "name":"latestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"},
             { "name":"earliestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"},
             { "name":"latestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"},
             { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"},
             { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"},
             { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"},
             { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"},
             { "name":"onhandSafetyQuantityWithheld", "value":"0", "type":"Number"},
             { "name":"futureSafetyQuantityWithheld", "value":"0", "type":"Number"},
             { "name":"totalSafetyQuantityWithheld", "value":"0", "type":"Number"},
             { "name":"totalShortageQuantity", "value":"0", "type":"Number"}
          ]
       }
    ]
 }]
}
To ensure that external systems can calculate availability without considering safety stock, the following attributes are included in the event.
  • onhandSafetyQuantityWithheld
    Safety stock quantity that is withheld from on hand availability.
  • futureSafetyQuantityWithheld
    Safety stock quantity that is withheld from future availability.
  • totalSafetyQuantityWithheld
    The total safety stock withheld, which is onhandSafetyQuantityWithheld plus futureSafetyQuantityWithheld.
  • totalShortageQuantity
    Currently, this attribute is used as a dummy value to allow Inventory Visibility to derive availability without considering safety stock. The value is always 0.
  • fulfillmentAllowed
    Indicates whether the inventory availability for the specific item, node, or delivery method is overridden by fulfillment option settings. The fulfillment option is configurable at both the node and item level. For more information, see Item fulfillment options.
DgAvailabilityChange

When availability changes for a distribution group, the DgAvailabilityChange event is triggered to record the change. The code for this event is dgAvailabilityChange.

The following sample JSON is an example of a published event.
Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
"eventbatch":[
 {
   "channel":"Order Management",
   "identifiers":[],
   "events":[
      {
         "code":"dgAvailabilityChange",
         "timestamp":"2020-01-03T15:48:02Z",
         "attributes":[
            { "name":"tenantId", "value":"tenant1", "type":"String"},
            { "name":"snapshotId", "value":"", "type":"String"},
            { "name":"productID", "value":"SKU1024", "type":"String"},
            { "name":"unitOfMeasure", "value":"EACH", "type":"String"},
            { "name":"productClass", "value":"NEW", "type":"String"},
            { "name":"deliveryMethod", "value":"SHP", "type":"String"}, 
            { "name":"segment", "value":"", "type":"String"},
            { "name":"segmentType", "value":"", "type":"String"},
            { "name":"distributionGroupId", "value":"US_Group", "type":"String"},
            { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"},
            { "name":"thresholdLevel", "value":"1", "type":"Number"},
            { "name":"thresholdType", "value":"REALTIME_ONHAND", "type":"String"},
            { "name":"totalAvailableQuantity", "value":"100.0", "type":"Number"},
            { "name":"onhandAvailableQuantity", "value":"40.0", "type":"Number"},
            { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"},
            { "name":"earliestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"},
            { "name":"latestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"},
            { "name":"earliestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"},
            { "name":"latestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"}
            { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"},
            { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"},
            { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"},
            { "name":"onhandSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"futureSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"totalSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"totalShortageQuantity", "value":"0", "type":"Number"} 
       ]
      },{
         "code":"dgAvailabilityChange",
         "timestamp":"2020-01-03T15:48:03Z",
         "attributes":[
            { "name":"tenantId", "value":"tenant1", "type":"String"},  
            { "name":"snapshotId", "value":"", "type":"String"},
            { "name":"productID", "value":"SKU1024", "type":"String"},
            { "name":"unitOfMeasure", "value":"EACH", "type":"String"},
            { "name":"productClass", "value":"NEW", "type":"String"},
            { "name":"deliveryMethod", "value":"PICK", "type":"String"}, 
            { "name":"segment", "value":"", "type":"String"},
            { "name":"segmentType", "value":"", "type":"String"},
            { "name":"distributionGroupId", "value":"US_Group", "type":"String"},
            { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"},
            { "name":"thresholdLevel", "value":"1", "type":"Number"},
            { "name":"thresholdType", "value":"REALTIME_ONHAND", "type":"String"},
            { "name":"totalAvailableQuantity", "value":"98.0", "type":"Number"},
            { "name":"onhandAvailableQuantity", "value":"38.0", "type":"Number"},
            { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"},
            { "name":"earliestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"},
            { "name":"latestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"},
            { "name":"earliestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"},
            { "name":"latestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"}
            { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"},
            { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"},
            { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"},
            { "name":"onhandSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"futureSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"totalSafetyQuantityWithheld", "value":"0.0", "type":"Number"},
            { "name":"totalShortageQuantity", "value":"0", "type":"Number"}
         ]
      }
   ]
 }]
}
Note: For manually triggering a complete snapshot of the availability for a distribution group refer to ProductAvailabilityToSell.DistributionGroupSnapshot API. For more information, see REST API documentation.
ProductAvailabilityToSell.ShipNodeSnapshot

Use the ProductAvailabilityToSell.ShipNodeSnapshot event to send a snapshot (on demand) of availability for a specific node, all nodes, or nodes that belong to a distribution group. The code for this event is productAvailabilitySnapshot.

The following sample JSON is an example of a published event.
Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
  "channel":"Order Management",
  "identifiers":[],
  "events":[
    {
       "code":"productAvailabilitySnapshot",
       "timestamp":"<time ISO-8601 format>",
       "attributes":[
            { "name":"tenantId", "value":"", "type":"String"},
            { "name":"jobId", "value":"", "type":"String"},
            { "name":"productID", "value":"", "type":"String"},
            { "name":"unitOfMeasure", "value":"", "type":"String"},
            { "name":"productClass", "value":"", "type":"String"},
            { "name":"shipNode", "value":"", "type":"String"},
            { "name":"deliveryMethod", "value":"", "type":"String"},
            { "name":"segmentType", "value":"", "type":"String"},
            { "name":"segment", "value":"", "type":"String"},
            { "name":"computeTs", "value":"", "type":"dateTime"},
            { "name":"thresholdLevel", "value":"", "type":"Number"},
            { "name":"thresholdType", "value":"", "type":"String"},
            { "name":"totalAvailableQuantity", "value":"", "type":"Number"},
            { "name":"onhandAvailableQuantity", "value":"", "type":"Number"},
            { "name":"futureAvailableQuantity", "value":"", "type":"Number"},
            { "name":"earliestOnhandAvailableDate", "value":"", "type":"dateTime"},
            { "name":"latestOnhandAvailableDate", "value":"", "type":"dateTime"},
            { "name":"earliestFutureAvailableDate", "value":"", "type":"dateTime"},
            { "name":"latestFutureAvailableDate", "value":"", "type":"dateTime"},
            { "name":"totalReservedQuantityWithheld", "value":"0.0", "type":"Number"}
            { "name":"totalSafetyQuantityWithheld","value":"","type":"Number"},
            { "name":"onhandSafetyQuantityWithheld","value":"","type":"Number"},
            { "name":"futureSafetyQuantityWithheld","value":"","type":"Number"},
            { "name":"totalShortageQuantity","value":"","type":"Number"}        
       ]
    }
  ]
}
The following EOF sample is an example of a published event:
{
   "code":"productAvailabilitySnapshot",
   "timestamp":"IGNORE_VALUE",
   "attributes":
   [
     {"name":"tenantId","value":"tenant1","type":"String"},
     {"name":"snapshotId","value":"736af2e8-86c0-3ccf-a134-79854ab0b6c6","type":"String"}
   ]
}
{
   "code":"productAvailabilitySnapshot",
   "timestamp":"<time ISO-8601 format>",
   "attributes":[
     { "name":"tenantId", "value":"", "type":"String"},
     { "name":"jobId", "value":"", "type":"String"},
     { "name":"productID", "value":"", "type":"String"},
     { "name":"unitOfMeasure", "value":"", "type":"String"},
     { "name":"productClass", "value":"", "type":"String"},
     { "name":"shipNode", "value":"", "type":"String"},
     { "name":"deliveryMethod", "value":"", "type":"String"},
     { "name":"segmentType", "value":"", "type":"String"},
     { "name":"segment", "value":"", "type":"String"},
     { "name":"computeTs", "value":"", "type":"dateTime"},
     { "name":"thresholdLevel", "value":"", "type":"Number"},
     { "name":"thresholdType", "value":"", "type":"String"},
     { "name":"totalAvailableQuantity", "value":"", "type":"Number"},
     { "name":"onhandAvailableQuantity", "value":"", "type":"Number"},
     { "name":"futureAvailableQuantity", "value":"", "type":"Number"},
     { "name":"earliestOnhandAvailableDate", "value":"", "type":"dateTime"},
     { "name":"latestOnhandAvailableDate", "value":"", "type":"dateTime"},
     { "name":"earliestFutureAvailableDate", "value":"", "type":"dateTime"},
     { "name":"latestFutureAvailableDate", "value":"", "type":"dateTime"},
     { "name":"totalReservedQuantityWithheld", "value":"0.0", "type":"Number"}
     { "name":"totalSafetyQuantityWithheld","value":"","type":"Number"},
     { "name":"onhandSafetyQuantityWithheld","value":"","type":"Number"},
     { "name":"futureSafetyQuantityWithheld","value":"","type":"Number"},
     { "name":"totalShortageQuantity","value":"","type":"Number"}        
   ]
}
You can manually trigger the snapshot for a specific node by calling the publish_all API. The ShipNodeSnapshot publish_all API returns a job URL along with the jobId. It also publishes a dummy event when the process is complete, which has the same format as the normal message, but it omits all attributes other than tenantId and snapshotId. The snapshotId is a UUID to recognize the event.
Tip: You can generate a snapshot for a specific node, all nodes, or nodes that belong to a distribution group.
https://api.watsoncommerce.ibm.com/<tenantId>/v1/configuration/events/ProductAvailabilityToSell.ShipNodeSnapshot/publish_all

The fulfillmentAllowed attribute is included in the event that indicates whether the inventory availability for the specific item, node, or delivery method is overridden by fulfillment option settings. The fulfillment option is configurable at both the node and item level. For more information, see Item fulfillment options.

For more information, see REST API documentation.

Demand.Change
You can publish the demand change data to an external system for analytics in inventory. Such data would enable the supply chain (SC) manager to be alerted when there is a sudden flux of inventory demand. For example, if there is a sudden hand sanitizer demand spike, the SC manager can quickly alter the fulfillment strategy to mitigate contractual damage to some of the high valued buyers.
The following sample payload is an example of a published event. The inventory event ID is Demand.Change and event code in payload is demandChange.
Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
{
    "specversion" : "1.0",
    "datacontenttype" : "application/json",
    "type": "demandChange",
    "id": "<UUID>",
    "time": "<time ISO-8601 format>",
    "data": {
        "itemId": "SHIRT",
        "unitOfMeasure": "EACH",
        "productClass": "CLASS_1",
        "tagNumber": "A|02",
        "shipNode": "store-BostonMA",
        "baseType": "OPEN_ORDER",
        "type": "CUSTOM_OPEN_ORDER",
        "segment": "Web",
        "segmentType": "Channel",
        "shipDate": "2020-05-29T13:00:00.000Z",
        "cancelDate": "2020-06-28T13:00:00.000Z",
        "minShipByDate": "2022-01-22T05:00:00.000Z",
        "quantity": 3.0,
        "changedQuantity": 2.0,
        "updatedTs": "2020-05-28T06:00:00.000Z",
        "adjustmentReason" : "PROCESS"
    }
}

The updatedTs field indicates the time when the database was updated for this demand.