One automatic discount can give both
An app discount with a product class and a shipping class runs its function for the lines and again for the delivery options. Nothing has to combine: it is one discount.
Into the cart
- 1 × Single Bag at $40.00, bought once
- The cart attribute the app discount's function reads
- A US delivery address, with the cheapest rate selected
What Shopify returned
| Line | Quantity | Price | Discounts on the line | Line total |
|---|---|---|---|---|
| Single Bag | 1 | $40.00 | −$10.00 automatic, “Offer Suite” | $30.00 |
| Discounts on the cart | none | |||
| Delivery: Standard selectedQuoted: Standard $8.00, Express $15.00 | −$8.00 automatic, “Free shipping” | $0.00 | ||
| Cart total | $30.00 | |||
What that shows
- The line cost $30.00, with a $10.00 allocation named by the discount's title.
- The selected rate, Standard at $8.00, was discounted in full on the delivery group.
- The shipping allocation was named by the message the function gave its candidate, not by the discount's title.
- The same shipping allocation was also in the cart's own list, and the cart total was $30.00.
Two codes that allow each other both apply
A free-shipping code set to combine with product discounts, and a product code set to combine with shipping discounts. The first cart is the free-shipping code alone.
Into the cart
- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE: free shipping, one-time purchases only, combines with product and order discounts
- A US delivery address, with the cheapest rate selected
What Shopify returned
| Line | Quantity | Price | Discounts on the line | Line total |
|---|---|---|---|---|
| Single Bag | 1 | $40.00 | none | $40.00 |
| Discounts on the cart | none | |||
| Delivery: Standard selectedQuoted: Standard $8.00, Express $15.00 | −$8.00 code VERIFY-SHIPFREE | $0.00 | ||
| Cart total | $40.00 | |||
VERIFY-SHIPFREEapplicable: true
What that shows
- The $8.00 Standard rate was discounted in full by the code, on the delivery group and in the cart's own list; the cart total was $40.00.
Into the cart
- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE: free shipping, one-time purchases only, combines with product and order discounts
- Code VERIFY-BAG5: $5.00 off the bag, one-time purchases only, combines with product, order and shipping discounts
- A US delivery address, with the cheapest rate selected
What Shopify returned
| Line | Quantity | Price | Discounts on the line | Line total |
|---|---|---|---|---|
| Single Bag | 1 | $40.00 | −$5.00 code VERIFY-BAG5 | $35.00 |
| Discounts on the cart | none | |||
| Delivery: Standard selectedQuoted: Standard $8.00, Express $15.00 | −$8.00 code VERIFY-SHIPFREE | $0.00 | ||
| Cart total | $35.00 | |||
VERIFY-BAG5applicable: trueVERIFY-SHIPFREEapplicable: true
What that shows
- Both applied: $5.00 off the line and the $8.00 rate free, a cart total of $35.00.
A free-shipping code that combines with nothing was refused, though it was worth more
The product code is the same. The free-shipping code is now set to combine with nothing.
Shopify kept the product code and refused the shipping code. Do not assume the buyer gets the better of two discounts that cannot combine: in this cart they did not.
Into the cart
- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE-SOLO: free shipping, one-time purchases only, combines with nothing
- Code VERIFY-BAG5: $5.00 off the bag, one-time purchases only, combines with product, order and shipping discounts
- A US delivery address, with the cheapest rate selected
What Shopify returned
| Line | Quantity | Price | Discounts on the line | Line total |
|---|---|---|---|---|
| Single Bag | 1 | $40.00 | −$5.00 code VERIFY-BAG5 | $35.00 |
| Discounts on the cart | none | |||
| Delivery: Standard selectedQuoted: Standard $8.00, Express $15.00 | none | $8.00 | ||
| Cart total | $43.00 | |||
VERIFY-BAG5applicable: trueVERIFY-SHIPFREE-SOLOapplicable: false- warning
DISCOUNT_CODE_NOT_HONOURED“The VERIFY-SHIPFREE-SOLO discount code is not honoured”
What that shows
- Only the product code applied: $5.00 off the line, shipping charged at $8.00, a cart total of $43.00.
- The free-shipping code was listed as not applicable. The saving kept was the smaller one: $5.00 against the $8.00 the shipping code would have taken.
Beside the automatic discount, the same code was refused too
The automatic discount already makes the rate free. A free-shipping code that combines with nothing, added to that cart, changed nothing.
Into the cart
- 1 × Single Bag at $40.00, bought once
- The cart attribute the app discount's function reads
- Code VERIFY-SHIPFREE-SOLO: free shipping, one-time purchases only, combines with nothing
- A US delivery address, with the cheapest rate selected
What Shopify returned
| Line | Quantity | Price | Discounts on the line | Line total |
|---|---|---|---|---|
| Single Bag | 1 | $40.00 | −$10.00 automatic, “Offer Suite” | $30.00 |
| Discounts on the cart | none | |||
| Delivery: Standard selectedQuoted: Standard $8.00, Express $15.00 | −$8.00 automatic, “Free shipping” | $0.00 | ||
| Cart total | $30.00 | |||
VERIFY-SHIPFREE-SOLOapplicable: false- warning
DISCOUNT_CODE_NOT_HONOURED“The VERIFY-SHIPFREE-SOLO discount code is not honoured”
What that shows
- The automatic discount kept both of its parts: $10.00 off the line and the $8.00 rate free, a cart total of $30.00.
- The code was listed as not applicable.
How this was verified
Every cart on this page was built through the Storefront API on a Shopify Plus development store we keep for this, on API version 2026-10, and read back as Shopify priced it. The store sells one product in these carts: Single Bag, at $40.00, also sold on a selling plan named “Every 30 days” that has no pricing policy. It quotes two delivery rates to a US address.
It has one automatic app discount, titled “Offer Suite”, with a product class and a shipping class, set to combine with product, order and shipping discounts. Its function reads a cart attribute: with it, the function takes 25% off one unit of Single Bag bought once, or $8.00 off the unit on its selling plan, and makes the cheapest delivery rate free. Without it, the function returns no operations.
| Discount | Class | Gives | Combination setting |
|---|---|---|---|
| Code VERIFY-SHIPFREE | Shipping | free shipping, one-time purchases only | combines with product and order discounts |
| Code VERIFY-BAG5 | Product | $5.00 off the bag, one-time purchases only | combines with product, order and shipping discounts |
| Code VERIFY-SHIPFREE-SOLO | Shipping | free shipping, one-time purchases only | combines with nothing |
A suite builds these carts again and reads the discount settings from the store before it does. A statement that no longer matches the cart takes this page down until it is corrected, and no cart stands for more than 90 days without being built again. This is what one store returned on one API version: your store’s plan, markets and other apps can change the result, so build the cart.
Seen something different on your store? Write to privacy@offersuite.io with the cart and we’ll run it.