# products.update

The products.update method allows external systems (such as a PIM or ERP) to send full or partial product data directly to Flipsnack. Each request has a limitation of 500 products per request and must include an apiKey, signature for authentication, a sourceHash to know exactly which feeds products to update and the product list with the updated fields there is no need to send full products it’s enough to send only the updated fields.The last step is data validation and if all goes well the updated products will be available under the Automation tab in the Design Studio.

**Note:** Requests must be made to **<https://api.flipsnack.com/v1>**.

## Request parameters <a href="#request_params" id="request_params"></a>

| Name                                | Type   | Description                                                                                                                                                                                                                                                                                                                                                                      |
| ----------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>apiKey (required)</p><p><br></p> | string | The API key provided for your user. If it is not specified, the request will return the error code "30 - Missing mandatory parameter". If the key is incorrect the request returns the error code "41 - Invalid credentials".                                                                                                                                                    |
| signature (required)                | string | The signature must be calculated by you and added to the request. See[ How to sign a request](https://developers.flipsnack.com/how-to-sign-a-request) for more information.If the parameter is missing the request will return the error code "30 - Missing mandatory parameter". If the signature is incorrect the request will return the error code "44 - Invalid signature". |
| action (required)                   | string | The API method that should be called. In this case the value should be products.update . If it is not specified, the request will return the error code "30 - Missing mandatory parameter".                                                                                                                                                                                      |
| sourceHash (required)               | string | This needs to be a unique identifier within flipsnack to be able to update based on it the products and also to have the possibility to create multiple feeds from the same API                                                                                                                                                                                                  |
| products(required)                  | JSON   | It’s a JSON containing all the products that are going to pe created                                                                                                                                                                                                                                                                                                             |
| feedName                            | string | The name displayed in automation page in app                                                                                                                                                                                                                                                                                                                                     |

### &#x20;Products example as JSON type

This is an example of how one structure of product with one variant (if needed) should look like.

```json
[
    {
        "type": string, // required
        "code": string, // required
        "title": string,
        "description": string,
        "image_link": string,
        "sell_price": number,
        "currency": string,
        "discount_price": number,
        "quantity": boolean,
        "purchasable_qty": {
            "min": number,
            "max": number
        },
        "attribute": {
            "name1": string,
            "options1": string,
            "name2": string,
            "options2": string,
            "name3": string,
            "options3": string
        },
        "image_attribute": string,
        "shop_element": string,
        "area_element": {
            "tooltip": string,
            "color": string,
            "opacity": number
        },
        "shop_button": {
            "color": string,
            "label": string,
            "label_color": string
        },
        "website": {
            "button": boolean,
            "button_label": string,
            "link": string
        },
        "customizable_product": {
            "product": boolean,
            "instructions": string,
            "flat_fee": number,
            "per_character": number,
            "character_length": number,
            "mandatory": boolean
        },
        "variants": [
            {
                "code": string,
                "parent_code": string,
                "image_link": string,
                "visible": boolean,
                "attribute": {
                    "options1": string,
                    "options2": string,
                    "options3": string
                },
                "price": number,
                "discount_price": number
            }
        ]
    }
]

```

### &#x20;Products JSON Example

In the next example there is only one product but you can send a maximum of 500 products per request also the required fields have a comment  “// required” all the rest of the fields are optional and need to be sent only if they change&#x20;

```json
[
    {
        "type": "Product", // required
        "code": "SKU-01-WFW", // required
        "title": "Women Fine Watch",
        "description": "Imported japanese quartz movement keeps time accurate.",
        "image_link": "https://cdn.flipsnack.com/images/automation/women-fine-watch-black.jpg;",
        "sell_price": 35,
        "currency": "USD",
        "discount_price": 0,
        "quantity": true,
        "purchasable_qty": {
            "min": 100,
            "max": 100
        },
        "attribute": {
            "name1": "Color",
            "options1": "Silver/Black;Gold/Brown;Gold/Green",
            "name2": "size",
            "options2": "s;m",
            "name3": "",
            "options3": ""
        },
        "image_attribute": "Color",
        "shop_element": "AREA",
        "area_element": {
            "tooltip": "Click to view this product",
            "color": "#7BC2FF",
            "opacity": 20
        },
        "shop_button": {
            "color": "#0362FC",
            "label": "Add to cart",
            "label_color": "#ffffff"
        },
        "website": {
            "button": false,
            "button_label": "",
            "link": ""
        },
        "customizable_product": {
            "product": false,
            "instructions": "",
            "flat_fee": 100,
            "per_character": 100,
            "character_length": 100,
            "mandatory": false
        },
        "variants": [
            {
                "code": "SKU-01-WFW-SB",
                "parent_code": "SKU-01-WFW",
                "image_link": "https://cdn.flipsnack.com/collections/uploads/01793059c4a88ae3d80eb24f45752982",
                "visible": true,
                "attribute": {
                    "options1": "Silver/Black",
                    "options2": "s",
                    "options3": ""
                },
                "price": 120,
                "discount_price": 110
            }
        ]
    }
]

```

## Response parameters

| Name                   | Type   | Description                                                                                                                                                                                                                                                                |
| ---------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>code</p><p><br></p> | string | <p>Possible values:</p><ul><li>200: When all goes well and action is executed correctly</li><li>400: When data submitted has invalid data of wrong format</li><li>51: When the mac number of products sent is exceeded</li><li>30: Missing a mandatory parameter</li></ul> |
| status                 | string | Message related to code                                                                                                                                                                                                                                                    |
| data                   | JSON   | It's a JSON with more details about the response it has a more detailed message about the outcome, errors or data which is an array of exact messages                                                                                                                      |

## Error codes <a href="#error_codes" id="error_codes"></a>

For complete list of error codes and messages go to [API status codes](/api-status-codes.md) section.

## Examples <a href="#example" id="example"></a>

### Request

{% tabs %}
{% tab title="cURL" %}

```bash
# GET
curl -X POST https://api.flipsnack.com/v1/ \
-F action=products.create \
-F apiKey=<YOUR-API-KEY> \
-F signature=<YOUR-REQUEST-SIGNATURE> \
-F sourceHash=<YOUR-SOURCE-HASH> \
-F products="<YOUR-PRODUCTS>” 

```

{% endtab %}

{% tab title="HTML" %}

```html
<form method="get" action="https://api.flipsnack.com/v1/">
   <input type="hidden" name="action" value="products.update">
   <input type="hidden" name="apiKey" value="<YOUR-API-KEY>">
   <input type="hidden" name="sourceHash" value="<YOUR-SOURCE-HASH>">
   <input type="hidden" name="products" value="<YOUR-PRODUCTS>">
   <button type="submit">Submit</button>
</form>
```

{% endtab %}
{% endtabs %}

## Response

{% tabs %}
{% tab title="JSON" %}

```json
{
    "code":200,
    "status":"",
    "data": {
    "message":"Products updated successfully",
    "Errors":[]
}
{
    "code": 30
    "status": "Missing mandatory parameter”
    "Data": [
            Feed name parameter is missing,
            Products parameter is missing
	    Source hash parameter is missing
            Products hashes parameter is missing
        ]
}





```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.flipsnack.com/products/update.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
