Skip to main content
Shopify

What the «Refund in Shopify» button does in Odoo, step by step

The Refund in Shopify button on the sales order form asks Shopify for a full refund of the linked order. It only shows when the order has a Shopify Order Ref, asks you to confirm and, before sending anything, checks your permissions and the link to Shopify.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 5 November 2026

Key facts

Module
Shopify
Versions
Odoo 17, 18, 19 and 20
Checked
in the connector's source code, version 20.0 · against the sources linked at the end
Reading time
5 min

A worked example to follow the button step by step

Example Illustrative case: the company and its figures are made up to explain the flow.

Librería Faro is an invented shop that sells on Shopify and keeps its orders in Odoo with this module. A customer asks for the money back on a whole order, and Ana, in administration, opens that sales order in Odoo. What follows is what the module does at each point, according to its Odoo 20 code.

First: does the button appear?

The Refund in Shopify button is on the sales order view and is hidden when the Shopify Order Ref field is empty. With the default values that field is empty, so on an order with no Shopify link you will not see the button. That field and Shopify Instance sit on the order form, in the Shopify group; they are read-only and stay hidden while the reference is empty. The same view condition applies to Odoo 17, 18, 19 and 20.

Code-generated diagram, not an Odoo screen: the Shopify refund button with the messages that can stop it beside it
Diagram generated from the module's published code (not an Odoo screenshot): the button, present in Odoo 17, 18, 19 and 20, and beside it the messages that can stop it, the not-linked order message and the missing Shopify Operator or Manager access message.

Second: the confirmation

When you click the button, Odoo asks Create a full refund of this order in Shopify?. If you accept, Odoo runs the button's action.

Third: what it checks, in this order

  1. Permissions. The first thing the action does is check that your user has Shopify Operator or Manager access. If not, it stops with You need Shopify Operator (or Manager) access to push changes to Shopify. The code comment gives the reason: otherwise a user with ordinary Sales access and no Shopify role could trigger a real call to Shopify using the shop's credentials. That is why the check lives in the action itself and does not depend on whether the button is visible.
  2. Link to Shopify. For each order, the action requires both the Shopify reference and the instance to be filled in. If either is missing, it stops with Sale order … is not linked to a Shopify order., with the order name in place of the ellipsis. Since the button only shows when the reference is filled in, if you click it from the form and get this message, look in the Shopify group to see whether Shopify Instance has a value.

When a message stops the action, the process ends there and does not get as far as requesting that order's refund.

Fourth: what it asks Shopify for

If the order passes those checks, its Shopify instance is told to create the refund. According to the code:

  • Lines. Every imported line is refunded: those that are not section or note lines, are not delivery lines and carry a Shopify line item identifier. The quantity is the line's quantity, rounded to a whole number.
  • Shipping. Delivery lines are left out and the request does not ask for shipping costs to be refunded.
  • Note. Unless another is given, the note sent to Shopify is Refunded from Odoo.
  • Customer notification and store credit. Both come from the instance's options: notifying the customer of the refund, and refunding as store credit instead of to the original payment method.
  • Currency. The module asks Shopify for the suggested refund and, if Shopify returns a currency, includes it in the request.
  • Retries. The request carries a key describing exactly that refund (order, lines, quantities, shipping and method). If it is repeated, because a response was lost or someone clicked twice, it carries the same key and Shopify refunds once, according to the code comment.

If Ana does not have the role

If Ana sees the permissions message, no refund has been requested. She needs whoever administers Odoo to give her Shopify Operator (or Manager) access, as the message itself says, and then click the button again.

Your Odoo doesn't talk to Amazon, Temu or Shopify?
Video: Your Odoo doesn't talk to Amazon, Temu or Shopify?

What to take from the example

  • The button is not for every order: it depends on Shopify Order Ref, and you cannot type that reference in because the field is read-only.
  • Your permissions and the order link (reference and instance) are checked before anything goes to Shopify, and if either fails the action stops.
  • The refund it requests covers the imported lines in full, leaving out delivery lines and shipping costs.
  • Customer notification and refunding as store credit are not chosen when you click: they come from the instance's options.
  • An identical retry does not duplicate the refund in Shopify, because of the key the request carries.

Before trying it in your Odoo

The button is in the Odoo 17, 18, 19 and 20 branches, the versions the module is published for on Odoo Apps; the code described here is Odoo 20's. With Odoo in English it is called Refund in Shopify; in other languages the label changes, as the diagram shows.

Code-generated diagram, not an Odoo screen: the refund button label in several languages
Diagram generated from the module's published translations (not an Odoo screenshot): the button label by Odoo language. In Spanish, Reembolsar en Shopify; in German, In Shopify erstatten; in French, Rembourser dans Shopify; in Italian, Rimborsa in Shopify; in Portuguese, Reembolsar no Shopify.

The module is a one-off payment per Odoo version and needs the FlexigoTech Cloud subscription, Connector plan: €49 a month or €490 a year, excluding VAT. The connection goes through FlexigoTech Cloud, which stores the credentials encrypted, watches the synchronisation and emails you if it fails. You will find everything on the Odoo Apps listing and on the module page.

If your question is about another part of orders, see the message about Shopify data for creating the sales order. And if you are implementing Odoo with Shopify and want to review permissions, instances or a custom returns flow, FlexigoTech implements Odoo 17, 18, 19 and 20 and builds connectors and custom integrations.

Quick questions

Why can't I see the button on an order?

Because the button is hidden when Shopify Order Ref is empty, and with the default values it is.

Does it ask for confirmation?

Yes: Create a full refund of this order in Shopify?.

Keep reading

What the Pull Stock button does in the Shopify connector for OdooWhat the Pull Stock button does in the Shopify connector for Odoo: when it shows, what it checks, what changes in your stock and which error it can raise.The 'is now the primary location' notice in the Shopify connector for OdooWhat the 'is now the primary location' notice in the Shopify connector for Odoo means, when it appears and how to change the primary location.Shopify Connector error: no payload to create the sales orderWhat the Shopify Connector for Odoo message means when you press Create Sale Order on an order with no stored data, when it appears and how to fix it.
Checked in the connector's source code (version 20.0) and the linked sources

Sources