--- title: collectionAddProductsV2 - GraphQL Admin description: Asynchronously adds a set of products to a given collection. It can take a long time to run. Instead of returning a collection, it returns a job which should be polled. api_version: 2025-10 api_name: admin type: mutation api_type: graphql source_url: html: https://shopify.dev/docs/api/admin-graphql/latest/mutations/collectionAddProductsV2 md: https://shopify.dev/docs/api/admin-graphql/latest/mutations/collectionAddProductsV2.md --- # collection​Add​Products​V2 mutation Requires `write_products` access scope. Also: The user must have a permission to add products to a collection. Asynchronously adds a set of products to a given collection. It can take a long time to run. Instead of returning a collection, it returns a job which should be polled. ## Arguments * id [ID!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/ID) required The ID of the collection that's being updated. * product​Ids [\[ID!\]!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/ID) required The IDs of the products that are being added to the collection. If the collection's sort order is manual, the products will be added in the order in which they are provided. *** ## Collection​Add​Products​V2Payload returns * job [Job](https://shopify.dev/docs/api/admin-graphql/latest/objects/Job) The asynchronous job adding the products. * user​Errors [\[Collection​Add​Products​V2User​Error!\]!](https://shopify.dev/docs/api/admin-graphql/latest/objects/CollectionAddProductsV2UserError) non-null The list of errors that occurred from executing the mutation. *** ## Examples * ### collectionAddProductsV2 reference ## Mutation Reference ```graphql mutation collectionAddProductsV2($id: ID!, $productIds: [ID!]!) { collectionAddProductsV2(id: $id, productIds: $productIds) { job { # Job fields } userErrors { field message } } } ``` ## Input ```json { "id": "gid://shopify//10079785100", "productIds": [ "gid://shopify//10079785100" ] } ```