Shopify & checkout
Shopify checkout URLs: how to create and share the right link
Learn how to make a reusable Shopify checkout link with a cart permalink, when to use a Storefront API checkoutUrl, and what to test before sharing it.

On this page
Looking for a Shopify checkout page URL to put in an email, ad, or button? The reliable starting point is usually a cart permalink: a link built from your store domain, a product variant ID, and a quantity. Shopify says the same permalink can be reused and creates a new checkout for each customer. A URL copied from one shopper’s active checkout is a different thing.
This guide shows the documented link formats, how to get the right ID, and the checks to make before a campaign goes live. The examples use placeholders; replace them with values from your own store.
THE SHORT VERSION
- For a reusable product-specific link, create a cart permalink such as https://your-shop.myshopify.com/cart/VARIANT_ID:1.
- For a custom storefront, obtain the cart-specific checkoutUrl from Shopify’s Storefront API when that buyer is ready to pay.
- Test the actual destination, discount, market, mobile flow, and measurement on your store before publishing the link.
First, identify the URL you need
People use ‘checkout URL’ for several different destinations. Choose based on where the buyer is in the journey. Shopify documents reusable cart permalinks, a cart-specific checkoutUrl field, and separate order-status links.
| Link | What it does | Best use |
|---|---|---|
| Cart permalink | Loads specified variants and quantities, then directs the buyer to cart or checkout. | A reusable email, ad, QR code, or landing-page link. |
Storefront API checkoutUrl | Opens Shopify web checkout for a cart created or managed through the API. | A buyer’s live cart in a custom storefront or app. |
| Accelerated checkout button | Starts an eligible wallet or Shop Pay flow from a product or cart surface. | A fast purchase option rendered by the store, rather than a general campaign URL. |
| Order-status URL | Shows progress after an order exists. | Order confirmations and shipping updates. |
Shopify’s accelerated-checkout documentation describes buttons on product and cart pages. Its order-status documentation describes a page for tracking an existing order. Neither is a replacement for a reusable product-specific checkout link.
Create a reusable Shopify checkout link
Shopify calls this a cart permalink. It documents two routes: copy one from the product page when the Buy Button sales channel is installed, or build one manually. In Shopify admin, open Products, choose the product, then use More actions → Create checkout link, select a variant, and copy the link. Shopify says this admin flow starts with one variant and quantity one; use the manual format for other quantities or several variants.
Manual format
Start with your shop’s domain. Append /cart/, then a numeric variant ID, a colon, and the quantity. Separate multiple variant-and-quantity pairs with commas. Shopify’s developer example uses this pattern:
https://your-shop.myshopify.com/cart/VARIANT_ID:1
https://your-shop.myshopify.com/cart/VARIANT_ID:2,SECOND_VARIANT_ID:1Replace the placeholders; do not paste a product ID or a GraphQL gid:// into the numeric permalink slot. Follow Shopify’s variant-ID instructions to find the actual variant. If the product has options, confirm that the ID belongs to the color, size, or other option you intend to sell.
A permalink is a predefined basket, so describe the offer next to the link: variant, quantity, price conditions, and where the click leads. Shopify says the same link creates a new checkout for each customer; you need not generate a fresh permalink for every email recipient. Source: Shopify Help Center.
Add a discount, choose cart instead, or localize the link
Shopify documents optional parameters for cart permalinks. Add a question mark for the first parameter and an ampersand for each following one. These are examples with placeholders, not verified links to a live store:
https://your-shop.myshopify.com/cart/VARIANT_ID:1?discount=YOUR_CODE
https://your-shop.myshopify.com/cart/VARIANT_ID:1?storefront=true
https://your-shop.myshopify.com/fr/cart/VARIANT_ID:1discount passes a code; Shopify also documents multiple codes separated by commas, while codes containing commas cannot be passed that way. storefront=true redirects the buyer to the populated online-store cart instead of going straight to checkout. A locale path such as /fr/cart/ can land the buyer in a localized checkout. Shopify also documents payment=shop_pay for sending buyers to a Shop Pay checkout. Check the resulting cart and checkout yourself: the URL parameter is an instruction, not proof that a discount is eligible for every basket or that a buyer can use a particular payment method. Source: Shopify Developers.
The same developer page allows checkout-field prefills and tracking parameters including note, attributes, and ref. Use only fields you actually need, and avoid putting customer details into a link intended for broad distribution. For measuring a campaign, check what your own analytics records before calling any parameter an attribution solution. See our ecommerce attribution guide for the wider measurement question.
When a custom storefront should request checkoutUrl
A headless site or app that already holds a buyer’s cart should use Shopify’s Storefront API cart flow. Create or update the cart, query its checkoutUrl, and send that buyer to the returned URL when they choose to pay. Shopify defines checkoutUrl as the URL of the checkout for that cart; its cart-management guide shows querying it when the buyer is ready. This is a different workflow from putting one shared cart permalink into a campaign.
query cartCheckoutUrl($cartId: ID!) {
cart(id: $cartId) {
checkoutUrl
}
}The example is a GraphQL query shape, not a complete integration. Your storefront must supply a valid cart ID and make an authenticated Storefront API request. Shopify’s cart guide covers creation, updates, buyer identity, and retrieval; its Cart reference documents the field. Use the returned URL instead of assembling a checkout-session URL by hand.
Pass the full cart ID, including its secret key, to the Cart API. Keep that secret out of public links, public pages, and client-side code. Request a fresh checkoutUrl if the previous one is stale. For server-side requests that preserve a buyer’s logged-in checkout, follow Shopify’s Shopify-Storefront-Buyer-IP header requirement. These details are covered in the cart ID and checkout URL sections of Shopify’s cart guide.

