> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appreval.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Boxes: customer-built bundles

> Create dynamic or static boxes: the customer picks what they receive in each delivery from a builder in your store, with sizes, volume discounts and upsells.

A **box** is a subscription where the customer picks what they receive in each delivery. You create it in **Reval → Boxes**, it's published as a **real product in your store**, and the buy button on that page leads to a **builder**: a screen inside your theme where the customer fills their box, sees the price live and continues to checkout. Boxes are sold **by subscription only** — there's no one-time purchase of a box.

<Note>
  The first time you enter after this update, Shopify will ask you to **re-approve the app's permissions**: Reval now needs to create and publish products in order to sync each box as a product in your store.
</Note>

## The two box types

|                   | **Dynamic**                                                                            | **Static**                                                |
| ----------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| **Price**         | The sum of what the customer picks, at plan price                                      | Fixed per box size — what goes inside doesn't change it   |
| **Discounts**     | The «Caja dinámica» (Dynamic box) plan's %, plus optional per-size or volume discounts | The size's price is already the deal                      |
| **Plans it uses** | Of the **«Caja dinámica»** type (created in [Plans](/en/merchant/plans))               | Standard plans («Suscribí y Ahorrá»)                      |
| **Size**          | Free range (min/max), predefined sizes or a single one                                 | Predefined sizes or a single one, each with its own price |

***

## Creating a box

The screen is a five-step form. A box **is only saved complete** and ready for sale — if something is missing, the final checklist tells you exactly what.

<Steps>
  <Step title="Type and plan">
    Choose the **box type** and tick the **subscription plans** it's sold on. A static box only lists standard plans; a dynamic one, only plans of the «Caja dinámica» type. With more than one plan ticked, the customer chooses the frequency in the builder (the first in the list is the initial one). A box's plans must have **distinct frequencies**.
  </Step>

  <Step title="Name and product in the store">
    The **name** is the product's title in Shopify and the base of the builder's URL. You can add a description and an image URL (upload it in Shopify → Content → Files and paste the link). The image is uploaded to Shopify **only on the first sync**: to change it later, edit the product in Shopify.
  </Step>

  <Step title="Size and price">
    * **Free range** (dynamic only): minimum and maximum number of products.
    * **Several predefined sizes** or **a single exact size**: each size defines its product count and — in static boxes — its **fixed price**, or — in dynamic ones — an **optional discount** (percentage or fixed amount).
    * **Volume discounts** (dynamic only, optional): tiers that trigger by product count or by the box's amount. The customer sees live how much they're missing for the next tier; if they reach several, the one that benefits them most is applied, and a discount pinned to a size takes priority over the tiers.
  </Step>

  <Step title="Products">
    * **Eligible for the box**: what the customer can put inside (they can repeat the same product). Choosing a product brings in all of its variants; remove the ones that don't belong.
    * **One-time purchases (upsells)**: offered at the end of the build and charged once — they don't enter the recurring price. We recommend between 3 and 5 so as not to overwhelm.
  </Step>

  <Step title="Presentation (optional)">
    By default we use our own texts. You can replace the title, the subtitle, the title in the customer portal, the upsell step's title and the discount's title. Two more options: **show each variant as a separate card** (useful when the variants are flavors compared against each other) and **hide the individual price** of the products inside the box (only the total is shown).
  </Step>
</Steps>

On clicking **Create box**, the product is created and published in Shopify automatically. If the sync fails, the box stays saved and you complete it with the **Publish to Shopify** button — or **Retry sync**, if the product already existed.

<Note>
  An eligible product **doesn't need its own plan** to be sold inside a box. In a **static** one it's shown at list price and the money lives in the size's price; in a **dynamic** one, every eligible item is priced at the current list price minus the «Caja dinámica» plan's % — no per-frequency prices needed.
</Note>

***

## The builder in your store

Each box has its URL: **`/apps/subscriptions/caja/<handle>`** (you can see it on the box's card). On the product page, the Reval block replaces the subscription widget and the "Add to cart" with a single button — configurable in the theme, by default **"Build your box"** (shown as "Armá tu caja").

What the customer sees in the builder:

* **Frequency** (if the box is sold on more than one plan) and **size** as option grids.
* The grid of eligible products with a variant selector, per-unit price (with the list price struck through when the plan discounts) and **− / +** controls. Out-of-stock variants appear disabled.
* The **"Your box"** summary: subtotal, **Subscription discount**, the box's discount, total, the progress bar toward the next tier ("Add 2 more and get 10% off") and the total savings. On mobile it stays pinned at the bottom.
* If the box has upsells, a final step: **"Want to add something one time only?"**.

The checkout shows the box with its name and image and the breakdown of contents underneath, and **revalidates everything server-side** — eligibility, size and prices. If something changed (a discontinued frequency, a product that's no longer available), the customer returns to the builder with a clear notice instead of an error.

***

## The box as a product in Shopify

* **Static** box: one real variant per size (a **"Tamaño"** (size) option, with values like "6 productos"), each with the size's price.
* **Dynamic** box: a single variant with an estimated "from" price, so collection cards don't show \$0.
* Box variants are created **without inventory tracking** — a box never blocks its own order; stock is controlled by the products inside.
* **Archiving** a box moves the product to draft in Shopify and takes it off sale. Existing subscriptions stay active.

### A box's orders

* Static box: the order carries **the box's line at its price** plus a \$0 line for each content — that's the picking list, and those SKUs are the ones that deduct inventory.
* Dynamic box: the contents with their prices plus a **\$0 line with the box's identity**, so the order shows the box's name and image and not the first product inside.
* Stock is handled by your [inventory policy](/en/merchant/settings), with one nuance: **a static box is all-or-nothing**. Under "Only order the products in stock", a static box with a missing content simply doesn't generate that cycle's order — a customer never pays for the full box and receives an incomplete one — while in a dynamic box only the out-of-stock lines are dropped. Under "Retry the next day", any missing content defers the whole order for both types; under backorder (the default) the order goes out complete anyway. Additional products outside the box always keep per-line behavior.

***

## What the subscriber can do

From their portal, the customer edits the composition with **"Edit my box"**: they change quantities, add or remove products, change the size, and see the projected total live. Changes take effect **from the next delivery**. They can also add recurring **additional products** outside the box (same frequency, at plan price — they don't count toward the size or the discounts). The step-by-step is in [Managing your subscription](/en/subscriber/manage-subscription).

Two behaviors to keep in mind:

* **Billing window**: in the 24 hours before the next charge, the portal blocks box editing ("Your next delivery is already being prepared"). **You don't have that limit**: from the [subscription detail](/en/merchant/subscriptions) you can edit the composition anyway — the change takes effect from the next cycle, never on a charge already in progress.
* **Discontinued products**: if you remove a product from the box, whoever already had it **keeps it** (they see it as "No longer offered — you can keep it": they can lower its quantity or remove it, not increase it or re-add it). If instead you **delete the variant in Shopify**, it's removed from the boxes on save and the affected orders go out with the **`Producto eliminado`** (product deleted) tag — which is why it's best to **migrate subscribers before deleting a variant**.

***

## Limitations

* A box's plans must have **distinct frequencies** — the customer chooses by frequency.
* A subscription contains **a single box**; two boxes are two subscriptions.
* There's no **one-time purchase** of a box: it's always a subscription.
* The **image** syncs to Shopify only the first time; after that it's changed from Shopify.
* If you later remove from the box the plan a customer subscribed on, that customer **can no longer edit their composition** (their charge continues unchanged).
