Shopify

Available via: Dashboard (setup) · Your Shopify theme (storefront snippet)

The Shopify integration replaces your store's checkout with Inflow's. Buyers shop on your store as usual; when they click Check out, they pay on Inflow's checkout, and Inflow creates the paid order in your Shopify admin.

How It Works

  1. The buyer adds products to their cart on your store and clicks Check out.
  2. The Inflow snippet in your theme sends the cart to Inflow. Inflow checks each product's price against your Shopify catalog, so cart prices can't be tampered with.
  3. The buyer is taken to Inflow's checkout. They enter their address, choose a delivery method or a pickup point, can apply a coupon, and pay.
  4. Inflow creates the order in your Shopify admin, marked as Paid, and Shopify sends the buyer its order confirmation.
  5. The buyer returns to your store, and their cart is emptied.

Before You Start

  • Your Shopify store's currency must be EUR or USD.
  • You need to be the store owner, or a staff member with the Develop apps permission, to create the custom app.
  • Custom apps are available on every Shopify plan.
  • Inflow connects one Shopify store per account.

Set Up

1. Create a custom app in Shopify

Inflow connects to your store through a custom app that you create in Shopify.

  1. Go to the Shopify Dev Dashboard and sign in with the account that owns your store.

  2. Click Create app, and name it, for example Inflow.

  3. In the app's Admin API configuration, select exactly these two scopes, and save:

    ScopeWhy Inflow needs it
    read_productsTo check each cart item's price against your catalog at checkout.
    write_ordersTo create the paid order in your Shopify admin after payment.
  4. Release a version of the app, from its Versions (or overview) page. Scopes and credentials stay inactive until a version is released, so Inflow can't connect without this step.

  5. Click Install app and confirm. The credentials are available once the app is installed.

  6. Copy the app's Client ID and Client secret from its API credentials. Shopify sometimes labels them API key and API secret key. Keep the secret private.

If you change the app's scopes later, release a new version for the change to take effect.

2. Connect your store

  1. In your Inflow Dashboard, go to Settings → Integrations, and click Set up on the Shopify card.
  2. Enter the Client ID, the Client secret, and your Store domain, for example northlane-studio.myshopify.com, without https://. Use your store's .myshopify.com domain, not a custom domain such as northlane.example: you'll find it in your Shopify admin under Settings → Domains.
  3. Click Connect store. Inflow checks the credentials with Shopify before saving them.
Connect your Shopify store

Connecting requires write access to merchant settings. See Roles and Permissions.

3. Add the storefront snippet to your theme

  1. On the Shopify page in Inflow, click the copy icon next to Storefront snippet.
  2. In your Shopify admin, go to Online Store → Themes, click ⋯ → Edit code on your live theme, and open theme.liquid.
  3. Paste the snippet just before </body>, and save.

The snippet sends the Check out buttons of your cart page and cart drawer to Inflow. It hides Shopify's express buttons, such as Shop Pay and PayPal, and keeps the checkout buttons inactive until it has loaded, so no buyer reaches Shopify's own checkout.

If you change themes, add the snippet to the new theme too.

4. Set up shipping

Add the countries you ship to and your delivery methods, and any pickup points. Without them, checkout asks for no delivery method and shipping is free. See Shipping and Pickup.

5. Test a purchase

Add a product to your cart on your store and check out. Check that you reach Inflow's checkout, that the order shows in your Shopify admin under Orders after payment, and that the payment shows in Transactions → Payments.

The test is a real payment: use a low-priced product, then refund the payment in Inflow and cancel the order in Shopify.

Your Shopify Page

The Shopify integration

Once connected, the Shopify page shows:

  • Your store, with its status, and Disconnect.
  • Inflow token: the token your snippet uses to reach Inflow. It's part of the snippet and isn't secret.
  • Storefront snippet: the code to paste into your theme.
  • Shipping zones and Pickup points. See Shipping and Pickup.
  • Airtable sync. See Airtable sync.

To rotate the token, migrate an older connection or reconnect your store, see Manage the Connection.

Checkout Rules

RuleHow it works
PricesEach product is charged at its current price in your Shopify catalog, whatever the cart shows.
CurrencyBuyers pay in your store's currency, EUR or USD. Checkout doesn't open if the store uses another currency.
TaxesInflow follows your Shopify setting for whether prices include tax. Tax also applies to shipping.
DiscountsShopify discount codes and gift cards applied in the cart aren't carried over. Buyers enter an Inflow coupon code on the checkout page instead. Only one-time coupons apply. See Coupons.
AmountsThe usual minimum and maximum payment amounts of your account apply.
Payment methodsThe methods shown are those of your Inflow checkout, such as card and Apple Pay.

Orders in Shopify

