# products.create

The products.create method allows external systems—such as PIMs, ERPs, or custom integrations—to send product data directly to Flipsnack. Each request must include an apiSecretKey for authentication, a sourceHash to group the products, and a list of product objects. Submitted products become visible in the Automation tab in the Design Studio, replacing the need for manual CSV imports.

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

### Rules & Limitations

* Payloads must follow a predefined JSON schema
* Up to 500 products per request
* Maximum payload size: 200 MB
* sourceHash must be generated and persisted by the client and must be a 64-character identifier used to group products under a specific source. Clients are responsible for generating and persisting this value for future updates or deletions
* Variants must be nested inside their parent product
* Duplicate SKUs within the same request or under the same sourceHash are not allowed

### Feed Organization

Clients can submit products under one or multiple sourceHash values, allowing them to manage separate product feeds. **The sourceHash is also required for future updates or deletions.**

## 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.create. 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(required)                  | 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
            }
        ]
    }
]

```

## 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](https://developers.flipsnack.com/api-status-codes "mention") 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.create">
   <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 %}
