Skip to main content
Dynamic links allow you to personalize checkout experiences by passing URL parameters. Toggle on Dynamic to enable parameter processing for your link.

URL Parameters

When Dynamic is enabled, your link accepts these URL parameters:

Line Items ?li=

Add products to the cart with optional selling plan and line item attributes.
?li=variantId,quantity,sellingPlanId,[key,value:key,value]
ExampleDescription
?li=12345,2Add 2 units of variant 12345
?li=12345,2:67890,1Add multiple products
?li=12345,1,9251324219Add with selling plan (subscription)
?li=12345,2,[Gift,true]Add with line item attribute
?li=12345,1,9251324219,[Gift,true:Message,Hello]Selling plan + multiple attributes

Customer ID ?c=

Pre-fill checkout with a customer’s saved details using their Shopify customer ID or Klaviyo profile ID.
?c=customerId
ExampleDescription
?c=7654321098765Shopify customer ID
?c=01KAMJGT9S99DT546Z2J6BVCP1Klaviyo profile ID
The customer’s saved name, email, and shipping address are pre-filled at checkout. Klaviyo profile IDs require the Klaviyo integration to be configured.

Inline Customer Data ?c=

Pre-fill checkout with customer data passed directly in the URL.
?c=[key,value:key,value]
ExampleDescription
?c=[email,[email protected]]Email only
?c=[email,[email protected]:firstName,John:lastName,Smith]Email with name
?c=[firstName,John:lastName,Smith:city,London:country,GB]Name and address
FieldDescription
emailCustomer email address
phoneCustomer phone number
firstNameFirst name
lastNameLast name
address1Street address
address2Apartment, suite, etc.
cityCity
provinceState or province
zipPostal or ZIP code
countryCountry code (e.g., US, GB, CA)
companyCompany name

Cart Attributes ?attr=

Add custom attributes to the cart.
?attr=[key,value:key,value]
ExampleDescription
?attr=[Gift,true]Single attribute
?attr=[Delivery-Date,2026-01-25]Date attribute
?attr=[Gift,true:Message,Hello]Multiple attributes

Cart Note ?note=

Add a note to the order.
?note=URL encoded text
ExampleDescription
?note=Please%20gift%20wrapGift wrap request
?note=Deliver%20after%205pmDelivery instructions
?note=Leave%20at%20doorDrop-off instructions

Abandonment ?a=

Restore an abandoned cart using a Shopify abandonment ID.
?a=abandonmentId
This parameter is used with abandonment recovery integrations. The abandonment ID is provided by Shopify’s abandoned checkout data.

Reorder Items

When Dynamic is enabled, a Reorder items checkbox appears in the Cart card. When checked, the link will automatically add items from the customer’s previous order. This requires passing a customer ID via ?c= parameter.

Combining Parameters

You can combine multiple parameters in a single URL:
https://yourstore.com/link?li=12345,1&c=7654321098765&attr=[Gift,true]&note=Please%20gift%20wrap

Use Cases

Bundle Builder Landing Page

Create one link, change the URL based on customer selection:
const bundleLink = 'https://store.com/go/bundle-page';

document.querySelector('#3-pack').onclick = () => {
  window.location = `${bundleLink}?li=44012345678901,3`;
};

document.querySelector('#6-pack').onclick = () => {
  window.location = `${bundleLink}?li=44012345678901,6`;
};

document.querySelector('#12-pack').onclick = () => {
  window.location = `${bundleLink}?li=44012345678901,12`;
};
Result: One link handles all bundle sizes. Promotions configured on the link apply automatically.

Klaviyo Abandoned Cart

Use Klaviyo template variables to build dynamic cart links:
https://yourstore.com/go/recover?li={% for item in event.extra.line_items %}{{ item.variant_id }},{{ item.quantity|floatformat:0 }}{% if not forloop.last %}:{% endif %}{% endfor %}&c={{ person.id }}

Shopify Flow / Zapier / Make

Build URLs programmatically from any automation: Shopify Flow:
  • Trigger: Customer tagged “VIP”
  • Action: Send email with dynamic link containing recommended products
Zapier:
  • Trigger: Form submission
  • Action: Build checkout URL from form data → Send to customer

Subscription Landing Page

Send customers directly to checkout with a subscription pre-selected:
https://store.com/go/subscribe?li=44012345678901,1,123456789
With multiple subscription options:
const subLink = 'https://store.com/go/subscribe';

document.querySelector('#monthly').onclick = () => {
  window.location = `${subLink}?li=44012345678901,1,111111111`;
};

document.querySelector('#yearly').onclick = () => {
  window.location = `${subLink}?li=44012345678901,1,222222222`;
};
Result: One link, customer chooses frequency, goes straight to checkout with subscription attached.

Promotions & Security

Promotions are configured on the link itself, not in the URL. This means:
  • ✅ Customers get the discount you configured
  • ✅ Bad actors can’t change or guess discount codes
  • ✅ Your promotion rules always apply
  • ✅ Line item discounts in URLs are ignored on dynamic links

Recommended: Use tiered promotions with caps

For dynamic links, we recommend setting a maximum discount value:
Tier 1: 10% off for carts $0-50
Tier 2: 15% off for carts $50-100
Maximum discount: $100
This limits exposure if someone adds unexpected items to the cart.

Need product-level restrictions?

If you need discounts to only apply to specific products:
  1. Create a discount code in Shopify with product/collection restrictions
  2. Add that discount code to your link in the Checkout Links UI
  3. Shopify enforces the restrictions automatically
For advanced discount logic, we recommend Discount Kit.

Important Notes

Dynamic mode must be enabled

URL parameters are ignored unless you enable Dynamic Mode on the link. This is a security feature.

URL length limits

Most browsers support URLs up to 2,000 characters. For QR codes, keep URLs under 500 characters for easy scanning. Tips for shorter URLs:
  • Use ?c= with a Shopify Customer ID instead of full address fields
  • Create customers in Shopify first for returning buyers
  • Keep cart attribute keys short

Analytics

Dynamic links track analytics the same as regular links. All clicks and orders roll up to the link you created. Want granular tracking? Create separate links:
  • summer-campaign-email for email sends
  • summer-campaign-social for social posts
  • summer-campaign-sms for SMS
Each tracks separately, all can use dynamic parameters.