(note: written with Claude to help an agent diagnose and reproduce the issue)
TL;DR: During US back-to-school sales tax holidays, returnCalculate (and the exchange orders created from it) applies sales tax to even exchanges — same product, different size/color — of items that were bought tax-exempt during the holiday window. Several states’ laws explicitly say no sales tax is due on these exchanges, even when the exchange happens after the holiday ends. As currently designed, the API tells merchants to collect tax that isn’t legally due, and there appears to be no input that lets an app correct this.
We build returns/exchange software used by Shopify merchants. In mid-August we saw a spike of customers at an apparel merchant being asked to pay sales tax when making an even exchange on orders placed during the Aug 7–9 holiday window.
The legal requirement
Many states run back-to-school sales tax holidays each August exempting clothing under a price cap (FTA 2026 schedule — OK, TX, MO, OH, VA all ran Aug 7–9, 2026). These laws address exchanges directly. Oklahoma’s Tax Commission FAQ, for example (source):
“If a customer buys an eligible item during the sales tax holiday and later exchanges it for the same item in a different size or color, tax is not to be charged even if the exchange is made after the sales tax holiday.”
The same FAQ says exchanges for a different item after the holiday are taxable — so the correct behavior depends on distinguishing an even exchange from a different-item exchange, which the caller (the returns app) knows but has no way to communicate.
Reproduction (real orders, redacted)
Original order, placed during the holiday window:
- Order
#79xxx67, placed Aug 8, 2026, ship-to Oklahoma (OK holiday: Aug 7–9) - Line item: a bra, $69.00 list / $58.65 after discount — qualifying clothing under the state’s $100/item cap
- Tax charged at checkout: $0.00 — the order’s tax lines list the jurisdiction rates (combined state + county + city, 8.75%) with $0.00 amounts, i.e. the holiday exemption was correctly applied at purchase
Even exchange, initiated Aug 19, 2026 (after the window), same product in a different size, same $69.00 price, no address change:
- The exchange calculation returns $5.13 tax due on the exchange item — exactly 8.75% of the $58.65 discounted price, the full non-holiday rate
Here is the actual returnCalculate call (trimmed and redacted). Note the asymmetry in one response: the return line (bought during the holiday) shows totalTaxSet: 0.00 — Shopify knows no tax was collected on the original line — while the exchange line for the same product at the same price shows totalTaxSet: 5.13:
// query variables
{
"input": {
"orderId": "gid://shopify/Order/68…26",
"returnLineItems": [
{ "fulfillmentLineItemId": "gid://shopify/FulfillmentLineItem/14…46", "quantity": 1 }
],
"exchangeLineItems": [
{
"variantId": "gid://shopify/ProductVariant/42…42", // same product, different size
"quantity": 1,
"appliedDiscount": { "value": { "amount": { "amount": 10.35, "currencyCode": "USD" } } }
}
]
}
}
// response (money fields only)
{
"returnCalculate": {
"returnLineItems": [
{
"subtotalSet": { "shopMoney": { "amount": "-58.65" } },
"totalTaxSet": { "shopMoney": { "amount": "0.0" } } // ← original line: no tax was collected (holiday exemption)
}
],
"exchangeLineItems": [
{
"originalUnitPriceSet": { "shopMoney": { "amount": "69.0" } },
"discountedUnitPriceSet": { "shopMoney": { "amount": "58.65" } },
"totalTaxSet": { "shopMoney": { "amount": "5.13" } } // ← same item, same price: full 8.75% now due
}
]
}
}
This is not an isolated case. Looking at one merchant’s Texas orders created inside the Aug 7–9 window: ~90% of orders with no return activity have $0 tax (exemption applied at checkout as expected), but of the 28 orders that later had an exchange, 22 now carry non-zero tax — added when the exchange order was created on a post-holiday date. Across two days (Aug 18–19) this merchant fielded 11 customer complaints about being asked to pay tax on an even exchange. Happy to DM unredacted order IDs and full payloads to Shopify staff.
Why it happens
In this recent thread, Shopify staff confirmed that returnCalculate intentionally “recalculate[s] at request time as a new sale to the destination address” rather than referencing the original order’s tax lines. That’s a reasonable default for most cases — but for holiday-window even exchanges it produces a legally incorrect result: the tax provider is asked to rate a new sale on the current date, so the holiday exemption that applied to the original purchase never enters the calculation. Third-party tax services (this merchant uses Avalara) do support sales tax holidays, but they can only apply the exemption if they receive the right date basis or exemption signal — and nothing in the current exchange flow passes that through.
Questions / ask
- Is there any existing input on
returnCalculate/returnCreateexchange lines to mark a line tax-exempt, or to have tax computed on the original order’s date basis? (We haven’t found one.) - If not, we’d like to request a mechanism — e.g. a
taxBasisDateinput, or a per-exchange-line exemption flag — that gets passed through to the tax provider. The caller knows whether the exchange is even (same item, size/color swap) vs a different item, so it can supply exactly the distinction state law requires. - In the meantime, what does Shopify recommend? Today the merchant’s CX team manually waives the tax for each customer who contacts them, which doesn’t reach the customers who silently abandon the exchange and take a refund instead.
This affects every US apparel merchant with customers in holiday states, every August. Thanks for taking a look.