Product types
Every product has a type, chosen when you create it. The type decides what the editor asks for, whether stock is tracked, and how the buyer experiences checkout and delivery. Ten types cover the catalog:
| Type | What it's for | Stock tracked? | After purchase |
|---|---|---|---|
| Physical | Goods you ship — mugs, prints, apparel | Yes | Shipping + fulfillment |
| Digital | Files buyers download — PDFs, presets, audio | No | Instant download access |
| Course | Structured lessons with progress tracking | No | Access to the linked curriculum |
| Event | A dated happening with attendees | Optional (seats) | Ticket / confirmation |
| Bundle | Several products sold as one package | Follows contents | Each item delivers its own way |
| Membership | Recurring access to content or perks | No | Ongoing access while active |
| Subscription box | Recurring physical shipments | Yes | Repeat fulfillment per cycle |
| Service | Work you do — design, consulting, editing | No | You deliver manually |
| Booking | A reservable time slot — sessions, classes | Slots | Calendar booking confirmed |
| Tip | A pay-what-you-want thank-you | No | Nothing to deliver |
Type labels
Buyers see a label chip on product cards ("Course", "Digital"). You can swap the default for a preset label or your own custom text per product — useful when "Service" should read "1:1 Session" on your storefront. Custom labels can't contain commas (they'd break storefront filtering).
Choosing the right type
- Selling a workshop people attend at a set time? Booking (recurring availability) or Event (one date).
- A video course? Course, so buyers get lesson progress and certificates — a Digital product would just hand over files.
- Monthly pottery club with perks? Membership for access, Subscription box if a package ships every month.
- The type is picked at creation and shapes the product's whole behavior — when in doubt, create a quick draft and see what the editor asks for.
What happens — and what doesn't
- Type-specific sections appear in the editor only for the relevant type: shipping fields for physical, files for digital, curriculum linking for courses, slots for bookings.
- Courses must link a curriculum before publishing. Drafts save fine without one.
- Recurring types (membership, subscription box) bill on a cycle through your payment gateway; the billing filter on the Products page separates one-time from recurring at a glance.
Can I change a product's type after creating it?
The type is fixed at creation because it shapes pricing, delivery, and editor fields. To move a product to another type, duplicate its content into a new product of the right type.
What's the difference between a course and a digital product?
A digital product delivers files. A course delivers a curriculum — lessons in order, progress tracking, optional quizzes and certificates. If it's teaching material, use a course.
How do bundles handle delivery?
Each product inside the bundle delivers its own way: files unlock, physical items enter fulfillment, courses grant access. The buyer pays once.
What this screen looks like in every state
| State | When you'll see it | What you see, and what to do |
|---|---|---|
| Loading | The screen is fetching your data | A skeleton in the shape of the finished page. It should be brief — if it persists, the load has failed rather than stalled. |
| Error | The data couldn't be loaded | A message with a retry. Retry first: most of these are a dropped request, not a broken store. If it repeats, the outage is upstream and reloading won't help. |
| No access | Your role doesn't include this screen | A permission notice instead of the page. An owner or admin can grant access under Settings → Team. |
When something goes wrong
These are the messages this screen can show you, and what each one means.
| If you see | What to do |
|---|---|
| All selected products are already hidden from storefront | Retry the action. If it keeps happening, contact support with what you were doing. |
| All selected products are already visible on storefront | Retry the action. If it keeps happening, contact support with what you were doing. |
| Couldn't load the rest of your inventory. | Retry the action. If it keeps happening, contact support with what you were doing. |
| Couldn't save the new order | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Couldn’t save the new order | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Enter a valid non-negative number | Do what the message asks, then try again — it names exactly what's missing. |
| Enter a valid non-zero quantity | Do what the message asks, then try again — it names exactly what's missing. |
| Enter a valid quantity | Do what the message asks, then try again — it names exactly what's missing. |
| Failed to archive … product{count, plural, one {} other …} | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to create collection | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to create product | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to delete product | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to delete … product{count, plural, one {} other …} | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to duplicate product | That value is already used. Pick a different one. |
| Failed to publish … product{count, plural, one {} other …} | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to update status | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to update stock | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Failed to update … product{count, plural, one {} other …} | The change didn't save. Retry — if it keeps failing, the request isn't reaching the server. |
| Invalid value | The value isn't in the expected format. Check it against the field's rules above. |
| No draft products selected to publish | Retry the action. If it keeps happening, contact support with what you were doing. |
| No items selected | Retry the action. If it keeps happening, contact support with what you were doing. |
| No products imported | Retry the action. If it keeps happening, contact support with what you were doing. |
| No products to archive | Retry the action. If it keeps happening, contact support with what you were doing. |
| No valid rows found. CSV needs columns: sku/product_name and quantity. | The value isn't in the expected format. Check it against the field's rules above. |
Every field on this screen
Every control here, read straight from the live app.
| Field | Type | What it accepts | What it does |
|---|---|---|---|
| Name | Text | — | |
| Slug | Text | — |
2 fields, read from the live app. Which ones you see depends on the product type and your plan.