The following example shows connecting to Finale Inventory using the curl tool, retrieving the list of products, creating a new product, and then modifing a product.

To try this example on your own account you will need to replace the "dev" account name in the URL with your account name, and the authorization header with one using your API key/secret as described here.

Retrieve the list of all products, including the session cookie in our request for authentication:

curl --request GET \
     --url https://app.finaleinventory.com/dev/api/product/ \
     --header "authorization: Basic XXX'

Finale responds with the product representation stored in a column major table:

{ "productId" : ["NCP-001","NCP-018"],
  "internalName" : ["Red Comet","Blue mine"],
  "statusId" : ["PRODUCT_ACTIVE","PRODUCT_ACTIVE"],
  "productUrl" : ["/dev/api/product/NCP-001","/dev/api/product/NCP-018"],
  "actionUrlDeactivate" : ["/dev/api/product/NCP-001/deactivate","/dev/api/product/NCP-018/deactivate"],
  "manufacturerName" : ["Lidu","RES"]
}

Create a product by posting to the resource collection:

curl --request POST \
     --url https://app.finaleinventory.com/newcentury/api/product/ \
     --header 'authorization: Basic XXX' \
     --data '{"productId":"NCP-002","internalName":"Green peony"}'

Finale responds with the representation of new product, including additional fields added by the server:

{ "productId" : "NCP-002",
  "internalName" : "Green peony",
  "statusId" : "PRODUCT_ACTIVE",
  "productUrl" : "/dev/api/product/NCP-002",
  "actionUrlDeactivate" : "/dev/api/product/NCP-002/deactivate"
} 

Modify the product we just created by posting to its productUrl (any fields not included in the post are left unchanged):

curl --request POST \
     --url https://app.finaleinventory.com/newcentury/api/product/NCP-002 \
     --header 'authorization: Basic XXX' \
     --data '{"internalName":"Green peony to crackle"}'

Finale responds with the representation of the modified product:

{ "productId" : "NCP-002",
  "internalName" : "Green peony to crackle",
  "statusId" : "PRODUCT_ACTIVE",
  "productUrl" : "/dev/api/product/NCP-002",
  "actionUrlDeactivate" : "/dev/api/product/NCP-002/deactivate"
} 

Take an action to deactivate the product using an actionUrl specified by the server:

curl --request POST \
     --url https://app.finaleinventory.com/newcentury/api/product/NCP-002/deactivate \
     --header 'authorization: Basic XXX' \
     --data '{}'

Finale responds with the representation of the product after the action. In this case the statusID updates, the actionUrlDeactivate is removed since it is not a valid operation in the product's current state, and the actionUrlActivate is added as it is now valid:

{ "productId" : "NCP-002",
  "internalName" : "Green peony to crackle",
  "statusId" : "PRODUCT_INACTIVE",
  "productUrl" : "/dev/api/product/NCP-002",
  "actionUrlActivate" : "/dev/api/product/NCP-002/activate"
}