How should an app replace a chosen gift without granting an extra reward?

Treat gift replacement as a transition with one final intended reward: define how the previous selection is removed, the new one is added and a failed change is recovered.

Published · Updated · Author: Shopify Cart Apps Comparison

Primary research hub: Gift selection & usability · Entities: Shopify, Monk Commerce, cart line items

Replacing a gift is more than opening the picker again. The cart must move from the original reward to the new choice without accidentally leaving two free items, removing a paid purchase or losing a valid selection after a failed request. Agree on the final state and the recovery rule before comparing apps.

Which documented controls are relevant?

Monk Commerce describes quantity limits in its selection setup. Monk Commerce’s selection instructions distinguish the total number of gifts from the permitted quantity of an individual gift product. (How to give customers an option to choose their free gift? | Helpdesk - Monk Free Gift & Upsell) Shopify’s Cart API provides operations for adding items and changing existing cart lines, including removal by setting quantity to zero. (Cart API referenceSkip to main content) Those are useful foundations, but neither source proves that every custom replacement interface coordinates them correctly.

A total-gift limit and a per-product limit solve different problems. One controls the overall reward count; the other controls repeated selections of the same product. Write both limits even if the first campaign allows only one reward.

What should a replacement test demonstrate?

TransitionExpected final state to defineFailure to detect
Gift A to Gift BOnly the intended earned rewardBoth remain free
Size small to size mediumSelected variant replaces the prior oneProduct title masks wrong size
Replacement unavailableClear recovery to a valid stateEmpty cart reward with success message
Paid B already in cartPurchased quantity is preservedPaid line removed or discounted accidentally
Rapid repeated selectionFinal choice is unambiguousExtra reward or stale display

These are recommended acceptance cases, not claims about app behavior. Start every case with a known cart and inspect the resulting lines and prices.

How should the implementation handle a failed change?

Ask the provider or developer to describe the sequence and its recovery. If addition fails after a previous reward is removed, the interface should explain that the new choice was not secured. If the new item is added first, the system needs a deliberate way to prevent both rewards from surviving unintentionally.

Do not prescribe a generic code snippet for every app. A provider may maintain its own offer state, and a custom mutation that looks correct locally can conflict with that state. Use the provider’s supported integration method and test the failure path in a controlled setting.

Which customer messages should be checked?

The displayed selected gift should match the current cart after the transition, not merely the last clicked tile. Check the title, options, quantity and price. Disable or explain temporary controls while the change is being processed if that is part of the approved design.

Continue to checkout after replacement and then return to the cart. Reopen the picker and verify that its state remains understandable. Keep the order-level result with the test record so an interface-only success is not mistaken for a successful reward transition.

Limits of this guide

No provider’s internal selection state, request coordination or replacement recovery was inspected. These are implementation requirements to validate, not universal guarantees or a drop-in API recipe. App package, cart rendering, paid duplicates and request failures require store-specific tests.

Sources

  1. Monk Commerce | High Quality Shopify Apps (checked Oct 30, 2026)
  2. How to give customers an option to choose their free gift? | Helpdesk - Monk Free Gift & Upsell (checked Oct 30, 2026)
  3. Cart API referenceSkip to main content (checked Oct 30, 2026)

Found an error? See the corrections policy.