After each successful payment, Inflow creates the order in your Shopify admin:

  • Marked as Paid, with the payment gateway Inflow Payment Gateway.
  • Tagged inflow, external-payment and the Inflow payment ID, to find it from either side.
  • With the buyer's email and address, the products, tax, shipping and any coupon, so the totals match the payment.
  • Shopify sends the buyer its order confirmation email.
  • Stock is reduced following each product's inventory settings. If a product sold out in the meantime, the order is still created and tagged Oversold - inventory not claimed.
  • Pickup orders have no delivery address. They're tagged click-and-collect, with the delivery method and the pickup point in the order's additional details.

Refunds aren't synced. A refund made in Inflow doesn't refund, cancel or restock the Shopify order. After refunding in Transactions → Payments, update the order in Shopify yourself.

Shipping and Pickup

Shipping for your Shopify store is set in Inflow, not in Shopify: Inflow's checkout uses these settings to offer delivery methods and calculate the shipping price. You'll find them on the Shopify page, under Shipping zones and Pickup points.

Shipping Zones

A shipping zone is a group of countries with the delivery methods offered there.

A shipping zone

To add a zone, click Add next to Shipping zones, then:

  1. Enter a Name, for example Europe. Buyers don't see it.
  2. Select the Countries it covers, or tick Apply to all other countries to cover every country that isn't in another zone. Only one zone can cover all other countries, and a country can belong to only one zone.
  3. Under Shipping methods, click Add method and enter:
    • Method name: shown to buyers, for example Standard shipping.
    • Price: 0 for free shipping.
    • Free shipping over (optional): when the order total reaches this amount, after any coupon, the method becomes free.
  4. Click Add zone.

Click a zone to see or edit it, and the bin icon to delete it. Once you have zones, at least one must remain.

Pickup Points

A pickup point is a place where buyers can collect their order instead of having it delivered.

A pickup point

Click Add next to Pickup points and enter its Name, Price (0 if free), and address: Country, Street address, Address line 2, City and Postal code. Add a Note for the buyer for opening hours or directions. Click Add pickup point.

Pickup points are offered to every buyer, whatever their country.

What Buyers See

SituationAt checkout
The address is in a zoneThe zone's delivery methods. The first one is selected by default.
The address isn't in any zone, but a zone covers all other countriesThat zone's delivery methods.
The address isn't in any zone, and none covers all other countriesWe don't ship to this address. The buyer can only choose a pickup point, if you have one.
You have pickup pointsThey're offered alongside delivery. No delivery address is asked for when the buyer chooses one.
No zones and no pickup pointsNo delivery step. Shipping is free.
  • The order of methods in a zone is the order buyers see them in. Put the method you want selected by default first.
  • Prices are in your store's currency, EUR or USD.
  • Tax applies to shipping in the same way as to your products.
  • The chosen method and its price are added to the Shopify order. A pickup order is tagged click-and-collect, with the pickup point in the order's additional details.

Airtable Sync

To keep a record of your orders in Airtable, Inflow adds a row to an Airtable table each time an order is completed. Only orders completed after you connect are added; past orders aren't.

1. Prepare your table

In your Airtable base, create a table with these fields. The names must match exactly, including capitals, and the types must match, or the row can't be added:

FieldAirtable typeContent
idSingle line textThe Inflow payment ID.
amountNumber, with 2 decimal placesThe amount paid, in currency units (49.90, not cents): excluding tax, after coupon, and including shipping.
currencySingle line textThe payment currency, for example EUR.
customerEmailEmail or single line textThe buyer's email.
productsJSONLong textThe products, as JSON: name, unit price in cents, and quantity.
shippingAddressLong textThe delivery address and the buyer's email, as JSON.

2. Create an access token

In Airtable, open Personal access tokens (under Builder hub), and create a token with:

  • The scope data.records:write.
  • Access to the base that holds your table.

Copy the token: it starts with pat.

3. Connect

  1. Find your Base ID and Table ID in the address of your table in Airtable: https://airtable.com/appXXXXXXXX/tblXXXXXXXX/…. The Base ID starts with app and the Table ID with tbl.
  2. On the Shopify page in Inflow, click Connect Airtable, and enter the Airtable API key (your token), the Airtable Base ID and the Airtable Table ID.

Click the connected table to change these settings, or Delete Airtable connection to stop the sync. A failed sync never blocks the order: if rows stop appearing, check the field names and types, and that the token hasn't expired or lost access to the base.

Manage the Connection

All of these are on the Shopify page, and require write access to merchant settings.

Rotate the Inflow Token

The Inflow token identifies your store when the snippet sends a cart to Inflow. It's visible in your storefront's code by design, so it isn't a secret, but you can replace it, for example after moving to a new theme or store setup.

  1. Click the rotate icon next to Inflow token, then Rotate token.
  2. Copy the updated Storefront snippet and replace the old one in your theme's theme.liquid.