Know the surface and plan limits
Link creation and checkout customization are separate decisions. Shopify documents cart permalinks for loading a cart or checkout, but says selling plans do not work with cart permalinks and that they cannot bypass a storefront password. If you need subscription items, do not assume the simple permalink will cover the flow; evaluate the supported cart and selling-plan path for your implementation.
A link also does not unlock new checkout UI placement. Shopify says checkout UI extensions on information, shipping, and payment steps require Shopify Plus, while Thank you and Order status extensions are available on plans other than Starter. For the full design and app decisions, see our separate guides to customizing checkout, checkout extensions, and checkout upsells. The URL question here is which destination to share and how to verify it.
Test the full journey before you publish
These are checks for your store; we have not run them in a development store. Shopify recommends placing a test order to verify checkout, inventory, shipping, notifications, and taxes. Its test-payment methods have plan and setup requirements, so follow that guide before attempting a simulated purchase.
- Destination: Open the link in a fresh browser session and on a phone. Confirm that it resolves to the intended shop and reaches the populated cart or checkout.
- Basket: Confirm the selected variant, quantity, availability, and final price. Repeat with a second variant if the link has more than one item.
- Offer: Check the discount’s eligibility and the total after shipping and tax. Confirm the behavior when the code does not qualify.
- Market and payment: Check the locale and currency for the market you will target. If you added
payment=shop_payor use a wallet button, verify the actual buyer-facing path. - Redirects: Test the full destination after email, ad, QR, or short-link redirects, including the query parameters you need.
- Measurement: Compare the visit, checkout, and completed test-order events in the tools you use. Keep a record of the final landing URL and the resulting order before trusting campaign reporting.
Shopify’s test-order guide says simulated transactions do not appear in payouts or reports. For that reason, do not use a test order’s absence from a sales report alone to conclude that your link or analytics failed.
If the checkout link does not behave as expected
| What you see | What to check next |
|---|---|
| Wrong product or option | Recheck the numeric variant ID and quantity against the product’s selected option; the permalink format uses variant IDs. |
| Cart page instead of checkout | Look for storefront=true, which Shopify documents as the cart-page redirect. Source. |
| Discount missing | Inspect the discount parameter, code spelling, and offer eligibility in your store. Shopify documents the URL syntax, but the final discount must be checked in checkout. Source. |
| Password page | Check whether the online store is password protected. Shopify says a cart permalink cannot bypass that password. Source. |
| Headless cart differs from link | Query the active cart’s checkoutUrl and inspect its lines and buyer identity in the Storefront API cart flow. |
If the issue appears only after a redirect, compare the original and final URLs character for character, especially the path and query string. If it appears only on one device or market, reproduce it there and record the variant, browser, locale, and final page before changing the campaign.
Quick answers
Can I use one Shopify checkout URL for every customer?
Yes, when you mean a cart permalink for a predefined set of variants: Shopify says the same link is reusable and creates a new checkout per customer. For a customer’s changing API cart, query its checkoutUrl.
Can I link directly to checkout without sending buyers to the cart first?
Shopify says a standard cart permalink directs buyers to cart or checkout with the items loaded, and documents storefront=true to select the cart-page route. Verify the default route in your store before publishing. Source.
Is the order-status URL a checkout page URL?
No. Shopify describes the order-status page as a way to follow an order after purchase. The link can appear in order notifications; it is not a reusable link for starting a new purchase.
Sources & further reading
Primary documentation reviewed September 28, 2026. Platform behavior can change; follow the linked documentation for current requirements. Examples in this article are illustrative.
- Shopify Help Center — Cart permalinks
- Shopify Developers — Create cart permalinks
- Shopify Developers — Manage a cart with the Storefront API
- Shopify Developers — Cart object
- Shopify Developers — Accelerated checkout
- Shopify Developers — About checkout app extensions
- Shopify Help Center — Understanding order status pages
- Shopify Help Center — Placing a test order
EXPLORE ADMOJI
Need the checkout connected to the rest of your stack?
Admoji brings checkout, CRM, reporting, and AI ad tools into one platform. Request access to review your exact Shopify flow and compare the complete operating setup.
Request access to Admoji