---
title: "Shopify"
canonical: "https://ingrid-support.refined.site/space/KB/11534695/Shopify"
format: markdown
---
# Shopify

> Macro (toc)

## Overview

Ingrid's Shopify app is developed and maintained by Ingrid. Support is handled by Ingrid via [support@ingrid.com](mailto:support@ingrid.com).

Because Shopify restricts what can be rendered on its checkout page, Ingrid's checkout widget is not available. Instead, Ingrid creates shipping options via Shopify's CarrierService API, and Shopify renders them in its native shipping checkout.

**Requirement:** a Shopify Plus plan. If your Shopify plan can't carry third-party calculated rates, a banner appears in the app's admin UI. One known exception: shops on **Basic** or **Grow** billed **annually** will see this banner even though the app works correctly for them. No Shopify API exposes the billing interval, so the banner can't distinguish this case — if you're on an annual Basic/Grow plan and the app is working, the banner can be disregarded.

### Features

- Shipping option propagation via Shopify's CarrierService API
- Propagation of:
  - Product item attributes
  - Weight
  - Dimensions
  - External ID (Shopify's order number)
- Registration of tracking numbers towards Ingrid’s tracking product
- A/B testing
- Checkout delivery options folding — carrier options sharing the same price are bundled into a single option by default, if bundled in Ingrid merchant platform (configurable in App settings).
- Custom category naming
- Filter rules and post-filtering rules
- Localized presentation -** **Delivery estimates are now rendered in the shopper's language.
- Pricing rules
- Product/cart availability check
- Estimated delivery time presentation in:
  - Date and day format
  - Units
    - Days
    - Business days
    - Weeks
    - Hours
    - Minutes
    - Denominated days — when carriers provide slot data, shoppers can select a time slot in the UI. Selected timeslots are persisted on the Shopify order as note attributes. Specific dates can be blocked from display in checkout. Both relative and absolute dates are supported.  
Delivery slots belong to the carrier the shopper selected rather than to the delivery category, so the times offered match the carrier that will actually deliver the order.
    - Timespan-style estimates (e.g. ranges) are supported.
  - Custom text can be configured to fully override the computed estimate when required
- Category labels and styling  
Delivery categories support configurable labels (e.g. "Express", "Eco"), enabled by adding the "Ingrid delivery labels" block to the checkout. Each label supports:
    - Label color, specified as a hex value which is matched to the closest color Shopify supports
    - Icons, selectable from a curated list of Phosphor Icons
- Shipping date adjustments
- 1-button installs for the PDP widget, the upsell bar (checkout and mini cart), and the tracking widget
- Full `session.complete` response exposed in `note_attributes[]`
- Shopify's pickup point functionality, including a pickup point UI
- Apple Pay support (see FAQ)
- Split shipping (see FAQ)
- DHL Packstation support
- Multi-parcel tracking on same order, Ingrid can track orders on parcel and item level
- **B2B orders.** B2B orders carry a `b2b` cart attribute into the Ingrid session. This is available as an input to Ingrid-side delivery rules (for example price rules and filter rules).

## Installing Ingrid Checkout

Detailed instructions are also provided in the app itself once installed. To get started:

1. Go to [Ingrid on the Shopify App Store](https://apps.shopify.com/ingrid) and click **Add app**.
2. Get your **Private key (base64)** from your Ingrid account:
  1. Log in to the Ingrid Merchant Platform.
  2. Click the information icon in the header.
  3. Find **Private key (base64)** in the fold-out and copy it.
3. In the Ingrid app settings in Shopify, paste the key into the **Ingrid credentials** section.
4. In Shopify's **Shipping and delivery** settings, add your shipping rates and set the rate type to **Use carrier or app to calculate rates**.
5. In Shopify’s **Checkout** settings, make sure the customer contact method is email, this will force require on email which is necessary for orders being completed and later booked and shipped.
6. Make sure the shipping location in Shopify matches the warehouse address configured in Ingrid. If they don't match, the integration will not work properly.
  1. Check the warehouse address as set up in Ingrid.
  2. Verify that the shipping location address in Shopify is identical.
7. Install the **Ingrid Carrier Service** using the button in the app. Read the requirements first and make sure your store meets one of them.

That's the basic setup done — you can now start using the app.

## App settings  


![image-20260831-122819.png](media://200c900a-7a71-488c-8a24-36296c645b3d)

![image-20260831-122850.png](media://da3429b2-006c-4cb9-a942-515c2bffff01)


| Setting | Description |
| --- | --- |
| Enable Advanced checkout integration | Opt in to functionality that enables Apple Pay and A/B testing (see FAQ). |
| Toggle this setting to enable or disable the new Checkout UI functionality. | Opt in to the new checkout UI and pickup point functionality (see FAQ). |
| Bundle same-price carrier options | On by default. Carrier options that share the same price are shown to the shopper as a single delivery option. Selecting it reveals the carrier, and the preselected carrier's estimate is shown on the bundled row. Turn this off to list each same-price carrier as its own option. |
| Toggle this setting to use billing address for shipping address | For merchants who want to use the billing address instead of the pickup point address when editing orders. When enabled, the billing address overrides the shipping address. |
| Use external method id as shipping code | Use external method id as shipping code instead of Ingrid's code containing the session ID |
| Store Completed Session data on order | Writes the full Ingrid session as JSON to the order's additional details. Turn this off to keep orders free of it — the transport order ID, shipping method and pickup point are still stored either way. |
| Sync customer tags to Ingrid | Sends tags from customer profiles as `cart.attributes`, which can be used in price rules and filter rules. |
| Merge address lines | Off by default. When enabled, address lines are merged before the address is sent to Ingrid. This does not change how a shopper enters their address — it only affects what reaches Ingrid. |
| Add `out_of_stock` parameter to cart item attributes | When an item's available quantity is zero or negative, `out_of_stock` is sent as a string on the `item.attribute` level. |
| Enable parcel-level tracking | Creates a parcel in Ingrid for every tracking number on a fulfilment, including the items in that parcel, so customers can see what is in each box. Orders shipped in several boxes are tracked as one multiparcel order. Requires a Site ID. |
| Ingrid Site ID | Required for parcel-level tracking. This is the same Site ID used by the tracking widget. You can find your site ID at [https://support.ingrid.com/space/KB/11436064/Your+Ingrid+API+keys](https://support.ingrid.com/space/KB/11436064/Your+Ingrid+API+keys) |
| Maximum number of pickup options to show | Limits how many pickup points are offered per carrier option of type `PICKUP`. Example: set to 3 with two pickup point services enabled, three each are shown (six in total). A lower value reduces loading time, since fewer options need to be created. |
| Namespace for dimensions metafield | Used for fetching and sending dimensions to Ingrid on variant level. |
| Key for metafield | Used for fetching and sending dimensions to Ingrid on variant level. |

## Enabling Ingrid Tracking

1. In Shopify Admin, open the **Ingrid Checkout** app.
2. Go to **Settings, **under Additional settings toggle **Enable parcel-level tracking** and add your site ID ([found here](https://support.ingrid.com/space/KB/11436064/Your+Ingrid+API+keys)), if you’re using tracking via today and you’re enabling the parcel-level tracking you will need to untoggle the setting “**Register tracking numbers (legacy)**”, this will remove the old integration
3. Scroll down and click **Install Tracking Widget**. A new tab opens in the Theme Editor, where the widget is automatically added to the page template. Select the page where you want the widget displayed (for example a dedicated "Track your order" page).
4. In the Theme Editor, find the **Ingrid Tracking Widget** under **Apps**.
5. Enter your **Site ID** from the Ingrid Merchant Platform into the settings field.
  The widget renders once the Site ID has been added:

![Install Tracking Widget button in the app settings]()

**Optional:** To link to the tracking page for a specific order in order confirmations or other Shopify notifications, use the example below. The URL contains the shop URL, the tracking page, and two parameters: `identifier` (Shopify's order number) and `contact` (the customer's email).

```
<a href="{{ shop.url }}/pages/tracking?identifier={{ order_name | replace: "#", "" }}&contact={{ customer.email }}" class="button__text">Track your order</a>
```

## Enabling carrier logos

1. In Shopify Admin, open the **Ingrid Checkout** app.
2. Go to **Settings** and confirm that the carrier service is installed.
3. Open the Theme Editor on the checkout editor.
4. Click **Add Block** in the Main section and add the **carrier-logo** block.
5. On the the block **pickup-points-location**, set *Hide carrier logos* to false, this will enable carrier logos on pickup points
6. Save your changes.
7. Start a test checkout and confirm that carrier logos show on the shipping step.

![Carrier logos shown on the shipping step]()

![Adding the carrier-logo block in the checkout editor]()

**Important:** do not enable **Use external method id as shipping code** in the Ingrid app settings. Carrier logo matching relies on Ingrid's internal method identifiers, and overwriting the shipping code can prevent logos from matching.

![Use external method id as shipping code setting]()

## Enabling delivery category labels

1. In Shopify Admin, open the **Ingrid Checkout** app.
2. Go to **Settings** and confirm that the carrier service is installed.
3. Open the Theme Editor on the checkout editor.
4. Click **Add Block** in the Main section and add the **Ingrid Delivery Label** block.
5. Save your changes.

Also see: [https://support.ingrid.com/space/KB/11502682/Understanding+and+utilising+category+labels+in+Ingrid+Merchant+Platform](https://support.ingrid.com/space/KB/11502682/Understanding+and+utilising+category+labels+in+Ingrid+Merchant+Platform) 

## FAQ

### How can shipping details be extracted from an order?

Additional order details are stored in the order's note attributes, accessible in the `note_attributes[]` field on the [order object in Shopify's Admin API](https://shopify.dev/docs/api/admin-rest/latest/resources/order). Ingrid also stores Shopify's order number, so the customer can see which order the information relates to.

Example of Ingrid note attributes stored with an order:

```
Ingrid Transport Order ID: 01JHJG9VWDH4WA4192D4V3RP9N
Ingrid Shipping Method: pnl-mpc
Ingrid External Method ID: P19
Ingrid External ID (Pickup Point ID): 2234137
Ingrid Completed Session Data: { "id": "c5709906-...", "status": "COMPLETE", ... }
shipping_address: { "name": "Paketbox Vikingavägen 9", ... }
```

A split shipping order looks like a regular order, except there is one set of attributes per split created by Shopify. The transport order ID and session data differ between the splits. Example of an order with two splits:

```
Ingrid Transport Order ID: 01JHG24SYWZAA4ASHB81TGQSVT
Ingrid Shipping Method: pnl-mpc
Ingrid External Method ID: P19
Ingrid External ID (Pickup Point ID): 527470
Ingrid Completed Session Data: { ... }
(Split 2) Ingrid Transport Order ID: 01JHG24T09KC44Y1SY14NXGWT4
(Split 2) Ingrid Shipping Method: pnl-mph
(Split 2) Ingrid Completed Session Data: { ... }
```

**Note — shipping rates have changed since the introduction of bundled options.** Shipping rates may now arrive with different names, codes and counts. Carrier options that share the same price are bundled into a single option by default, and rates in categories that contain more than one product are named after their carrier product. If you have anything that keys on specific rate names, codes or titles — Shopify shipping rules, discounts, Shopify Flow automations, ERP mappings, or rate-title reporting — review it to make sure it still matches the new strings if bundled are enabled.

### Is Ingrid's data visible on the order page in Shopify?

Yes. The note attributes are shown on the order page in Shopify Admin:

![Ingrid data on the order page in Shopify]()

### What can I do if the shipping options load slowly?

Lower the app setting **Maximum number of pickup options to show**, which limits the number of pickup options created by the carrier service. If you have enabled the new checkout UI, slow loading shouldn't be an issue.

### How can I provide dimensions on variant level to Ingrid?

1. In Shopify, create a variant metafield definition (if one for dimensions doesn't already exist) under **Settings → Custom data → Variant**. Define a namespace and key — for example, namespace `code` and key `dimensions`, but any names work.
2. Add length, width, and height in JSON format on each variant. Weight can be omitted, as it is taken from the product's native weight field.
3. Enter the namespace and key from step 1 in the Ingrid app settings in Shopify.

![Namespace and key in the Ingrid app settings]()

### How can I link directly to the tracking widget for a specific order?

Copy (or adapt) the HTML tag below into, for example, an order or shipping confirmation email:

```
<a href="{{ shop.url }}/pages/tracking?identifier={{ order_name | replace: "#", "" }}&contact={{ customer.email }}" class="button__text">Track your order</a>
```

### How does Ingrid's app handle sessions?

Ingrid requires an Ingrid checkout session to produce shipping options. There are two flows, depending on the **Advanced checkout integration** setting:

- **Disabled:** the app creates a new session every time Shopify's CarrierService sends a callback. The session ID, and the additional data Ingrid needs to store data on a finalized order, is set on the shipping option's `service_code`.
- **Enabled:** the app creates a session as soon as a product is added to the cart and stores Ingrid's session ID as a product attribute. The session is retained throughout the purchase journey, and the app sends updates to the existing session instead of creating a new one on each carrier service call.

### How does split shipping work with Ingrid and Shopify?

Split shipping requires the **Advanced checkout integration** setting to be *disabled*. Shopify's CarrierService callbacks give no way to tell which split a callback belongs to, so if a session ID were retained on product item level it would always be re-used — making it impossible to create separate sessions per split.

Free shipping thresholds are calculated per split, not on the entire order value, because Shopify's carrier service has no functionality for tracking each split. Should this become available, Ingrid is committed to solving this.

### How does Apple Pay work with Ingrid's app?

Apple Pay works on the checkout page and cart page. It is not possible to finalize a purchase directly on the product page unless the user has added something to the cart, because the app has no way to retain Ingrid's session ID without a product in the cart.  
  
Also see: [https://support.ingrid.com/space/KB/698089473/Apple+Pay+Express+Checkout:+Handling+Partial+Postal+Codes+for+UK+and+Canada+in+Ingrid+Shopify+App](https://support.ingrid.com/space/KB/698089473/Apple+Pay+Express+Checkout:+Handling+Partial+Postal+Codes+for+UK+and+Canada+in+Ingrid+Shopify+App) 

### How do I enable Apple Pay and/or the pickup point UI?

1. In the app settings, toggle on **Advanced checkout integration** (required for Apple Pay and A/B testing).
2. Toggle on the **new checkout UI** (enables pickup point functionality).
3. Click the button next to "Please make sure that you have enabled the Advanced Checkout UI extension". This opens the theme editor.
4. For Apple Pay and A/B testing: add the **advanced checkout** app block under **Express checkout**.
5. For pickup points: add the **pickup-point-location** app block under **Delivery → Shipping → Shipping rate**.

Note: Apple Pay is only displayed if it is enabled under **Payment methods** in Shopify.

### Can the PDP widget be used with the stage environment?

No, it is only available for the production environment.

### Why is the shipping options saying that the order will be shipped tomorrow and why is the estimated delivery date incorrect?

![image-20260825-084155.png](media://19efbddb-66a4-4be1-bcaf-0c3b616f0882)


Shopify has a feature where estimated delivery dates are displayed, these estimates do not come from Ingrid and should therefore be disabled. You can do so by going into the Shopify Settings → Shipping and Delivery and then turning off “Estimated delivery dates”.

![image-20260825-083050.png](media://c65b4a44-47f7-4a12-a3ab-3eabbe752748)

Ingrid will display the ETD based on your configuration under the shipping option when turned off:

![image-20260825-084250.png](media://fe313f03-150f-467b-bed1-694409aa209a)

### Why is my delivery category split into multiple options in Shopfiy’s checkout even though my delivery category contains several options?

There is a limitation currently where apps are not able to change the shipping price based on selection in Shopify, if the options within the delivery category has different pricing the app deliberately separates the options in order to be able to meet the correct pricing set in the configuration.