The old token stops working immediately: checkout on your store fails until the new snippet is in your theme.

Migrate from an Admin API Key

Stores connected before custom app credentials were available use a Shopify Admin API key (shpat_…). They show this banner:

Migrate banner

The Admin API key keeps working, but it never refreshes, and replacing it means creating a new key in Shopify. Custom app credentials are refreshed automatically by Inflow, and you can rotate the secret without recreating the app.

To migrate:

  1. Create a custom app in Shopify with the read_products and write_orders scopes, install it, and copy its Client ID and Client secret. See Create a custom app in Shopify.
  2. Click Migrate on the banner.
  3. Enter the Client ID, Client secret and the same Store domain, and click Migrate connection.

Your token, snippet, shipping and Airtable settings stay the same, so there's nothing to change in your theme.

Until you migrate, the page shows your Shopify Admin API key. Click the pencil icon to replace it, or ⋮ → Edit store name to change the store domain.

Admin API key connection

Reconnect

If Shopify stops accepting your credentials, for example because the custom app was uninstalled, its scopes changed or its secret was rotated, this banner shows:

Reconnect banner

While the connection is broken, Inflow can't check your product prices or create orders, so buyers can't check out on your store. To fix it:

  1. In Shopify, check that the app is installed with the read_products and write_orders scopes, and copy its current Client ID and Client secret.
  2. Click Reconnect, enter them, and click Reconnect store.

If a payment made just before the connection broke has no order in Shopify, contact [email protected] with its payment ID.

Change Store

A custom app belongs to one store, so the store domain can't be edited. To use another store, disconnect, then connect the new store with its own custom app.

Disconnect

Click Disconnect next to your store, and type the store name to confirm. Checkout on your store stops working immediately: buyers can't pay until you reconnect or remove the snippet from your theme.

Your payments stay in Inflow, and the orders already created stay in Shopify.

Troubleshooting

Connecting the store fails

  • A version wasn't released. In the Shopify Dev Dashboard, release a version of the app, then install it again if needed. Scopes and credentials stay inactive until then.
  • The scopes are wrong. The app needs exactly read_products and write_orders. After changing them, release a new version.
  • The store domain isn't the .myshopify.com one. Use the domain shown under Settings → Domains in your Shopify admin, without https://.
  • The credentials don't match the store. The Client ID and Client secret must come from an app installed on that store.

Check out still opens Shopify's checkout

  • The snippet isn't in your live theme. Open theme.liquid in the theme that's published, and check that the snippet is just before </body>. A theme you duplicated or installed after setup doesn't have it.
  • The snippet is outdated. If the Inflow token was rotated, copy the snippet again from the Shopify page in Inflow and replace the old one.
  • A custom checkout button. The snippet handles the standard cart page and cart drawer buttons. A button added by an app or a heavily customized theme may not be recognized; contact [email protected] with your store's address.

Checkout buttons don't respond

The snippet keeps checkout buttons inactive until it has loaded. If they stay inactive, the snippet can't load: check that it's pasted whole, including the <script> line, and that no other app or content blocker removes it.

The buyer sees an error when checking out

CauseFix
The connection is brokenThe Shopify page shows a Reconnect banner. See Reconnect.
Your store's currency isn't EUR or USDChange your Shopify store's currency to EUR or USD.
A product in the cart was deleted from your catalogThe buyer removes it from the cart.
The cart total is above your account's limitContact [email protected].

A paid order isn't in Shopify

  1. Check the Shopify page in Inflow for a Reconnect banner, and reconnect if needed.
  2. Check that your store's currency hasn't changed since the payment. Inflow doesn't create an order in a different currency from the payment.
  3. In Shopify, search orders for the Inflow payment ID: orders are tagged with it.

If it's still missing, contact [email protected] with the payment ID.

A Shopify discount code wasn't applied

Shopify discount codes and gift cards applied in the cart aren't carried over to Inflow's checkout: buyers pay the catalog price. Create the discount as a one-time coupon in Inflow instead, and share its code; buyers enter it on the checkout page.

"We don't ship to this address"

The buyer's country isn't in any shipping zone, and no zone covers all other countries. Add the country to a zone, or create a zone with Apply to all other countries. See Shipping and Pickup.

A refunded order is still paid in Shopify

Refunds made in Inflow aren't synced to Shopify. Refund or cancel the order in your Shopify admin, and restock the products if needed.

The order is tagged "Oversold - inventory not claimed"

The product sold out between the cart and the payment. The order was still created because the buyer paid: fulfill it when stock is back, or refund the payment in Transactions → Payments.


Did this page help you?