Refund owed when I've already issued refund

Hi,

My issue is that after I call returnProcess and refund the item in a return, Shopify Admin still shows that a refund is owed, and I expect Shopify to understand that no refund is owed because it has already been given.

Example 1 (shop id: 24382341197):

July 23: Return created
July 30: Return processed (with refund)

And you can see that Shopify still thinks a refund is owed despite the refund already given.

Example 2 (shop id: 27006369827):

July 18: Return created
July 23: Return processed (with refund)

And you can see that Shopify still thinks a refund is owed despite the refund already given.

Please help me troubleshoot this!

Thanks
Jake

1 Like

Hey @Jake_Goodman

I can see from your screenshots that you’re getting inconsistent refund calculations where ā€œrefund owedā€ shows amounts that don’t match what was actually processed. To help me reproduce this I need some additional details.

Can you share the specific returnProcess mutation you’re using for these orders, including the complete request body and the x-request-id from the API response headers? This will help me trace exactly what’s happening during the refund processing.

I’d also like to understand the full order lifecycle for these examples. Were there any order edits, line item modifications, or partial captures before the returns were created? Having the step-by-step flow from order creation through return processing will help me better identify where the disconnect is occurring.

1 Like

Hey @Jake_Goodman, Are you still experiencing this issue, or can I mark this as solved?

Hi, thanks @KyleG-Shopify,

Here I will describe, in detail, one order lifecycle that demonstrates this unexpected behaviour. This order did not appear to have any order edits, line item modifications, or partial captures before the return was created.

