Create and Manage Purchase Groups

📘

Buy with Prime API is now available for early access

Sign up for early access to the Buy with Prime API using the 'Sign Up' button below. The API may change as Amazon receives feedback and iterates on it.

A PurchaseGroup allows you to bundle products from your Buy with Prime catalog under a representativeProduct. When a shopper purchases the representativeProduct, the shopper receives a quantity of each PurchaseGroupMember.

The memberAmount of a PurchaseGroupMember defines the amount of the product a shopper receives using the unit and value fields. For example, you might assign a pair of socks as a PurchaseGroupMember with pair as the unit and three as the value. In this example, When the shopper purchases the representativeProduct, the shopper also receives three pairs of socks.

For details on creating and managing products, see Create and Manage Products in a Catalog.

Create a PurchaseGroup

Use the createPurchaseGroup mutation to create a new PurchaseGroup. You can choose an existing product as the representativeProduct, or create a new product by providing the details outlined in Create and Manage Products in a Catalog.

Create a PurchaseGroup with a new product as the representativeProduct

The following example creates a PurchaseGroup and a new product with an externalId of new-representative-product-external-id to be the representativeProduct.

Request
mutation createPurchaseGroup {
  createPurchaseGroup(
    input: {
      representativeProduct:{
        representativeProduct: {
          amazonSku: {
            value: "new-representative-product-amazon-sku"
          }
          sku:"new-representative-product-sku",
          offerPrime: true,
          externalId: "new-representative-product-external-id"
          image: {
            sourceUrl: "https://example.com/image-12345.jpg"
          }
          productDetailPageUrl: "https://www.amazon.com/dp/1234567"
        }
      },
      members:[
        {
          product: {
            sku: "purchase-group-member-1-sku"
          },
          memberAmount: { 
            value: 1,
            unit: "UNIT"
          }
        },
        {
          product: {
            sku: "purchase-group-member-2-sku"
          },
          memberAmount: { 
            value: 1,
            unit: "UNIT"
          }
        }
      ]
    }
  ) {
    id
  }
}
Response
{
  "data": {
    "createPurchaseGroup": {
      "id": "01234567abcdef"
    }
  }
}

Create a PurchaseGroup with an existing product as the representativeProduct

The following example creates a new PurchaseGroup under an existing product with the ID existing-representative-product-sku. The new PurchaseGroup includes PurchaseGroupMember products with the IDs of purchase-group-member-1-sku and purchase-group-member-2-sku.

Request
mutation createPurchaseGroup {
  createPurchaseGroup(
    input: {
      representativeProduct:{
        representativeProductId: {
          sku: "existing-representative-product-sku"
        }
      },
      members:[
        {
          product: {
            sku: "purchase-group-member-1-sku"
          },
          memberAmount: { 
            value: 1,
            unit: "UNIT"
          }
        },
        {
          product: {
            sku: "purchase-group-member-2-sku"
          },
          memberAmount: { 
            value: 1,
            unit: "UNIT"
          }
        }
      ]
    }
  ) {
    id
  }
}
Response
{
  "data": {
    "createPurchaseGroup": {
      "id": "01234567abcdef"
    }
  }
}

Create a PurchaseGroupMember

Include purchaseGroupMemberships fields when using the createProduct mutation to add the new product to a PurchaseGroup. The following example creates a new product with an external ID of example-product-externalId that belongs to a PurchaseGroup with example-representative-externalId as the representativeProduct.

Request
mutation CreateProduct {
    createProduct(
        input: {
            externalId: "example-product-externalId"
            amazonSku: {
                value: "example-product-amazon-sku"
            }
            sku: "example-product-sku"
            offerPrime: true
            productDetailPageUrl: "https://example.com/products/my-product"
            image: {
                sourceUrl: "https://example.com/products/my-product.jpg"
            }
            purchaseGroupMemberships: [
                {
                    representativeProductId: {
                        externalId: "example-representative-externalId"
                    },
                    memberAmount: {
                        unit: "UNIT",
                        value: 3
                    }
                }
            ]
        }
    ) {
        id
    }
}
Response
{
    "data": {
        "createProduct": {
            "id": "abcdef01234567"
        }
    }
}

Update the memberAmount of an existing PurchaseGroupMember

Use the updateProduct mutation to change the value field of memberAmount for a PurchaseGroupMember. The value dictates the amount of the PurchaseGroupMember product that a shopper receives when purchasing the group's representativeProduct.

If the product you are updating is a member of another PurchaseGroup, you must include the representativeProduct of that PurchaseGroup in the purchaseGroupMemberships field of UpdateProductInput. If you exclude a representativeProduct when updating purchaseGroupMemberships, the update removes the product from the PurchaseGroup associated with that representativeProduct.

The following example updates the product identified by purchase-group-member-sku with a new memberAmount of 10 units.

Request
mutation updateProduct {
  updateProduct(
    identifier: { 
      sku: "purchase-group-member-sku"
    }
    input: {
      purchaseGroupMemberships: [ 
        {
          representativeProductId: {
            sku: "representative-product-sku"
          },
          memberAmount: {
            value: 10, // new value
            unit: "UNIT"
          }
        }
      ]
    }
  ) {
    id
  }
}
Response
{
  "data": {
    "updateProduct": {
      "id": "abcdef01234567"
    }
  }
}

