# Mutations / Products

# Products

**Mutation**
## addProductBackorder — Returns [ProductBackorder](/documentation/Objects/Products#ProductBackorder)

**Scopes required:** add_product_backorder

| Arguments | Type | Description |
| --- | --- | --- |
| product | [ID!](/documentation/Types/UUID#UUID) | The ID of the product to backorder |
| outlet | [ID!](/documentation/Types/UUID#UUID) | The ID of the outlet to backorder the product in |
| customer | [ID!](/documentation/Types/UUID#UUID) | The ID of the customer who wants the backorder |
| quantity | *Float* | The quantity of the product to order, defaults to 1 |
| recurringPeriod | [TimePeriod](/documentation/Types/Time-Period#TimePeriod) | The recurring period to reorder this product on, specify `null` if it's a one-off backorder |
| nextDueDate | [DateTime](/documentation/Types/Date-Time#DateTime) | The next time this product is due to be ordered |
| notes | *String* | The notes relating to this backorder |

**Example Mutation**

```graphql
mutation AddProductBackorder($product: ID!, $outlet: ID!, $customer: ID!) {
    addProductBackorder(product: $product, outlet: $outlet, customer: $customer) {
        id,
        quantity,
        recurringPeriod,
        nextDueDate,
        notes
    }
}

# Example variables
{
    "product": "<PRODUCT>",
    "outlet": "<OUTLET>",
    "customer": "<CUSTOMER>"
}
```

**Mutation**
## addProductCompetitionPrice — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| product | [ID!](/documentation/Types/UUID#UUID) | The product to associate the competition price |
| competitor | *String!* | The name of the competitor |
| quantity | *Float!* | The quantity of the competitor's price |
| price | *Float!* | The competitor's price |

**Example Mutation**

```graphql
mutation AddProductCompetitionPrice($product: ID!, $competitor: String!, $quantity: Float!, $price: Float!) {
    addProductCompetitionPrice(product: $product, competitor: $competitor, quantity: $quantity, price: $price) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "product": "<PRODUCT>",
    "competitor": "<COMPETITOR>",
    "quantity": "<QUANTITY>",
    "price": "<PRICE>"
}
```

**Mutation**
## applyAllFutureCosts — Returns [[FutureCost]](/documentation/Objects/Products#FutureCost)

**Scopes required:** edit_products

> <p>This mutation has been deprecated. The ApplyFutureCosts mutation should be used instead</p>

**Example Mutation**

```graphql
mutation ApplyAllFutureCosts {
    applyAllFutureCosts {
        id,
        cost,
        effectiveTime
    }
}
```

**Mutation**
## applyAllFuturePrices — Returns [[FuturePrice]](/documentation/Objects/Products#FuturePrice)

**Scopes required:** edit_products

> <p>This mutation has been deprecated. The ApplyFuturePrices mutation should be used instead</p>

**Example Mutation**

```graphql
mutation ApplyAllFuturePrices {
    applyAllFuturePrices {
        id,
        quantity,
        price,
        priceEx,
        effectiveTime
    }
}
```

**Mutation**
## applyFutureCost — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the future cost to apply |

**Example Mutation**

```graphql
mutation ApplyFutureCost($id: ID!) {
    applyFutureCost(id: $id)
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## applyFutureCosts — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]](/documentation/Types/UUID#UUID) | The list of future cost IDs to apply |
| applyAll | *Boolean* | Whether to apply all future costs. Cannot be used at the same time as ids |

**Example Mutation**

```graphql
mutation ApplyFutureCosts($ids: [ID!]) {
    applyFutureCosts(ids: $ids)
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## applyFuturePrice — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the future price to apply |

**Example Mutation**

```graphql
mutation ApplyFuturePrice($id: ID!) {
    applyFuturePrice(id: $id)
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## applyFuturePrices — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]](/documentation/Types/UUID#UUID) | The list of future price IDs to apply |
| applyAll | *Boolean* | Whether to apply all future prices. Cannot be used at the same time as ids |

**Example Mutation**

```graphql
mutation ApplyFuturePrices($ids: [ID!]) {
    applyFuturePrices(ids: $ids)
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## associateBarcode — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** associate_barcode

| Arguments | Type | Description |
| --- | --- | --- |
| product | [ID!](/documentation/Types/UUID#UUID) | The ID of the product to associate the barcode to |
| barcode | *String!* | The barcode to associate |
| quantity | *Float!* | The quantity to associate the barcode to |

**Example Mutation**

```graphql
mutation AssociateBarcode($product: ID!, $barcode: String!, $quantity: Float!) {
    associateBarcode(product: $product, barcode: $barcode, quantity: $quantity) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "product": "<PRODUCT>",
    "barcode": "<BARCODE>",
    "quantity": "<QUANTITY>"
}
```

**Mutation**
## associateProduct — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** create_products, edit_products, delete_products

| Arguments | Type | Description |
| --- | --- | --- |
| from | [ID!](/documentation/Types/UUID#UUID) | The original product |
| to | [ID!](/documentation/Types/UUID#UUID) | The product to associate the "from" to |
| supplier | [ID](/documentation/Types/UUID#UUID) | The supplier to move |
| supplierCode | *String* | The supplier code of the product, if provided, it will update the supplier code, not create a new one |

**Example Mutation**

```graphql
mutation AssociateProduct($from: ID!, $to: ID!) {
    associateProduct(from: $from, to: $to) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "from": "<FROM>",
    "to": "<TO>"
}
```

**Mutation**
## bulkDeleteProducts — Returns [BulkDeleteProductsResponse](/documentation/Objects/Bulk-Delete-Products#BulkDeleteProductsResponse)

**Scopes required:** delete_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]!](/documentation/Types/UUID#UUID) | The list of product IDs to delete |

**Example Mutation**

```graphql
mutation BulkDeleteProducts($ids: [ID!]!) {
    bulkDeleteProducts(ids: $ids) {
        deleted
    }
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## bulkUpdateProducts — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]!](/documentation/Types/UUID#UUID) | The IDs of the products to apply the status update to |
| status | [ProductStatusEnum](/documentation/Enums/Product-Status-Enum#ProductStatusEnum) | The status to apply to the products |
| nameCase | [ProductNameCaseEnum](/documentation/Enums/Product-Name-Case-Enum#ProductNameCaseEnum) | What case to change the selected product's names |

**Example Mutation**

```graphql
mutation BulkUpdateProducts($ids: [ID!]!) {
    bulkUpdateProducts(ids: $ids)
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## createFutureCosts — Returns [[FutureCost]](/documentation/Objects/Products#FutureCost)

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| futureCosts | [[FutureCostInput!]!](/documentation/Inputs/Products#FutureCostInput) | The future costs to add |

**Example Mutation**

```graphql
mutation CreateFutureCosts($futureCosts: [FutureCostInput!]!) {
    createFutureCosts(futureCosts: $futureCosts) {
        id,
        cost,
        effectiveTime
    }
}

# Example variables
{
    "futureCosts": [
        {
            "item": "<ITEM>",
            "type": "PRODUCT",
            "cost": "<COST>",
            "effective": "<EFFECTIVE>"
        }
    ]
}
```

**Mutation**
## createFuturePrices — Returns [[FuturePrice]](/documentation/Objects/Products#FuturePrice)

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| futurePrices | [[FuturePriceInput]](/documentation/Inputs/Products#FuturePriceInput) | The future prices to add |

**Example Mutation**

```graphql
mutation CreateFuturePrices($futurePrices: [FuturePriceInput]) {
    createFuturePrices(futurePrices: $futurePrices) {
        id,
        quantity,
        price,
        priceEx,
        effectiveTime
    }
}

# Example variables
{
    "futurePrices": [
        {
            "item": "<ITEM>",
            "type": "PRODUCT",
            "quantity": "<QUANTITY>",
            "effective": "<EFFECTIVE>"
        }
    ]
}
```

**Mutation**
## createProduct — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** create_products

| Arguments | Type | Description | Validation |
| --- | --- | --- | --- |
| name | *String* | The name of the product |  |
| type | [ProductTypeEnum!](/documentation/Enums/Product-Type-Enum#ProductTypeEnum) | The type of product this is |  |
| status | [ProductStatusEnum](/documentation/Enums/Product-Status-Enum#ProductStatusEnum) | The status of the product |  |
| caseQuantity | *Float* | The case quantity of the product. It is no longer valid to supplier this as a decimal value | Minimum: 1Maximum: 9,999 |
| requestQuantity | *Boolean* | Whether the product should ask for the quantity rather than starting at the base quantity (does not affect barcodes) |  |
| requestPrice | *Boolean* | Whether the product should ask for its price rather than having preset pricing |  |
| description | *String* | An HTML description of the product |  |
| category | [ID](/documentation/Types/UUID#UUID) | The product\'s category |  |
| brand | [ID](/documentation/Types/UUID#UUID) | The product\'s brand |  |
| family | [ID](/documentation/Types/UUID#UUID) | A family is for grouping of similar products but separate varieties that allow prices to mix and match together |  |
| alignFamily | *Boolean* | Align the all the products in the family to the prices of this product |  |
| tags | [[ID]](/documentation/Types/UUID#UUID) | The tags to assign this product |  |
| suppliers | [[ProductSupplierInput]](/documentation/Inputs/Products#ProductSupplierInput) | The suppliers this product can be purchased from |  |
| coreSupplier | [ID](/documentation/Types/UUID#UUID) | The core / main supplier this product is purchased from (must appear in the `suppliers` array) |  |
| orderNotes | *String* | Notes to display when ordering a product |  |
| invoiceNotes | *String* | Notes to display when receiving this product on an order |  |
| taxRate | [ID](/documentation/Types/UUID#UUID) | The tax rate this product is sold with, defaults to the Vendor's default tax rate |  |
| costTaxRate | [CostTaxRateID](/documentation/Types/Cost-Tax-Rate-I-D#CostTaxRateID) | The tax rate used when handling this product\'s costs, defaults to the product's tax rate |  |
| useScales | *Boolean* | Whether this product can be weighed using scales |  |
| useBarcodeTemplates | *Boolean* | Whether this product can have barcodes with barcode templates |  |
| usePriceLabel | *Boolean* | `usePriceLabels` has been superseded by `useBarcodeTemplates` |  |
| preventManualDiscounts | *Boolean* | Whether this product can have a manual discount applied |  |
| ignorePriceHostChanges | *Boolean* | Whether this product can receive price changes from a host file. |  |
| ignoreBarcodeHostChanges | *Boolean* | Whether this product can receive barcode changes from a host file. |  |
| cost | *Float* | The cost for this product |  |
| costPercentage | *Boolean* | Whether the cost is a percentage of the sell price |  |
| trackInventory | *Boolean* | Whether to track inventory for this product |  |
| ticketInformation | [[AdditionalValueInput]](/documentation/Inputs/Additional-Value-Input#AdditionalValueInput) | The ticketing information for this product |  |
| image | *String* | The main image for this product |  |
| alternateImages | *[String]* | The alternative images for this product |  |
| prices | [[ProductPriceInput]](/documentation/Inputs/Products#ProductPriceInput) | The prices for this product |  |
| barcodes | [[ProductBarcodeInput]](/documentation/Inputs/Products#ProductBarcodeInput) | The barcodes for this product |  |
| inventory | [[ProductInventoryInput]](/documentation/Inputs/Products#ProductInventoryInput) | The inventory for this product |  |
| loyalty | [[ProductLoyaltyInput]](/documentation/Inputs/Products#ProductLoyaltyInput) | The loyalty for this product to be earned and redeemed |  |
| contains | [[ProductContainsInput]](/documentation/Inputs/Products#ProductContainsInput) | The item that are contained in this product (used only for "PACKAGE" and "BASKET" types |  |
| metcashMSC | *String* | The Metcash classification for the product |  |

**Example Mutation**

```graphql
mutation CreateProduct($type: ProductTypeEnum!) {
    createProduct(type: $type) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "type": "NORMAL"
}
```

**Mutation**
## deleteBarcodes — Returns *boolean*

**Scopes required:** edit_barcodes

| Arguments | Type | Description |
| --- | --- | --- |
| barcodes | [[BarcodeDeleteInput!]!](/documentation/Inputs/Products#BarcodeDeleteInput) | The list of barcodes to delete |

**Example Mutation**

```graphql
mutation DeleteBarcodes($barcodes: [BarcodeDeleteInput!]!) {
    deleteBarcodes(barcodes: $barcodes)
}

# Example variables
{
    "barcodes": [
        {
            "product": "<PRODUCT>",
            "code": "<CODE>"
        }
    ]
}
```

**Mutation**
## removeFutureCost — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the future cost to delete |

**Example Mutation**

```graphql
mutation DeleteFutureCost($id: ID!) {
    removeFutureCost(id: $id)
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## removeFutureCosts — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]](/documentation/Types/UUID#UUID) | The list of future cost IDs to apply |
| removeAll | *Boolean* | Whether to remove all future prices. Cannot be used at the same time as ids |

**Example Mutation**

```graphql
mutation DeleteFutureCosts($ids: [ID!]) {
    removeFutureCosts(ids: $ids)
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## removeFuturePrice — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the future price to delete |

**Example Mutation**

```graphql
mutation DeleteFuturePrice($id: ID!) {
    removeFuturePrice(id: $id)
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## removeFuturePrices — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| ids | [[ID!]](/documentation/Types/UUID#UUID) | The list of future price IDs to apply |
| removeAll | *Boolean* | Whether to remove all future prices. Cannot be used at the same time as ids |

**Example Mutation**

```graphql
mutation DeleteFuturePrices($ids: [ID!]) {
    removeFuturePrices(ids: $ids)
}

# Example variables
{
    "ids": [
        "<IDS>"
    ]
}
```

**Mutation**
## deleteProduct — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** delete_products

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the product to delete |

**Example Mutation**

```graphql
mutation DeleteProduct($id: ID!) {
    deleteProduct(id: $id) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## deleteProductBackorder — Returns *boolean*

**Scopes required:** update_product_backorder

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the backorder to remove |

**Example Mutation**

```graphql
mutation DeleteProductBackorder($id: ID!) {
    deleteProductBackorder(id: $id)
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## mergeProducts — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** create_products, delete_products

| Arguments | Type | Description |
| --- | --- | --- |
| name | *String* | The name of the product |
| type | [ProductTypeEnum!](/documentation/Enums/Product-Type-Enum#ProductTypeEnum) | The type of product this is |
| status | [ProductStatusEnum](/documentation/Enums/Product-Status-Enum#ProductStatusEnum) | The status of the product |
| caseQuantity | *Float* | The case quantity of the product |
| requestQuantity | *Boolean* | Whether the product should ask for the quantity rather than starting at the base quantity (does not affect barcodes) |
| requestPrice | *Boolean* | Whether the product should ask for its price rather than having preset pricing |
| preventManualDiscounts | *Boolean* | Whether this product can have a manual discount applied |
| ignorePriceHostChanges | *Boolean* | Whether this product can receive price changes from a host file. |
| ignoreBarcodeHostChanges | *Boolean* | Whether this product can receive barcode changes from a host file. |
| description | *String* | An HTML description of the product |
| category | [ID](/documentation/Types/UUID#UUID) | The product's category |
| brand | [ID](/documentation/Types/UUID#UUID) | The product's brand |
| family | [ID](/documentation/Types/UUID#UUID) | A family is for grouping of similar products but separate varieties that allow prices to mix and match together |
| tags | [[ID]](/documentation/Types/UUID#UUID) | The tags to assign this product |
| suppliers | [[ProductSupplierInput]](/documentation/Inputs/Products#ProductSupplierInput) | The suppliers this product can be purchased from |
| orderNotes | *String* | Notes to display when ordering a product |
| taxRate | [ID](/documentation/Types/UUID#UUID) | The tax rate this product is sold with, defaults to the Vendor's default tax rate |
| useScales | *Boolean* | Whether this product can be weighed using scales |
| useBarcodeTemplates | *Boolean* | Whether this product can have barcodes with barcode templates |
| usePriceLabel | *Boolean* | usePriceLabels has been superseded by useBarcodeTemplates |
| cost | *Float* | The cost for this product |
| costPercentage | *Boolean* | Whether the cost is a percentage of the sell price |
| costs | [[ProductCostInput]](/documentation/Inputs/Products#ProductCostInput) | All of the costs this product has (cannot be used with the `cost` field) |
| trackInventory | *Boolean* | Whether to track inventory for this product |
| ticketInformation | [[AdditionalValueInput]](/documentation/Inputs/Additional-Value-Input#AdditionalValueInput) | The ticketing information for this product |
| image | *String* | The main image for this product |
| alternateImages | *[String]* | The alternative images for this product |
| prices | [[ProductPriceInput]](/documentation/Inputs/Products#ProductPriceInput) | The prices for this product |
| barcodes | [[ProductBarcodeInput]](/documentation/Inputs/Products#ProductBarcodeInput) | The barcodes for this product |
| inventory | [[ProductInventoryInput]](/documentation/Inputs/Products#ProductInventoryInput) | The inventory for this product |
| loyalty | [[ProductLoyaltyInput]](/documentation/Inputs/Products#ProductLoyaltyInput) | The loyalty for this product to be earned and redeemed |
| contains | [[ProductContainsInput]](/documentation/Inputs/Products#ProductContainsInput) | The item that are contained in this product (used only for "PACKAGE" and "BASKET" types |
| merge | [[ID]](/documentation/Types/UUID#UUID) | The list of product IDs to merge into the new product |

**Example Mutation**

```graphql
mutation MergeProducts($type: ProductTypeEnum!) {
    mergeProducts(type: $type) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "type": "NORMAL"
}
```

**Mutation**
## removeProductCompetitionPrice — Returns *boolean*

**Scopes required:** edit_products

| Arguments | Type | Description |
| --- | --- | --- |
| product | [ID!](/documentation/Types/UUID#UUID) | The ID of the product to remove the competition price from |
| competitor | *String!* | The name of the competitor whose price should be removed |
| quantity | *Float!* | The quantity of the competition price to remove |

**Example Mutation**

```graphql
mutation RemoveProductCompetitionPrice($product: ID!, $competitor: String!, $quantity: Float!) {
    removeProductCompetitionPrice(product: $product, competitor: $competitor, quantity: $quantity)
}

# Example variables
{
    "product": "<PRODUCT>",
    "competitor": "<COMPETITOR>",
    "quantity": "<QUANTITY>"
}
```

**Mutation**
## updateProduct — Returns [Product](/documentation/Objects/Products#Product)

**Scopes required:** edit_products

| Arguments | Type | Description | Validation |
| --- | --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the product you want to update |  |
| name | *String* | The name of the product |  |
| status | [ProductStatusEnum](/documentation/Enums/Product-Status-Enum#ProductStatusEnum) | The status of the product |  |
| caseQuantity | *Float* | The case quantity of the product | Minimum: 0Maximum: 10,000 |
| requestQuantity | *Boolean* | Whether the product should ask for the quantity rather than starting at the base quantity (does not affect barcodes) |  |
| requestPrice | *Boolean* | Whether the product should ask for its price rather than having preset pricing |  |
| description | *String* | An HTML description of the product |  |
| category | [ID](/documentation/Types/UUID#UUID) | The product's category |  |
| brand | [ID](/documentation/Types/UUID#UUID) | The product's brand |  |
| family | [ID](/documentation/Types/UUID#UUID) | A family is for grouping of similar products but separate varieties that allow prices to mix and match together |  |
| alignFamily | *Boolean* | Align the all the products in the family to the prices of this product |  |
| tags | [[ID]](/documentation/Types/UUID#UUID) | The tags to assign this product |  |
| suppliers | [[ProductSupplierInput]](/documentation/Inputs/Products#ProductSupplierInput) | The suppliers this product can be purchased from |  |
| coreSupplier | [ID](/documentation/Types/UUID#UUID) | The core / main supplier this product is purchased from (must appear in the `suppliers` array) |  |
| orderNotes | *String* | Notes to display when ordering a product |  |
| invoiceNotes | *String* | Notes to display when receiving this product on an order |  |
| taxRate | [ID](/documentation/Types/UUID#UUID) | The tax rate this product is sold with |  |
| costTaxRate | [CostTaxRateID](/documentation/Types/Cost-Tax-Rate-I-D#CostTaxRateID) | The tax rate used when handling this product's costs |  |
| cost | *Float* | The cost for this product(cannot be used with the `costs` array) |  |
| costs | [[ProductCostInput]](/documentation/Inputs/Products#ProductCostInput) | All of the costs this product has(cannot be used with the `cost` field) |  |
| costPercentage | *Boolean* | Whether this product's cost is a percentage of its sell price (cannot be used with the `costs` array) |  |
| trackInventory | *Boolean* | Whether inventory should be tracked for this product |  |
| useScales | *Boolean* | Whether this product can be weighed using scales |  |
| useBarcodeTemplates | *Boolean* | Whether this product can have barcodes with barcode templates |  |
| usePriceLabel | *Boolean* | usePriceLabels has been superseded by useBarcodeTemplates |  |
| preventManualDiscounts | *Boolean* | Whether this product can have a manual discount applied |  |
| ignorePriceHostChanges | *Boolean* | Whether this product can receive price changes from a host file. |  |
| ignoreBarcodeHostChanges | *Boolean* | Whether this product can receive barcode changes from a host file. |  |
| ticketInformation | [[AdditionalValueInput]](/documentation/Inputs/Additional-Value-Input#AdditionalValueInput) | The ticketing information for this product (If set, this will override the old values) |  |
| image | *String* | The main image for this product |  |
| alternateImages | *[String]* | The alternative images for this product |  |
| prices | [[ProductPriceInput]](/documentation/Inputs/Products#ProductPriceInput) | The prices for this product |  |
| barcodes | [[ProductBarcodeInput]](/documentation/Inputs/Products#ProductBarcodeInput) | The barcodes for this product |  |
| inventory | [[ProductInventoryInput]](/documentation/Inputs/Products#ProductInventoryInput) | The inventory for this product |  |
| loyalty | [[ProductLoyaltyInput]](/documentation/Inputs/Products#ProductLoyaltyInput) | The loyalty for this product to be earned and redeemed |  |
| contains | [[ProductContainsInput]](/documentation/Inputs/Products#ProductContainsInput) | The item that are contained in this product (used only for "PACKAGE" and "BASKET" types) |  |
| metcashMSC | *String* | The Metcash classification for this product |  |

**Example Mutation**

```graphql
mutation UpdateProduct($id: ID!) {
    updateProduct(id: $id) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## updateProductBackorder — Returns [ProductBackorder](/documentation/Objects/Products#ProductBackorder)

**Scopes required:** update_product_backorder

| Arguments | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID of the backorder to update |
| quantity | *Float* | The quantity of the backorder |
| recurringPeriod | [TimePeriod](/documentation/Types/Time-Period#TimePeriod) | The recurring period to reorder this product on |
| nextDueDate | [DateTime](/documentation/Types/Date-Time#DateTime) | The next time this product is due to be ordered |
| notes | *String* | The notes relating to this backorder |

**Example Mutation**

```graphql
mutation UpdateProductBackorder($id: ID!) {
    updateProductBackorder(id: $id) {
        id,
        quantity,
        recurringPeriod,
        nextDueDate,
        notes
    }
}

# Example variables
{
    "id": "<ID>"
}
```

**Mutation**
## updateProducts — Returns [[Product]](/documentation/Objects/Products#Product)

**Scopes required:** edit_products

> <p>
> This method is currently unstable, we would highly recommend using the single
> [updateProduct](/documentation/Mutations/Products#updateProduct)
> mutation as it has significantly better error handling and more features.
> </p>
<p>
    Returns every product actually affected by the update, not just the ones provided - a
    family price change also returns the family's other products.
</p>

| Arguments | Type | Description |
| --- | --- | --- |
| products | [[ProductInput]!](/documentation/Inputs/Product-Input#ProductInput) | The products to update |

**Example Mutation**

```graphql
mutation UpdateProducts($products: [ProductInput]!) {
    updateProducts(products: $products) {
        id,
        name,
        mdbId,
        type,
        active
    }
}

# Example variables
{
    "products": [
        {
            "id": "<ID>",
            "quantity": "<QUANTITY>",
            "price": "<PRICE>",
            "alignFamily": "<ALIGN_FAMILY>"
        }
    ]
}
```