# Organize a catalog Add the Copenhagen Lamp to a stable browse category and a campaign collection. Use categories for hierarchy and collections for a curated selection. Neither structure changes the identity of the product or its variants. ## Before you begin Use an existing product and an Admin connection with catalog permissions. Read its current categories and collections before changing membership. Treat supplied association lists as intentional membership: preserve existing associations you want to keep. ## 1. Create a category Admin API ```graphql mutation CreateCategory($input: CategoryCreateInput!) { categoryCreate(input: $input) { category { id name slug parent { id } } errors { __typename ... on UserError { message } } } } ``` Variables ```json { "input": { "name": "Lighting", "slug": "lighting" } } ``` For a child category, include the returned parent ID as `parentId` in a subsequent create request. Skip creation if the intended category already exists. ## 2. Create a collection Admin API ```graphql mutation CreateCollection($input: CollectionCreateInput!) { collectionCreate(input: $input) { collection { id name slug } errors { __typename ... on UserError { message } } } } ``` Variables ```json { "input": { "name": "Desk refresh", "slug": "desk-refresh" } } ``` Keep the collection ID for membership updates. Its name does not define an automatic rule for selecting products. ## 3. Assign the product Admin API ```graphql mutation OrganizeLamp($input: ProductUpdateInput!) { productUpdate(input: $input) { product { id categories(first: 20) { nodes { id name } } collections(first: 20) { nodes { id name } } } errors { __typename ... on UserError { message } } } } ``` Variables ```json { "input": { "id": "", "categories": [ "" ], "collections": [ "" ] } } ``` The example assigns one category and one collection. Include other existing memberships if they should remain. For merchandising order, use [categoryReorderProducts](/api/admin-graphql/mutations/category-reorder-products) or [collectionReorderProducts](/api/admin-graphql/mutations/collection-reorder-products) with fresh membership data. ## Verify Load the category or collection through Storefront in the buyer's context. Confirm the lamp is returned with its expected price and availability. If Admin membership exists but Storefront results are empty, inspect [catalog visibility](/concepts/catalog/publication). Do not keep reassigning the same membership to fix a publication problem.