> For the complete documentation index, see [llms.txt](https://docs.appmixer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.appmixer.com/connector-configuration/shopify.md).

# Shopify

{% hint style="info" %}
Starting with connector version 2.0.0, Shopify authenticates with an **Admin API access token** (API key). No Shopify Partner account, OAuth application or Shopify app review is required. Each user connects their own store with a token generated in their Shopify admin. The legacy OAuth 2.0 setup below applies to connector versions 1.x only.
{% endhint %}

## Version 2 and Later: Admin API Access Token

There is nothing to register or configure in the Backoffice. Every user generates their own access token directly in their Shopify store admin by creating a custom app:

### Create a Custom App in Your Shopify Admin

1. Log in to your Shopify admin and go to **Settings → Apps and sales channels → Develop apps**.
2. If app development is not enabled yet, click **Allow custom app development** and confirm.
3. Click **Create an app**, enter a name (for example `Appmixer`) and click **Create app**.

### Configure API Scopes

1. On the app detail page, open the **Configuration** tab and click **Configure** in the **Admin API integration** section.
2. Enable the following scopes (required by the Appmixer Shopify components):
   * `read_customers`, `write_customers`
   * `read_products`, `write_products`
   * `read_orders`, `write_orders`
   * `read_reports`, `write_reports`
3. If you use the additional trigger components, also enable the scopes they depend on. Enable only the ones you need:
   * `read_draft_orders` — **New Draft Order**, **Updated Draft Order**
   * `read_inventory` — **Inventory Level Updated**
   * `read_returns` — **Return Tracking** (also requires the store's Shopify API version to be **2023-10 or later** — the Returns API does not exist on older versions)
   * `read_orders` (already enabled above) covers **New Paid Order**, **New Refund**, **New / Updated Fulfillment**, **New / Updated Checkout** and **Abandoned Cart** — Shopify has no separate `read_checkouts` or `read_fulfillments` scope; abandoned checkouts and fulfillments are part of the orders scope.
4. Click **Save**.

{% hint style="warning" %}
The **report** components (Create/Get/List/Find/Update/Delete Report, New Report) use Shopify's Report REST API, which is only available on the **Shopify plan or higher**. On Basic, Starter, Developer Preview or partner test stores the API returns `404 Not Found` even when `read_reports`/`write_reports` are granted — the scope controls the admin Reports page, not the REST endpoint.
{% endhint %}

### Generate the Access Token

1. Open the **API credentials** tab and click **Install app**, then confirm with **Install**.
2. In the **Admin API access token** section, click **Reveal token once** and copy the token (it starts with `shpat_`).

{% hint style="warning" %}
The token is displayed **only once**. If you lose it, uninstall and reinstall the app on the **API credentials** tab to generate a new one.
{% endhint %}

### Connect Your Account in Appmixer

When adding a Shopify account in Appmixer, fill in:

* **Store Address**: your store subdomain without `.myshopify.com` (for example `my-store` for `my-store.myshopify.com`)
* **Admin API Access Token**: the `shpat_...` token generated above

## Trigger Components

Alongside the customer, order, product and report actions, the connector provides trigger components that start a flow when something happens in the store. Most are webhook-based (Shopify calls Appmixer in real time); **Abandoned Cart** polls the store's abandoned checkouts because Shopify has no cart-abandoned webhook.

| Trigger                                                                       | Fires when                                                               | Required scope                        |
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------- |
| New Order / Updated Order / Cancelled Order / Fulfilled Order / Deleted Order | an order is created / updated / cancelled / fulfilled / deleted          | `read_orders`                         |
| New Paid Order                                                                | an order is paid                                                         | `read_orders`                         |
| New Refund                                                                    | a refund is created on an order                                          | `read_orders`                         |
| New Fulfillment / Updated Fulfillment                                         | a fulfillment is created / updated (tracking or shipment status changes) | `read_orders`                         |
| New Checkout / Updated Checkout                                               | a checkout is created / updated                                          | `read_orders`                         |
| Abandoned Cart                                                                | a checkout is abandoned (polled)                                         | `read_orders`                         |
| New Draft Order / Updated Draft Order                                         | a draft order is created / updated                                       | `read_draft_orders`                   |
| Inventory Level Updated                                                       | an inventory level changes (e.g. for low-stock alerts)                   | `read_inventory`                      |
| Return Tracking                                                               | a return's status changes                                                | `read_returns` + Shopify API 2023-10+ |
| New Customer / Updated Customer / Deleted Customer                            | a customer is created / updated / deleted                                | `read_customers`                      |
| New Product / Updated Product / Deleted Product                               | a product is created / updated / deleted                                 | `read_products`                       |
| New Report                                                                    | a new report is created (polled)                                         | `read_reports`                        |

Make sure the corresponding scope (see **Configure API Scopes** above) is enabled on the custom app, otherwise the trigger fails to register or returns `403 Forbidden`.

## Version 1.x (Legacy): OAuth 2.0 Application

{% hint style="warning" %}
The OAuth setup below is only needed for connector versions 1.x. Note that only a 'developer' shop instance can be authenticated with your OAuth application unless your app is verified by Shopify. 'Production' shop instances cannot authenticate with an unverified app. This guide does not cover all the requirements for the app verification process.
{% endhint %}

#### Setting Up a Shopify Partner Account

**Sign Up or Log In**: If you haven’t already, go to the [Shopify Partners page](https://partners.shopify.com) and sign up for an account. If you have an account, just log in.

#### Create a New App

**Create a New App**: Once logged in, navigate to the "Apps" section using the dashboard menu. Click on "Create app" to get started, select the "Create app manually"

<figure><img src="/files/28AqgfwnA7fMxX9t7NhX" alt=""><figcaption></figcaption></figure>

Note the `clientId` and `clientSecret`. Next, click on the "Choose distribution"

<figure><img src="/files/aiAJkhD81MfbFflJZvKc" alt=""><figcaption></figcaption></figure>

Select the "Public distribution" option

<figure><img src="/files/hltfCf19jAQgFJbXyDV4" alt=""><figcaption></figcaption></figure>

Go to the "Configuration" section from the main menu

* set the Redirect URI to `https://[YOUR_API_BASE]/auth/shopify/callback`, for example `https://api.appmixer.com/auth/shopify/callback`
* event version to the latest (2024-01)
* Embed app in Shopify admin: `false`
* set the compliance webhooks (it's required for the submission)
  * Customer data request endpoint: `https://[YOUR_API_BASE]/plugins/appmixer/shopify/customers/data_request`
  * Customer data erasure endpoint: `https://[YOUR_API_BASE]/plugins/appmixer/shopify/customers/redact`
  * Shop data erasure endpoint: `https://[YOUR_API_BASE]/plugins/appmixer/shopify/shop/redact`
*

![](/files/fRtkvbN4UhAkMVwcdiXN)

Go to the "API Access" section from the main menu. In the "Access requests" request access for the "Protected customer data access" Fill details in the "Select your data use and reasons" section:

<figure><img src="/files/TfOpLgYK4LBMDeKTkbkH" alt=""><figcaption></figcaption></figure>

Fill the form in the "Provide your data protection details" section:

<figure><img src="/files/DmFLs8BnvJESxrrJIgIC" alt=""><figcaption></figcaption></figure>

#### Configuration in the Backoffice

* Configure the App Key as `clientId` and the App Secret as `clientSecret` in the service settings within the Backoffice, under the configuration ID `appmixer:shopify`. Also, add the `appStoreInstallRedirectUri` pointing to your instance, for example `https://my.master-hamster-87765.appmixer.cloud/`
* To learn more about configuring connectors, please visit the [Connector Configuration](https://docs.appmixer.com/appmixer/getting-started/services) section.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.appmixer.com/connector-configuration/shopify.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
