Step 1. Plan the product

To create a bundle product with REST, you need:

  • The attribute names and values for the attribute set assigned to a bundle product.
  • The category IDs assigned to a bundle product.
  • Simple product SKUs assigned to a bundle product.

We will use a Default attribute set.

RAM and Monitor sizes will be the customizable aspect of the bundle product. We will create a simple product for each size of RAM and Monitor (12GB, 24GB, 15” and 20”).

Define product characteristics

The table below has the general characteristics of the desktop computer we are creating:

Characteristic Description
Attribute Set Default
Product Name Desktop Computer
SKU Desktop-Computer
Tax Class Taxable Goods
Visibility Catalog, Search
Description Desktop computer

Find attribute values

We will make several API calls to find values needed to create simple/bundle products. We will use default as the store code.

Find attribute set ID

We will use the Default attribute set. We will need to find the corresponding attribute_set_id.

The following API call can be used to search for the attribute set named Default and entity_type_id equals 4. The catalog_product entity has an entity_type_id value of 4.

Endpoint:

1
GET http://domain.com/rest/default/V1/eav/attribute-sets/list?searchCriteria[filter_groups][0][filters][0][field]=attribute_set_name&searchCriteria[filter_groups][0][filters][0][value]=Default&searchCriteria[filter_groups][0][filters][0][condition_type]=eq&searchCriteria[filter_groups][1][filters][0][field]=entity_type_id&searchCriteria[filter_groups][1][filters][0][value]=4&searchCriteria[filter_groups][1][filters][0][condition_type]=eq

Response:

The attribute_set_id for the Default attribute set is 4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
    "items": [
        {
            "attribute_set_id": 4,
            "attribute_set_name": "Default",
            "sort_order": 1,
            "entity_type_id": 4
        }
    ],
    "search_criteria": {
        "filter_groups": [
            {
                "filters": [
                    {
                        "field": "attribute_set_name",
                        "value": "Default",
                        "condition_type": "eq"
                    }
                ]
            },
            {
                "filters": [
                    {
                        "field": "entity_type_id",
                        "value": "4",
                        "condition_type": "eq"
                    }
                ]
            }
        ],
        "page_size": 20
    },
    "total_count": 1
}

List attributes for the attribute set

Endpoint:

1
GET http://domain.com/rest/default/V1/products/attribute-sets/4/attributes

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[
    {
        "attribute_id": 87,
        "attribute_code": "image",
        "frontend_input": "media_image",
        "entity_type_id": "4",
        "is_required": false,
        "options": [],
        "is_user_defined": false,
        "default_frontend_label": "Base",
        "frontend_labels": [],
        "backend_type": "varchar",
        "is_unique": "0",
        "validation_rules": []
    },
    {
        "attribute_id": 125,
        "attribute_code": "shipment_type",
        "frontend_input": "select",
        "entity_type_id": "4",
        "is_required": true,
        "options": [
            {
                "label": "Together",
                "value": "0"
            },
            {
                "label": "Separately",
                "value": "1"
            }
        ],
        "is_user_defined": false,
        "default_frontend_label": "Ship Bundle Items",
        "frontend_labels": [],
        "backend_type": "int",
        "source_model": "Magento\\Bundle\\Model\\Product\\Attribute\\Source\\Shipment\\Type",
        "default_value": "0",
        "is_unique": "0",
        "validation_rules": []
    }
]

Because this response can be very long, we have abbreviated the example response above. The table below has attributes that are relevant in this tutorial.

Admin label Selected value Attribute ID attribute_code Attribute value
Tax Class Taxable Goods 134 tax_class_id 2
Visibility Catalog, Search 99 visibility 4

The attribute ID and value numbers will vary between different installations. Check the values carefully before using them in your calls.

List category values

We will assign our Desktop Computer to the What's New category.

Use the following endpoint to find out category’s ID.

Endpoint:

1
GET http://domain.com/rest/default/V1/categories?searchCriteria[filter_groups][0][filters][0][field]=id&searchCriteria[filter_groups][0][filters][0][value]=1&searchCriteria[filter_groups][0][filters][0][condition_type]=gte

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "id": 2,
    "parent_id": 1,
    "name": "Default Category",
    "is_active": true,
    "position": 1,
    "level": 1,
    "product_count": 0,
    "children_data": [
        {
            "id": 32,
            "parent_id": 2,
            "name": "What's New",
            "is_active": true,
            "position": 1,
            "level": 2,
            "product_count": 0,
            "children_data": []
        }
    ]
}

We can see from the above response that the id for What's New is equal to 32.

Verify this step

Since we are only gathering information, there is nothing to verify.