Query products with PurchaseGroup values

The following examples show how you can query PurchaseGroup related products.

Query a product that is not in a PurchaseGroup, but that contains PurchaseGroup related values

Request
query product {
    product(identifier: { productId: "product123" }) {
        id
        purchaseGroupMemberships {
            memberAmount {
                unit
                value
            }
            productGroup {
                representativeProduct {
                    ... on Product {
                        id
                        externalId {
                            value
                        }
                        sku {
                            value
                        }
                        amazonSku {
                            marketplaceId
                            value
                        }
                        externalVersion
                    }
                }
            }
        }
        representativeOfPurchaseGroup {
            members {
                edges {
                    node {
                        memberAmount {
                            unit
                            value
                        }
                        product {
                            ... on Product {
                                id
                                externalId {
                                    value
                                }
                                sku {
                                    value
                                }
                                amazonSku {
                                    marketplaceId
                                    value
                                }
                                externalVersion
                            }
                        }
                    }
                }
            }
        }
    }
}
Response
{
    "data": {
        "product": {
            "id": "product123",
            "purchaseGroupMemberships": null,
            "representativeOfPurchaseGroup": null
        }
    }
}

Query a representativeProduct

Request
query product {
    product(identifier: { productId: "representativeProduct123" }) {
        id
        purchaseGroupMemberships {
            memberAmount {
                unit
                value
            }
            productGroup {
                representativeProduct {
                    ... on Product {
                        id
                        externalId {
                            value
                        }
                        sku {
                            value
                        }
                        amazonSku {
                            marketplaceId
                            value
                        }
                        externalVersion
                    }
                }
            }
        }
        representativeOfPurchaseGroup {
            members {
                edges {
                    node {
                        memberAmount {
                            unit
                            value
                        }
                        product {
                            ... on Product {
                                id
                                externalId {
                                    value
                                }
                                sku {
                                    value
                                }
                                amazonSku {
                                    marketplaceId
                                    value
                                }
                                externalVersion
                            }
                        }
                    }
                }
            }
        }
    }
}
Response
{
    "data": {
        "product": {
            "id": "representativeProduct123",
            "purchaseGroupMemberships": null,
            "representativeOfPurchaseGroup": {
                "members": {
                    "edges": [
                        {
                            "node": {
                                "memberAmount": {
                                    "unit": null,
                                    "value": 2
                                },
                                "product": {
                                    "id": "memberProduct123",
                                    "externalId": {
                                        "value": "123456"
                                    },
                                    "sku": {
                                        "value": "sku 123456"
                                    },
                                    "amazonSku": {
                                        "marketplaceId": null,
                                        "value": "amazon sku 123456"
                                    },
                                    "externalVersion": null
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

Query a PurchaseGroupMember

Request
query product {
    product(identifier: { productId: "memberProduct123" }) {
        id
        purchaseGroupMemberships {
            memberAmount {
                unit
                value
            }
            productGroup {
                representativeProduct {
                    ... on Product {
                        id
                        externalId {
                            value
                        }
                        sku {
                            value
                        }
                        amazonSku {
                            marketplaceId
                            value
                        }
                        externalVersion
                    }
                }
            }
        }
        representativeOfPurchaseGroup {
            members {
                edges {
                    node {
                        memberAmount {
                            unit
                            value
                        }
                        product {
                            ... on Product {
                                id
                                externalId {
                                    value
                                }
                                sku {
                                    value
                                }
                                amazonSku {
                                    marketplaceId
                                    value
                                }
                                externalVersion
                            }
                        }
                    }
                }
            }
        }
    }
}
Response
{
    "data": {
        "product": {
            "id": "memberProduct123",
            "purchaseGroupMemberships": [
                {
                    "memberAmount": {
                        "unit": null,
                        "value": 2
                    },
                    "productGroup": {
                        "representativeProduct": {
                            "id": "representativeProduct123",
                            "externalId": {
                                "value": "12345"
                            },
                            "sku": {
                                "value": "sku 12345"
                            },
                            "amazonSku": {
                                "marketplaceId": null,
                                "value": "amazon sku 12345"
                            },
                            "externalVersion": null
                        }
                    }
                }
            ],
            "representativeOfPurchaseGroup": null
        }
    }
}

Remove a product from a PurchaseGroup

Use the updateProduct mutation to remove a product from a PurchaseGroup. Set the purchaseGroupMembership field to an empty object rather than setting the purchaseGroupMembership to null, which doesn't remove the product from the group.

The following example shows removing a product from a PurchaseGroup.

Request
mutation updateProduct {
  updateProduct(
    identifier: { 
      sku: "purchase-group-member-sku"
    }
    input: {
      purchaseGroupMemberships: []
    }
  ) {
    id
  }
}
Response
{
  "data": {
    "updateProduct": {
      "id": "abcdef01234567"
    }
  }
}

Related topics