Cart & checkout

Validation slots & plan limits

How restriction and limiter caps work — the 20/25 ceilings, per-plan limits, slot accounting, and what happens at the limit.

Restrictions and product limiters run inside Shopify's cart validation system, and that system has a hard ceiling on how many validations a store can hold. On top of Shopify's ceiling, Llama Upsell applies its own caps and a per-plan limit. This page pulls all of those numbers into one place, explains how slots are counted, and walks through exactly what happens when you reach a limit — including the edge cases that can leave a restriction "active but not enforced."

Two separate ceilings

There are two different maximums in play, and they are not the same number. Understanding which one you're hitting tells you what to do about it.

CeilingValueWho sets itWhat it counts
Shopify platform limit25ShopifyEvery cart validation registered on the store, from any app
App restriction cap20Llama UpsellActive restrictions created in this app

The Shopify platform limit (25)

Shopify allows a maximum of 25 cart validations per store, store-wide. This is a platform limit, not an app setting — it is the same number for every store and you cannot raise it.

The important part: this pool is shared across every app that registers cart validations, not just Llama Upsell. If you also run another checkout-validation or "cart rules" app, its validations count against the same 25. Your effective room for Llama Upsell restrictions is 25 minus whatever other apps have already registered.

The app restriction cap (20)

Llama Upsell deliberately caps its own restrictions at 20, even though Shopify would technically allow 25. The reason is the shared pool above: by stopping at 20, the app always leaves headroom so it never collides with — or crowds out — validations registered by other apps on your store.

The 20-cap is why even the Enterprise plan tops out at 20 active restrictions rather than 25. The remaining 5 slots are intentionally left free for the platform and for any other validation apps you run.

Per-plan limits

Your plan sets how many restrictions and limiters you can keep active at once. Inactive (draft) items never count.

Active restriction limits

PlanActive restrictions
Free1
Starter5
Growth10
Pro15
Enterprise20

Active product-limiter limits

PlanActive product limiters
Free1
Starter5
Growth10
Pro100
EnterpriseUnlimited

Notice the Pro and Enterprise rows: limiters jump to 100 and Unlimited, far past the 25-validation ceiling. That's possible because limiters work differently from restrictions — see below.

Restrictions vs. limiters: how slots are consumed

This is the single most important concept on the page. Restrictions and product limiters both run on cart validation, but they consume Shopify slots very differently.

  • Each active restriction is its own validation. One restriction = one Shopify validation slot. Ten active restrictions occupy ten of your 25 slots.
  • All your limiters share a single validation. No matter how many product limiters you create, they are enforced through one Shopify validation. Many limiters, one slot.

That asymmetry is why limiter limits can be 100 or Unlimited while restrictions are capped at 20: limiters never each consume a slot, so they don't threaten the 25-validation ceiling. Restrictions do, so they're held to a tighter cap.

RestrictionProduct limiter
Shopify slots usedOne per active restrictionOne total, shared by all limiters
Plan cap (Enterprise)20Unlimited
Counts toward the 25-poolYes, one eachYes, but only one combined

Slot lifecycle

A Shopify validation slot is tied to a restriction through a validation ID. The slot is acquired, updated, and released automatically as you work — you never manage it by hand.

Created on first activation

When a restriction is first activated, the app asks Shopify to create a cart validation and stores the returned validation ID on the restriction. This is the moment the restriction starts occupying one of your 25 slots.

Updated on edit

When you edit an active restriction, the app updates the existing validation in place using its stored validation ID. Editing does not consume an additional slot — the same slot is reused.

Released on deactivation or delete

When you set a restriction to draft, or delete it outright, the app releases the Shopify validation and the slot becomes free again — immediately. There is no waiting period.

Only active restrictions occupy a Shopify slot. A restriction in draft status holds no slot at all. Switching a restriction to draft frees its slot the moment you save, so draft is your fastest way to make room without losing the restriction's configuration.

Approaching-limit warnings

You don't have to track these numbers yourself. The admin surfaces a warning as you get close to a ceiling, and it watches both ceilings independently:

  • Plan limit — a warning when your active restrictions approach the cap for your current plan (for example, nearing 10 on Growth).
  • Platform limit — a warning when the store's total cart validations approach Shopify's 25, which can happen sooner than your plan limit if another app is also using the pool.
Screenshot: The restrictions list in the admin showing an approaching-limit warning banner with the current active count and the plan ceilingAdd a real image by setting the `src` prop.

What happens at the ceiling

Activations are refused

If you try to activate a restriction that would put you over your plan limit (or over the platform's 25), the activation is refused. The restriction is kept — it stays saved as a draft rather than going live — and you'll see a notification explaining why. Nothing is lost; you simply need to free a slot or upgrade.

The empty-validation edge case

There is one failure mode worth knowing about, because it leaves a restriction in a misleading state.

When the app asks Shopify to create a validation, the call can occasionally come back with an empty validation ID — a transient Shopify failure. When that happens, the restriction is marked active in the app, but because it has no validation ID, Shopify is not actually enforcing it. It looks live in your dashboard, but shoppers are never blocked.

How to spot it: a restriction shows as active, but the behavior you expect at checkout simply doesn't happen — carts that should be blocked go through. The store's active-validation count (shown in the admin) will also be lower than your active-restriction count, because the slot was never claimed.

How to fix it: re-save the restriction. Saving an active restriction with no validation ID makes the app create a fresh validation and store the new ID, which restores enforcement. If your admin offers a sync action for restrictions, running that has the same effect — it reconciles each active restriction with a real Shopify validation. Toggling the restriction to draft and back to active also forces a fresh create.

Plan downgrade behavior

Downgrading does not automatically switch off restrictions or limiters — and this is different from how campaigns behave.

  • Campaigns over the new limit are deactivated automatically on a downgrade, newest first.
  • Restrictions and product limiters are not auto-deactivated. They keep running exactly as they were.

The consequence: after downgrading, you can be over your new plan's restriction limit and still enforcing all of them. The app won't let you activate new restrictions while you're over, but it also won't pull the existing ones down for you.

If you downgrade from Enterprise (20 restrictions) to Growth (10) with 14 active restrictions, all 14 keep enforcing. To get back under your new limit and regain the ability to activate restrictions, you must manually set the extras to draft until you're at 10 or fewer.

Recipes

Troubleshooting

Key takeaways

  • Shopify allows 25 cart validations per store, shared across all apps; Llama Upsell caps its own restrictions at 20 to leave headroom.
  • Each active restriction = one slot. All limiters together = one slot. That's why limiter limits can reach 100 or Unlimited.
  • Per-plan active-restriction limits: Free 1, Starter 5, Growth 10, Pro 15, Enterprise 20.
  • A slot is claimed on first activation, updated on edit, and released the instant a restriction goes to draft or is deleted.
  • A transient Shopify failure can leave a restriction active with no validation — re-save or sync to restore enforcement.
  • Downgrades don't auto-deactivate restrictions or limiters; you must manually draft the extras to get back under your new limit.

On this page