Service eligibility and regional restrictions
PuppyIP serves only compliant overseas businesses and their authorized personnel. Proxy services are not available in mainland China. The service may only be used for lawful business activities outside mainland China. Use of this service within mainland China is prohibited.
Hosting a proxy IP or server overseas does not change these restrictions. The service must not be provided to end users in mainland China through relaying, forwarding, sharing or resale. Before use, read the Terms of Service.
Key Takeaways
- Check Discount.type before interpreting amount. This correction affects Percentage; FixedAmount and Code are unchanged by it.
- Every POS UI extensions API version is affected. Keeping an older api_version does not preserve the old units.
- Money displays, savings, loyalty points, and bulkCartUpdate may depend on the old value. Do not assume that extensions need no changes.
- Handle compatibility according to the POS version installed on each device. Separate FixedAmount and invalid-percentage reports still have no confirmed resolution.
Why the same 25% discount returns 25 instead of 50
Shopify’s October 7 developer announcement explains that POS 11.15 corrects Percentage Discount.amount to return a percentage value. Its example is a 25% discount on a $200 item: amount is now 25. POS 11.14 and earlier returned 50, the monetary amount deducted.
Reading 25 therefore does not mean the buyer saved only $25. Nor should you keep dividing it by the item price to reconstruct the percentage. Establish the field’s units before deciding how to display the discount or calculate a monetary value for your business logic.
Identify the discount type, then check where you read it
The change covers cart-level and line-item Percentage discounts, including manual, app-applied, and automatic discounts exposed with that type. Review the Cart API’s current state and subscriptions, lineItems[].discounts, cartDiscount, cartDiscounts, and the cartLineItem contextual API.
FixedAmount and Code do not change as part of this correction. That includes percentage-based discount codes returned with type Code. A code offering a percentage discount is not a reason to interpret every discount field using the new Percentage units.
Trace every place that depends on the old monetary value
Start with places that use Percentage.amount for currency displays, savings, loyalty points, or integrations. A Shopify staff follow-up on October 9 broadened the earlier exception: display, pricing, or bulkCartUpdate logic that depended on a monetary return value needs review. Looking for one percentage-conversion function is not enough.
If an extension previously converted the returned monetary amount back into a percentage, applying that compensation on POS 11.15 or later can convert an already correct value again. Handle the installed app version explicitly rather than inferring the units from a field name or extension API version.
Shopify recommends checking cart-level, line-item, and automatic percentage discounts, along with bulkCartUpdate paths, on POS 11.15 or later. That is the announcement’s review scope for developers. No device testing, store changes, or cart submissions were performed for this guide.
The POS app version and extension API version are different
This change applies to all POS UI extensions API versions. Keeping an older api_version in an extension’s configuration cannot preserve the monetary return behavior after a device moves to POS 11.15.
If the extension still supports devices on POS 11.14 or earlier, Shopify says to handle the previous behavior until those devices are upgraded. Do not assume every device used by one merchant upgrades together. The reviewed sources provide no universal completion date, country list, plan requirement, or fee change.
A returned discount is not automatically a valid write input
The Cart API defines the returned Discount.amount as a number. By contrast, the amount input to applyCartDiscount, for example, is a string. Check the discount type and the particular method’s contract separately. FixedAmount inputs for bulk line discounts are per unit: the documentation’s example passes 5.00 for a quantity of two to produce a $10.00 total discount.
The Percentage correction prevents an old monetary allocation from being interpreted as a percentage on a cart update. It does not establish that every cart can be passed back without a change. Staff still list the FixedAmount report for quantities above one and a separate report involving derived percentages above 100% as unresolved.
Sources
Frequently Asked Questions
If a Discount includes currency, can I treat amount as money?
Not from currency alone. The Cart API uses currency for the currency code associated with the active POS location. The meaning of amount also depends on the discount type: on POS 11.15 and later, Percentage.amount is a percentage value.
Has the FixedAmount quantity issue also been fixed?
There is no such confirmation. The October 9 staff reply says Shopify is tracking a report where reads return a total line discount while writes apply the amount per unit when quantity is above one. There is no confirmed correction or timeline. This is separate from the confirmed Percentage read-side correction.
Does a resolved bulkCartUpdate Promise prove the cart changed as intended?
This Percentage correction does not establish that guarantee. Staff say the separate report of the method resolving without changing the cart when a derived percentage exceeds 100% has no confirmed resolution. Compare the actual returned state with the intended result; do not treat the report as fixed or this guide as evidence of an executed call.