- ID
- e8849e38-9d53-4f94-9de5-9e610cef41c5
Discovery home: public cookbook carousels
Discovery home: public cookbook carousels
- CUSTOM_ID
- discovery-home-public-cookbook-carousels
Model
- CUSTOM_ID
- model
- *=Collection.is_public=*: When =True=, the carousel may appear on the
unauthenticated discovery_home collection APIs. Defaults to =False=;
existing rows stay non-public until marketing toggles them in Django
admin.
- *=CollectionType.COOKBOOK=* / *=CollectionItemType.COOKBOOK=*:
Cookbook carousels use =type=cookbook=, =item_type=cookbook=, and
=item_ids= as comma-separated *=cookbooks.Cookbook= primary keys*.
=source= must be empty (marketing IDs only; no SmartCart or product
discount sources).
Authenticated *=/api/v3/discovery_home/customers/<id>/collections/=* is
unchanged: it still returns all active, non-=SUB= collections regardless
of =is_public=.
Public API
- CUSTOM_ID
- public-api
| Method | Path | Auth |
|--------+--------------------------------------------+-------------------|
| GET | =/api/v3/discovery_home/collections/= | None (=AllowAny=) |
| GET | =/api/v3/discovery_home/collections/<id>/= | None (=AllowAny=) |
*Queryset*: =is_active=True=, =is_public=True=, =item_type=cookbook=,
excluding =type=sub=, ordered by =sort_order=.
*Behavior*
- No customer context: no personalization, dietary filtering,
inventory-aware pairing/product logic, or SmartCart calls.
- Item payload under =item_details.items= is *={"id": <cookbook_pk>}=*
per cookbook. Clients load full cookbook payloads via existing public
*=/api/v3/cookbooks/=* (e.g. by id list or slug detail).
- Inactive cookbooks referenced in =item_ids= are omitted from =items=
(only active cookbooks are prefetched).
Operations
- CUSTOM_ID
- operations
- Publish a carousel: in *=/admin/discovery_home/collection/=*, set *Is
public*, *Type* = cookbook, *Item type* = cookbook, *Item IDs* to
cookbook PKs, *Source* empty, *Is active* as needed.