For modifying Bill of Materials (BoM), you need to use the Product endpoint. The request would look like this (replace dev with your account):

curl --request POST \
     --url https://app.finaleinventory.com/dev/api/product/100000 \
     --header 'authorization: Basic XXX' \
     --data '{"productAssocList":[{"productAssocTypeId":"MANUF_COMPONENT","productAssocUrl":"/dev/api/productassoc/100000","productAssocItemList":[{"productUrl":"/dev/api/product/100001","quantity":8}]}],"productId":"100000","productUrl":"/dev/api/product/100000"}'

Breaking out the data sent for the request:

{  
  "productAssocList": [  
    { "productAssocTypeId": "MANUF_COMPONENT",  
      "productAssocUrl": "/dev/api/productassoc/100000",  
      "productAssocItemList": [  
        { "productUrl": "/dev/api/product/100001", "quantity": 8 }  
      ]  
    }  
  ],  
  "productId": "100000",  
  "productUrl": "/dev/api/product/100000",
}

The productAssocUrl for the specific productAssocList needs to be correct. When creating a new productAssocList from an empty product, you can exclude the productAssocUrl. In all other cases, you must specify the productAssocUrl. This is a bug where if you don’t specify a productAssocUrl when updating the productAssocList, it will create a new productAssocList entry instead of replacing the existing entry. This extra entry will not be picked up by builds in the UI or in imports.

The UI / Imports only pulls the first productAssocList entry. All other entries will be ignored.

The other values included are the minimum values required for this request.

  • productAssocList: list of product BoMs (Our UI / Imports only support a single BoM, even though our API is capable of multiple)
  • productAssocUrl: The unique identifier for the productAssocList entry. Our UI / Imports only pull the first entry for this list, so the productAssocUrl needs to be specified for all update operations
  • productAssocTypeId: will always be “MANUF_COMPONENT” in the case of BoMs
  • productAssocItemList: The associated item list for the BoM. Each entry must have a productUrl and a quantity to be valid
  • productId, productUrl: Both the productId and productUrl are required for any updates to the product API

Just a note, product urls need to be pulled from the product collection. We use a different internal identifier than what is visible from the product ID, so the product URL is not always /dev/api/product/PRODUCT_ID.