Founder online now · WhatsApp reply < 30 min
From $199/mo
Blog · Cloak

Cloak your Shopify checkout off Shopify Payments' radar.

The most reliable way to stop feeding Shopify Payments' category-flag risk engine is to stop giving it transactions to score. Own-domain checkout achieves that by routing card capture through your own gateway on your own subdomain — the transaction never enters Shopify Payments' pipeline, so Shopify Payments' fraud model has no signal from your store. Add three more cloak layers on top of that (brand, wallet suppression, HTTP headers) and the store operates without leaking provider identity to buyers, theme inspectors, competitors or Shopify Payments' payment-risk scan.

Layer 1: hide the payment traffic from Shopify Payments

Shopify Payments' risk engine only sees transactions Shopify Payments processes. Chargeback velocity, decline patterns, 3DS challenge outcomes, refund rate — all of these are fed by the Shopify Payments transaction stream. Move the transactions off that stream and the input goes to zero for the payment-side signals. The Shopify order record still exists (written back via Admin API for fulfillment and reporting), but the transaction itself was captured on your gateway's rail and never touched Shopify Payments.

Technical fact: on stores running own-domain checkout, the buyer's browser never loads Shopify Payments' JavaScript, never sets Shopify Payments' cookies, never runs Shopify Payments' fraud SDK. The authorization message goes from your checkout page directly to your acquirer's endpoint. Shopify Payments has zero visibility on the transaction attempt, the response, the 3DS outcome, or the settlement.

Layer 2: cloak the brand from the theme inspector

Default third-party Shopify checkouts leak provider identity in two places — the theme.liquid paste (contains a <script src> with the provider's domain) and the shipped JavaScript (contains brand strings, function names, endpoint URLs that grep out cleanly). Competitors doing store teardowns, category scanners, would-be copycats — all of them read those signals.

The brand cloak layer processes the loader body through Terser plus javascript-obfuscator on the moderate config. Function names are mangled, string literals are split-encoded-reassembled at runtime, control flow is flattened. What ships is functionally identical JS that is not text-searchable for provider brand, gateway name or endpoint path. A 22-marker leak audit runs on every deploy against a fixed list of brand and gateway fingerprints — bundle does not activate to production if any marker is present.

Layer 3: suppress express-wallet buttons

Shopify Payments' express-wallet stack — Shop Pay, Apple Pay, Google Pay, dynamic checkout, buy-it-now — renders inline on product pages and cart. If a buyer clicks one of these buttons, the flow resolves to Shopify Payments' hosted express checkout, which defeats the entire own-domain routing. The wallet-suppression layer hides these buttons at page-render time and delegates any accidental click into the cascaded checkout instead. Zero native Shopify Payments express captures on stores running the full cloak stack.

Layer 4: HTTP header cloak

Response headers leak host stack identity if unmanaged. X-Powered-By: Next.js, Server: Vercel, X-Vercel-Cache, X-Matched-Path — any of these tell an inspector what infrastructure sits behind the checkout URL. The HTTP header cloak strips or normalizes what can be stripped in the origin response. What survives past the edge (some headers Vercel re-injects at the edge layer) can be handled by a Cloudflare Worker proxy — optional add-on for merchants who want to reach zero-header-leak on top of the origin cloak.

What the cloak does NOT do. It does not modify authorization data sent to your acquirer, does not misrepresent your MCC, does not manage chargebacks. Your MID contract with your gateway describes your true product category. Compliance with card network rules and gateway ToS stays with you. What the cloak does is remove payment-side visibility for Shopify Payments' risk engine and remove provider-identity leak for third-party inspectors.

Why the four layers stack together

Each layer alone is partial protection. Own-domain checkout without brand cloak still leaks provider identity in the shipped JS. Brand cloak without wallet suppression still lets Shop Pay clicks route around the cloak. Wallet suppression without own-domain still processes some transactions through Shopify Payments. HTTP header cloak alone protects nothing meaningful. The four together produce the outcome: buyer never sees provider, theme inspector never sees provider, Shopify Payments never sees the transaction, HTTP response never advertises the stack.

Operational trade-offs to know

Shop Pay is gone. Shopify Payments' express button is a Shopify Payments product; suppressing it removes a real conversion feature. On stores where Shop Pay recognition rate is high (Shopify Plus with heavy repeat-buyer traffic), the trade may not be worth it. On high-risk stores that Shopify Payments cannot serve at all, Shop Pay was never available anyway.

You need a gateway you contracted with. The cloak is checkout infrastructure. You bring the MID from your acquirer. If the acquirer terminates you, the cloak keeps working but you have no capture route — the cascade helps here (multiple MIDs behind the cloak so a single termination is not an outage).

Debugging visibility drops. Obfuscated JS makes browser-devtools debugging harder for you too. Individual cloak layers are toggleable per store — some operators disable the brand cloak for developer sessions and re-enable before going live.

Related reading: Full cloak stack (product page) · Hide checkout from Shopify Payments · Brand cloak (theme inspector)

Full cloak stack live from day one.

Buyer sees your brand. Shopify Payments sees no payment traffic. Live in 24-48 hours.

See pricing →