Magento – Magento 1.9 REST API – updating/creating products with custom attributes

apimagento-1.9rest

Is it possible to use Magento 1.9 REST API to create or update products that have custom attributes?

example:
http://magentohost/api/rest/products/8

Request Example: JSON

    {
     "attribute_set_id":"4",
     "type_id":"simple",
     "sku":"wedding dress",
     "name":"Dress_test",
     "custom_attr1":"test",
     "custom_attr2":"test2",
      ............
     }

Best Answer

<?php
$curl = curl_init();
$URL = "http://magento.dev";

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/V1/integration/admin/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"username\":\"admin\", \"password\":\"123123q\"}",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "cache-control: no-cache",
    "content-type: application/json",
    "postman-token: 654c3084-0e0a-b3a1-043f-0960e695e520"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
  die();
} else {
  $key = $response;
}


$data = [
    "product"=> [
        "sku"=> "DownloadableProduct_18sdsd5",
        "name"=> "DownloadableProduct_185",
        "attribute_set_id"=> 4,
        "price"=> "1",
        "status"=> 1,
        "visibility"=> 4,
        "type_id"=> "downloadable",
        "extension_attributes"=> [
            "stock_item"=> [
                "manage_stock"=> 1,
                "is_in_stock"=> 1,
                "qty"=> "10"
            ],
            "downloadable_product_samples"=> [[
                "title"=> "sample1185869143",
                "sort_order"=> "0",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]],
            "downloadable_product_links"=> [[
                "title"=> "link-1-185862143",
                "sort_order"=> "1",
                "is_shareable"=> 0,
                "price"=> 2.43,
                "number_of_downloads"=> "2",
                "link_type"=> "url",
                "link_url"=> "http://example.com",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]]
        ],
        "custom_attributes"=> [[
            "attribute_code"=> "tax_class_id",
            "value"=> 2
        ], [
            "attribute_code"=> "quantity_and_stock_status",
            "value"=> [
                "qty"=> "10",
                "is_in_stock"=> 1
            ]
        ], [
            "attribute_code"=> "is_virtual",
            "value"=> 1
        ], [
            "attribute_code"=> "url_key",
            "value"=> "downloadableproduct-185892143"
        ], [
            "attribute_code"=> "links_title",
            "value"=> "Links title 185862143"
        ], [
            "attribute_code"=> "links_purchased_separately",
            "value"=> 1
        ], [
            "attribute_code"=> "samples_title",
            "value"=> "Samples185692143"
        ], [
            "attribute_code"=> "links_exist",
            "value"=> 1
        ]]
    ]
];


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/admin/V1/products/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $data,
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: application/json",
    "authorization: Bearer " . $key,
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}