What's the difference between line item properties and cart attributes in Shopify?
Line item properties attach to a specific cart line — one property set per product added. Perfect for engraving text, uploaded photos, gift wrap per item. Cart attributes attach to the whole cart / order — one set per checkout. Perfect for delivery date, order-level gift message, referral code, or B2B PO number. Both persist through checkout and into the order.
Step-by-step setup
- Ask: does the data belong to one product or the whole order?. Product = line-item property. Order = cart attribute.
- Pick the right storage. properties[Field Name] for per-item. attributes[Field Name] for per-order.
- Verify display in cart, checkout, admin. Both appear in different places — line-item properties on the item line, cart attributes on the order-level detail.
Side-by-side
| Feature | Line item properties | Cart attributes |
|---|---|---|
| Attached to | One cart line item | Whole cart / order |
| Set via | properties[Field Name] input | attributes[Field Name] input |
| Multiple per product | One set per line | One set per order |
| Show in cart | Under the item | At cart level (below items) |
| Show in email | Under item line | At order summary level |
| Hidden with underscore | Yes | Yes |
| GraphQL name (Storefront API) | attributes on CartLine | attributes on Cart |
| Common use case | Engraving, upload, gift wrap | Delivery date, PO number, order note |
When to use line item properties
The data belongs to one specific product in the cart. Examples:
- Customer buys 3 mugs, each with a different engraving name
- Customer buys 1 t-shirt with gift wrap and 1 t-shirt without
- Customer uploads a different photo for each canvas print in the order
When to use cart attributes
The data belongs to the whole order. Examples:
- Delivery date for the entire order
- Gift wrap the whole order in the same paper
- B2B PO number for accounting
- Referral code that generated the cart
Syntax
<!-- Line item property (on the product form) -->
<input name="properties[Engraving]" value="Sarah">
<!-- Cart attribute (on the cart page) -->
<input name="attributes[Delivery date]" value="2026-06-15">
How they appear in the API
REST Admin API:
- Line item property →
order.line_items[].properties[] - Cart attribute →
order.note_attributes[]
Personalize per item or per cart
Print It My Way handles both line-item properties and cart attributes.
Install Print It My Way — Free Complete line-item properties guide →Frequently asked questions
What's the difference between line item properties and cart attributes?
Line item properties attach to one cart line (per-product). Cart attributes attach to the whole cart (per-order).
Can I use both on the same order?
Yes. Typical setup: line-item properties for per-product engraving, cart attribute for order-level delivery date.
Do cart attributes hide with the underscore prefix?
Yes. Same convention — attributes[_internal_field] hides the field from customer displays.
Where do cart attributes appear on the order?
In the order detail, in the 'Additional details' section (or 'Note attributes' in older Shopify).
Do POD partners read cart attributes?
Yes, via the order's note_attributes array in the API. Whether they use them depends on the partner integration.