All posts
Checkout · 9 min read · June 2026

Routing payments across multiple processors without breaking checkout

It's one of the most common "can we do this?" questions I get — and one of the most misunderstood. Here's what Shopify's checkout genuinely allows in 2026, the three patterns that work in practice, and the point where you have to step outside the platform entirely.

EDIT · cover image

Sooner or later, a growing store wants more control over how money moves. The reasons are always good ones: shaving processing fees by sending volume to whichever acquirer is cheapest, adding redundancy so a single processor outage doesn't take down sales, using a local acquirer in a region where it lifts approval rates, or steering high-risk orders through a gateway with better fraud tooling. All legitimate. All things a bank or a custom storefront would handle without blinking.

Then they discover the hard truth: Shopify's checkout is not yours to rewire. And the first thing I do on these projects is make sure everyone understands exactly where the line sits before a single line of code is written.

The constraint nobody tells you about up front

Shopify's checkout is a hosted, native surface. It's fast, it's PCI-compliant out of the box, and it converts well precisely because Shopify controls it end to end — including Shop Pay, which is one of the highest-converting checkout flows on the internet. The price of all that is control. You don't get to drop arbitrary payment-routing logic into the page and fan out to whatever processors you like.

It used to be that people tried to bend checkout with checkout.liquid and Additional Scripts. That door is now closed. checkout.liquid is fully deprecated — Plus stores lost it in 2025, and non-Plus stores are auto-upgraded off it by August 26, 2026. The supported surface today is Checkout Extensibility: UI Extensions for what the customer sees, Shopify Functions for backend logic, and Web Pixels for tracking. On top of that, the old Scripts engine is being retired — Shopify Functions replace it, with a hard cutoff of June 30, 2026. If your "payment routing" plan involves legacy scripts, it has an expiry date attached.

You can influence Shopify's checkout. You cannot replace its payment engine from inside it.

Hold that sentence in your head, because it's the dividing line between the three patterns below.

Pattern 1 — Steer methods inside checkout (Plus, Functions)

This is the lightest option and, for a lot of merchants, the one they actually needed. Shopify Plus exposes payment customization Functions that let you hide, reorder, or rename payment methods based on the cart, the customer, or their region. Functions run in a WebAssembly sandbox, you write them in JavaScript or Rust, and you deploy them as an app.

What this gets you: a customer in one market sees a local method first; high-value carts hide a method you don't want them using; B2B customers see terms-based options. The shape of the logic looks like this:

// payment-customization Function (run target), simplified
export function run(input) {
  const operations = [];
  const country = input.cart.deliveryGroups[0]?.deliveryAddress?.countryCode;

  // Push a local method to the top for one region
  if (country === "DE") {
    const sepa = input.paymentMethods.find(m => m.name.includes("SEPA"));
    if (sepa) operations.push({ move: { paymentMethodId: sepa.id, index: 0 } });
  }
  return { operations };
}

What this does not get you: actual routing to external acquirers. You're steering between the providers Shopify already knows about, not introducing your own. For "show the right methods to the right people," this is the correct, supported, upgrade-safe answer. Reach for it first.

Pattern 2 — Multiple gateways through approved providers

The next step up is running more than one payment provider that Shopify supports, and letting an orchestration layer handle the routing on the provider's side rather than yours. Several gateways and payment orchestrators present themselves to Shopify as a single approved provider, then make the cheapest-acquirer or failover decisions behind their own walls.

This keeps you inside Shopify's compliance umbrella — the customer still pays through the native checkout, you don't touch raw card data, and Shop Pay and the standard flow stay intact. The routing intelligence lives with the orchestrator. The tradeoff is that you're constrained to what that provider supports and what Shopify permits, and the most flexible payment configurations sit behind Shopify's invite-only programs. For most merchants who think they want "multi-processor routing," this is the pattern that gets them 90% of the benefit without leaving the platform.

Before you go further, ask the real question

Nine times out of ten, "we need multi-processor routing" decodes to "we want lower fees" or "we want a fallback if our processor goes down." Patterns 1 and 2 solve both without leaving Shopify's checkout — which means keeping Shop Pay, native PCI compliance, and conversion you'd otherwise have to rebuild. Only proceed to Pattern 3 when the requirement genuinely can't be met inside checkout.

Pattern 3 — Custom checkout outside Shopify

This is the heavy path, and it's the one I built for a store doing eight figures a year when the requirement genuinely couldn't be met any other way. Here you take the payment step out of Shopify's checkout entirely: a custom, often headless, product and cart experience where you collect payment, you route across processors with whatever logic you want, and you create the order in Shopify afterward through the Admin API (typically via draft orders) once payment clears.

The power is total. You own the routing — cheapest-acquirer, region-based, failover, fraud-tiered, whatever the business needs. The cost is equally total, and it's mostly invisible until you're deep in it:

Done right, it's a genuine competitive advantage. Done casually, it's a way to lose money in four directions at once. The engineering isn't the scary part — the operational correctness is.

So which one do you actually need?

Start at the top and only move down when forced:

The mistake I see most often is reaching for Pattern 3 to solve a Pattern 2 problem — taking on PCI scope, losing Shop Pay, and rebuilding reconciliation to save a fee that an orchestrator would have saved anyway. The interesting engineering is fun. Make sure the business actually needs it before you sign up to maintain it.

The short version

  • Shopify's checkout is native and largely closed — you influence it, you don't replace its payment engine.
  • checkout.liquid and Scripts are gone; Checkout Extensibility (UI Extensions, Functions, Pixels) is the supported surface, with 2026 deadlines.
  • Pattern 1: steer methods with payment customization Functions (Plus).
  • Pattern 2: multiple gateways via an approved orchestrator — keeps you compliant and keeps Shop Pay.
  • Pattern 3: custom checkout outside Shopify for true routing — full control, but PCI scope, lost Shop Pay, and reconciliation are yours.
CheckoutPaymentsShopify FunctionsHeadlessAdmin API
YN
Your Name

Shopify developer and ex–Silicon Valley engineer (NVIDIA, Apple). I've built custom checkout flows with multi-processor payment routing for stores that genuinely needed them. Get in touch →