In this post, I will show you how to add items to the cart as a customer using Magento 2 API. Follow my examples of simple products, digital downloadable product, and customize product will give you an overview of how it can be done.
Step 1: Generate customer access token
We will add items to the cart on behalf of the customer, so Admin token is not required. Create a new request with this endpoint
POST <host>/rest/V1/integration/customer/token
Payload(body):
{
"username": "string",
"password": "string"
}
Code language: JSON / JSON with Comments (json)
Response: access token
Step 2: Add items to the cart
Create a new post with this endpoint:
POST <host>/rest/V1/carts/mine/items
Authorization: Bearer token
Enter your customer access token
Add a simple product
A simple product requires a SKU, the quantity, and the quote ID, follow our post to create a quote ID. The following example adds a Push It Messenger Bag (Magento sample product) (SKU: 24-WB04) to the cart.
Payload
{
"cartItem": {
"sku": "24-WB04",
"qty": 1,
"quote_id": "42"
}
}
Code language: JSON / JSON with Comments (json)
Response
{
"item_id": 139,
"sku": "24-WB04",
"qty": 1,
"name": "Push It Messenger Bag",
"price": 45,
"product_type": "simple",
"quote_id": "42"
}
Code language: JSON / JSON with Comments (json)
Add a digital product
Downloadable items have the same requirements as simple product. The following example adds the downloadable product Solo Power Circuit (SKU: 240-LV07)
Payload
{
"cartItem": {
"sku": "240-LV07",
"qty": 1,
"quote_id": "42"
}
}
Code language: JSON / JSON with Comments (json)
Response
{
"item_id": 140,
"sku": "240-LV07",
"qty": 1,
"name": "Solo Power Circuit",
"price": 14,
"product_type": "downloadable",
"quote_id": "42",
"product_option": {
"extension_attributes": {
"downloadable_option": {
"downloadable_links": [
4
]
}
}
}
}
Code language: JSON / JSON with Comments (json)
Add a customize product
What makes the configurable products different from other products is that you have to specify the SKU as well as the set of option_id/option_value pairs.
First, use this endpoint to get information about each combination of color and size. The following sample shows the returned values for size and color for a XS blue Proteus Fitness Jackshirt.
Get the option_id values for the given SKU.
GET <host>/rest/V1/configurable-products/:sku/options/all
Authorization: Bearer token – Admin token
The following sample shows the returned values for size and color for a small blue Proteus Fitness Jackshirt (SKU: MJ12). The option_id values for Size and Color are 145 and 93.
GET <host>/rest/V1/configurable-products/:sku/children
Authorization: Bearer token – Customer token
Response
{
"custom_attributes": [
{
"attribute_code": "size",
"value": "166"
},
{
"attribute_code": "color",
"value": "49"
}
]
}
Code language: JSON / JSON with Comments (json)
We now know the values for option_value for size and color are 166 and 49, so we’re ready to add the product to the cart.
POST <host>/rest/V1/carts/mine/items
Payload
{
"cartItem": {
"sku": "MJ12",
"qty": 1,
"quote_id": "42",
"product_option": {
"extension_attributes": {
"configurable_item_options": [
{
"option_id": "93",
"option_value": 49
},
{
"option_id": "145",
"option_value": 166
}
]
}
},
"extension_attributes": {}
}
}
Code language: JSON / JSON with Comments (json)
Response
{
"item_id": 141,
"sku": "MJ12-XS-Blue",
"qty": 1,
"name": "Proteus Fitness Jackshirt",
"price": 45,
"product_type": "configurable",
"quote_id": "42",
"product_option": {
"extension_attributes": {
"configurable_item_options": [
{
"option_id": "93",
"option_value": 50
},
{
"option_id": "145",
"option_value": 166
}
]
}
}
}
Code language: JSON / JSON with Comments (json)
Add a bundle product
You have to add individual items to the bundle product by specifying the id defined in the item’s product_links object. The product_links links an item’s SKU and id to the SKU of the bundle product.
In this example, we will use the Sprite Yoga Companion Kit (SKU: 24-WG080), which includes:
- Statis Ball (55cm, 65cm, 75cm)
- Foam Yoga brick
- Yoga Strap (6ft, 8ft, 10ft)
- Foam Roller
First, we get the bundle product id
GET <host>/rest/V1/bundle-products/24-WG080/options/all
Authorization: Bearer token – Admin token
Response
[
{
"option_id": 1,
"title": "Sprite Stasis Ball",
"required": true,
"type": "radio",
"position": 1,
"sku": "24-WG080",
"product_links": [
{
"id": "1",
"sku": "24-WG081-blue",
"option_id": 1,
"qty": 1
},
{
"id": "2",
"sku": "24-WG082-blue",
"option_id": 1,
"qty": 1
},
{
"id": "3",
"sku": "24-WG083-blue",
"option_id": 1,
"qty": 1
}
]
},
{
"option_id": 2,
"title": "Sprite Foam Yoga Brick",
"required": true,
"type": "radio",
"position": 2,
"sku": "24-WG080",
"product_links": [
{
"id": "4",
"sku": "24-WG084",
"option_id": 2,
"qty": 1
}
]
},
{
"option_id": 3,
"title": "Sprite Yoga Strap",
"required": true,
"type": "radio",
"position": 3,
"sku": "24-WG080",
"product_links": [
{
"id": "5",
"sku": "24-WG085",
"option_id": 3,
"qty": 1
},
{
"id": "6",
"sku": "24-WG086",
"option_id": 3,
"qty": 1
},
{
"id": "7",
"sku": "24-WG087",
"option_id": 3,
"qty": 1
}
]
},
{
"option_id": 4,
"title": "Sprite Foam Roller",
"required": true,
"type": "radio",
"position": 4,
"sku": "24-WG080",
"product_links": [
{
"id": "8",
"sku": "24-WG088",
"option_id": 4,
"qty": 1
}
]
}
]
Code language: JSON / JSON with Comments (json)
Then specify the product options that you want to choose. For example:
- 55 cm Sprite Stasis Ball (id: 1)
- Sprite Foam Yoga Brick (id: 4)
- 6 ft Sprite Yoga strap (id: 5)
- Sprite Foam Roller (id: 8)
Create a new request with this endpoint:
POST /rest/V1/carts/mine/items
Authorization: Bearer token – Customer token
Payload
{
"cartItem": {
"sku": "24-WG080",
"qty": 1,
"quote_id": "4",
"product_option": {
"extension_attributes": {
"bundle_options": [
{
"option_id": 1,
"option_qty": 1,
"option_selections": [1]
},
{
"option_id": 2,
"option_qty": 1,
"option_selections": [4]
},
{
"option_id": 3,
"option_qty": 1,
"option_selections": [5]
},
{
"option_id": 4,
"option_qty": 1,
"option_selections": [8]
}
]
}
}
}
}
Code language: JSON / JSON with Comments (json)
Response
{
"item_id": 9,
"sku": "24-WG080-24-WG084-24-WG088-24-WG082-blue-24-WG086",
"qty": 1,
"name": "Sprite Yoga Companion Kit",
"price": 68,
"product_type": "bundle",
"quote_id": "4",
"product_option": {
"extension_attributes": {
"bundle_options": [
{
"option_id": 1,
"option_qty": 1,
"option_selections": [
1
]
},
{
"option_id": 2,
"option_qty": 1,
"option_selections": [
4
]
},
{
"option_id": 3,
"option_qty": 1,
"option_selections": [
5
]
},
{
"option_id": 4,
"option_qty": 1,
"option_selections": [
8
]
}
]
}
}
}
Code language: JSON / JSON with Comments (json)
Step 3: Verify the result
Log in with your customer account and check your cart for all the items you have added.
Above I have shown you how to add every type of item to a shopping cart using Magento 2 API. Hope you successfully generate products. For more guidess, visit our blog or Magento Devdocs.