Example 1 (gid://shopify/Shop/21126981):

  • July 31: Order placed via Online Store (gid://shopify/Order/6018813231146)
  • Aug 7: Return placed via Frate Returns. Called returnCreate with the following body:
{
   "returnInput":{
      "exchangeLineItems":[
         
      ],
      "notifyCustomer":false,
      "orderId":"gid://shopify/Order/6018813231146",
      "requestedAt":"2025-08-07T09:30:39.074376+00:00",
      "returnLineItems":[
         {
            "fulfillmentLineItemId":"gid://shopify/FulfillmentLineItem/12454149488682",
            "quantity":1,
            "returnReason":"SIZE_TOO_SMALL",
            "returnReasonNote":"It was too small for me. "
         }
      ],
      "returnShippingFee":{
         "amount":{
            "amount":15,
            "currencyCode":"USD"
         }
      },
      "unprocessed":true
   }
}
  • Aug 12: Return processed via Frate Returns. Called returnProcess with the following body (The x-request-id from the API response headers was f547b1b9-8106-4fb8-8227-0fc641632e82-1755026319):
{
   "input":{
      "exchangeLineItems":[
         
      ],
      "financialTransfer":{
         "issueRefund":{
            "allowOverRefunding":false,
            "orderTransactions":[
               {
                  "parentId":"gid://shopify/OrderTransaction/7407513796650",
                  "transactionAmount":{
                     "amount":90,
                     "currencyCode":"USD"
                  }
               }
            ]
         }
      },
      "notifyCustomer":false,
      "refundDuties":[
         
      ],
      "refundShipping":null,
      "returnId":"gid://shopify/Return/16951738410",
      "returnLineItems":[
         {
            "dispositions":[
               {
                  "dispositionType":"NOT_RESTOCKED",
                  "quantity":1,
                  "reverseFulfillmentOrderLineItemId":"gid://shopify/ReverseFulfillmentOrderLineItem/23474536490"
               }
            ],
            "id":"gid://shopify/ReturnLineItem/24086020138",
            "quantity":1
         }
      ]
   }
}

The fundamental issue is that Shopify seems to ā€œdouble countā€ that refund. That is clear by looking at the sales/return report on Shopify for the order. You can see that the $90 refund was accounted for with no SKU reference, and $105 was considered a refund against the SKU ACOP1025-PC-M. This is wrong because Shopify tells us that the order incurred $195 in Returns, when I only issued a $90 refund. Also the return fees do not seem present in the report even though I added a return fee in returnCreate.

Also on the Shopify Order Admin Page for this, it says ā€œYou owe the customer a refundā€ which is strange since I already processed the return for refund:

So, if you made it this far, I appreciate it! This behaviour is experienced by many of my customers and it’s quite an issue for them as you can imagine (i.e., double counting return costs, lowering reported net sales). Any insight would be appreicated. I’m also happy to provide more examples or get on a call if you need.

Thanks,
Jake

Thank you Jake.

I’ve been looking in to this and I have been unable to replicate. I wonder if there’s something with the "unprocessed":true acting funny here.

Do you by chance have the request id from the returnCreate mutation?

Hi @KyleG-Shopify,

Unfortunately I do not have the request ID for that example, so I will give another example, for another shop, in the same detailed format.

Example 1 (gid://shopify/Shop/24382341197):

  • July 28: Order placed via Online Store (gid://shopify/Order/6001931583670)
  • Aug 7: Return placed via Frate Returns. Called returnCreate with the following body (The x-request-id from the API response headers was 7d12c0b1-46f8-430d-99ba-fb2aca39c4bb-1754586089 ):
{
   "returnInput":{
      "exchangeLineItems":[
         
      ],
      "notifyCustomer":false,
      "orderId":"gid://shopify/Order/6001931583670",
      "requestedAt":"2025-08-07T17:00:48.087518+00:00",
      "returnLineItems":[
         {
            "fulfillmentLineItemId":"gid://shopify/FulfillmentLineItem/12582403932342",
            "quantity":1,
            "returnReason":"OTHER",
            "returnReasonNote":"DEFECTIVE_ON_ARRIVAL - I was originally going to return them because I ordered them on Monday and purchase 1-2 day shipping but they didn’t arrive until Friday while I was at rehearsal dinner. So I never got to wear them. I’ve not opened the package. But"
         }
      ],
      "returnShippingFee":null,
      "unprocessed":true
   }
}
  • Aug 14: Return processed via Frate Returns. Called returnProcess with the following body (The x-request-id from the API response headers was e5ab121b-f9d7-4107-ba60-2353f6dbcd15-1755195587):
{
   "input":{
      "exchangeLineItems":[
         
      ],
      "financialTransfer":{
         "issueRefund":{
            "allowOverRefunding":false,
            "orderTransactions":[
               {
                  "parentId":"gid://shopify/OrderTransaction/7799734927542",
                  "transactionAmount":{
                     "amount":125.8,
                     "currencyCode":"USD"
                  }
               }
            ]
         }
      },
      "notifyCustomer":false,
      "refundDuties":[
         
      ],
      "refundShipping":null,
      "returnId":"gid://shopify/Return/13909360822",
      "returnLineItems":[
         {
            "dispositions":[
               {
                  "dispositionType":"NOT_RESTOCKED",
                  "quantity":1,
                  "reverseFulfillmentOrderLineItemId":"gid://shopify/ReverseFulfillmentOrderLineItem/19915538614"
               }
            ],
            "id":"gid://shopify/ReturnLineItem/20885012662",
            "quantity":1
         }
      ]
   }
}

Again, in this example, I can’t explain why Shopify still thinks a refund is owed, when I’ve clearly called returnProcess to process and refund the single item in the return.


Also, for context on "unprocessed": true, we did this because I was sent this doc from a Shopify Staff member (Jeremy Topper). We wanted to get all customers on the latest returns API behaviour ASAP.

Let me know if there is any more info I can provide, I appreciate you helping us with this!

Thanks for that additional example Jake. I’m looking in to this and will follow up here once I know more.

Hi @KyleG-Shopify ,

Many of our customers are asking for status updates here. Can I help you by providing any more examples, or shall we schedule a call?

Thanks,
Jake

Hey Jake, we have an issue created for this. Can you share any more specific context on how this is affecting your customers? I would like to pass this on to our team to ensure it’s properly prioritized.

Hi,

I am tagging some Shopify staff ( @Liam-Shopify, @Alan_G ) because @KyleG-Shopify is out on vacation this week and we would really appreciate some insight on this issue during this time, I don’t want to just leave it hanging for another week.

For anyone new to this thread, here is the tldr: Sometimes, when creating a Return and then subsequently processing a Return, we observe that two ā€œreturn sales agreementsā€ are made in the Shopify Reports, causing a double reporting of returns for the affected orders. This affects many orders across many users of our app (Frate Returns), and raises serious concerns for obvious reasons: doubled reporting of returns, resulting in way lower net sales.

Here is one more example to illustrate the point:

  1. July 30: return created. no affect on sales report (as desired)
  2. Aug 18: return processed. each sku reports the correct return cost, but then the overall return cost is reported AGAIN, this time attached to the ā€˜None’ sku (not desired)

The error is that $365 is reported as a return cost attached to ā€˜None’ sku. We expect the report only to show return costs for the processed/refunded skus, but the fact that the cost is reported AGAIN in the last line is causing this problem. The overall returns cost appears to be $745 when really it should just be $380.

Please let me know if you would like any more info/context, and/or if you want to discuss this over a call. Thanks.

Following up: @KyleG-Shopify @Liam-Shopify @Alan_G

Hi @Jake_Goodman - thanks for following up on this. Just wanted to confirm that we were able to get in touch with some folks internally and our product team is investigating this as a likely bug.

I appreciate you sending the additional info our way too! I’ll share that context with the team and keep you up to date as soon as I have more info to share.

Appreciate your patience on this :slight_smile:

Hi @Alan_G , I hope you had a good long weekend. Do you have a status update for us?

Hey @Jake_Goodman, Glad Alan was able to help out further here.

Our team has noted that this is resolved now. Do you have any recent examples from the last few days to confirm that this is fixed?

1 Like

Ok, it seems to be working as expected now, thank you for helping get this resolved!

1 Like

Thanks @Jake_Goodman for confirming, glad to hear it’s working now and thanks @KyleG-Shopify for updating (as always)! I’ll close out the thread for now, but we’re happy to keep digging into this if any further issues pop up :slight_smile:

Is there any chance that the past orders affected by this bug can be retroactively fixed to have the correct data, or will merchants just have to live with that messy data and trust that it will be good going forward?

Thanks for following up @Jake_Goodman - I can’t guarantee anything in this case, but we have made adjustments in the past for similar issues. I’ll reach out internally to advocate for this/see if we can share more info with you at the very least.

Hi @Jake_Goodman - following up here :waving_hand: .

I was able to touch base with our developers on this for you and they’ve shared a workaround that might help resolve the issue. If you’re looking to balance the orders that have a refund owed, the best workaround at the moment is to add a custom line item to the order via order editing that is non-taxable and non-physical, with a title that highlights that the item is just a correction. The item won’t require shipping, and if the price is set to the amount that is incorrectly owed, the outstanding balance of the order should return to $0.

I definitely realize this isn’t ideal, so please let me know if I can clarify anything on my end here, happy to loop back with you if needed.