Skip to main content
All eight storefront resources share the same endpoints, response fields, visibility rules, and list controls. This page covers where they differ.

Summary

The body key wraps a create or update request. For example, a playlist update sends {"library": {...}}, not {"playlist": {...}}. Every list accepts q, sort, lang, page[cursor], and page[limit]. Every list except products also accepts filter[country] and filter[language]. See Find and create resources. status and the on/off switch together decide what a public list shows. Pages, media, playlists, and enrollment packs have no archived state: switch them off or delete them instead. See Visibility, drafts, and scheduling.

Products

Products differ from the other resources more than any other:
  • Switch a product on or off with public. Product writes use public where other resources use active. The active field in product responses is computed from public and status.
  • Availability is per variant. A product has no countries field. Instead, each variant carries the countries it’s sold in.
  • Country pricing uses country. Pass country (an ISO-2 code) on a product list or show to get that country’s prices. Product lists don’t accept filter[country]. A product with no variant sold in the requested country is left out of the list.
  • Lists return a card, show returns the full product. Each row in a product list leaves out description, image_url, and seo. Look the product up by slug to get them, along with its variants and subscription plans.
  • Different list filters. Product lists don’t accept filter[country] or filter[language]. They add filter[availability], filter[bundle], filter[has_subscription_plans], filter[category_ids], filter[collection_ids], and filter[tag_ids].
  • Different admin filters. On the company product list, filter[status] takes active, draft, or archived, and there is no filter[active].

Categories

Categories form a tree. Each category carries parent_id, position, has_children, and source_type, the kind of content it organizes. See Category hierarchy. GET /api/v202604/categories/{slug}/products lists the live products in a category. Set a category’s products on the company side with product_ids, which replaces the whole list.

Collections

Collections are flat, hand-picked groups of products. They have no hierarchy. Like categories, they have a /products list, GET /api/v202604/collections/{slug}/products, and you set their products with product_ids.

Posts

Posts are blog entries. Besides the shared fields they carry a post date, an author, a summary, and the collections they belong to. Filter a post list by filter[category_id] or filter[collection_id].

Pages

Pages are standalone storefront pages rendered from a theme template. Two things differ from other resources:
  • Renaming a page changes its slug, unless the slug is pinned. See Slugs and URLs.
  • Pages can be cloned on the company side.

Media

Media are videos, images, PDFs, and other files. Filter a list by filter[media_type]. The company media list also accepts filter[visibility].
  • Restricted media aren’t listed. A medium with restricted visibility, or one uploaded by a rep, never appears in a public list, but it can still be looked up by slug.
  • Media slugs can’t be set through v2026-04. Fluid generates them.

Playlists

Playlists are curated sets of media. Looking one up by slug returns its items. Playlist writes use the library body key.

Enrollment packs

Enrollment packs are what a new member buys to join. Looking one up by slug returns the products and agreements it includes.

Next steps