# Add Product

## Endpoint

<mark style="color:purple;">**`POST`**</mark> `https://api.keepup.store/v2.0/products/add`

## Headers

`Authorization: Bearer API_KEY`

## Body Parameters

|                                                                    |          |                                                                                        |
| ------------------------------------------------------------------ | -------- | -------------------------------------------------------------------------------------- |
| <p><strong>product\_name</strong></p><p>string</p>                 | yes      | Name of the product. Example: "Widget A"                                               |
| <p><strong>description</strong></p><p><em>string</em></p>          | optional | Detailed description of the product. Uses sanitized content.                           |
| <p><strong>cost\_price</strong></p><p><em>float</em></p>           | optional | Cost price of the product. Must be a valid monetary amount. Example: 15.75             |
| <p><strong>selling\_price</strong></p><p><em>float</em></p>        | yes      | Selling price of the product. Must be a valid monetary amount. Example: 20.00          |
| <p><strong>previous\_price</strong></p><p><em>float</em></p>       | optional | Previous selling price, if any. Must be a valid monetary amount. Example: 18.00        |
| <p><strong>quantity</strong></p><p><em>integer</em></p>            | yes      | Available quantity of the product. Required if `stock_limit` is 'limited'. Example: 50 |
| <p><strong>restock\_level</strong></p><p><em>integer</em></p>      | optional | Level at which the product should be restocked. Example: 10                            |
| <p><strong>stock\_limit</strong></p><p><em>string</em></p>         | yes      | Whether stock is limited or unlimited. Accepts 'limited' or 'unlimited'.               |
| <p><strong>show\_on\_storefront</strong></p><p><em>string</em></p> | optional | Whether to show the product on the storefront. Accepts 'yes' or 'no'. Default is 'no'. |
| <p><strong>featured\_product</strong></p><p><em>string</em></p>    | optional | Whether the product is featured. Accepts 'yes' or 'no'. Default is 'no'.               |
| <p><strong>category</strong></p><p><em>string</em></p>             | optional | Category of the product. Example: "Electronics"                                        |
| <p><strong>tags</strong></p><p><em>JSON</em></p>                   | optional | Tags associated with the product, in JSON format. Example: `["Electronics", "Gadget"]` |
| <p><strong>SKU</strong></p><p><em>string</em></p>                  | optional | Stock Keeping Unit, unique identifier for each product variant. Example: "SKU12345"    |
| <p><strong>barcode</strong></p><p><em>string</em></p>              | optional | Barcode of the product. Example: "0123456789012"                                       |
| <p><strong>product\_location</strong></p><p><em>string</em></p>    | optional | Storage location of the product within the business. Example: "Aisle 3, Shelf 5"       |

## Sample Requests

{% tabs %}
{% tab title="Node.js" %}
{% code overflow="wrap" fullWidth="true" %}

```javascript
const axios = require('axios');

const productData = {
  business_id: 'bus123',
  product_name: 'Product A',
  description: 'High-quality gadget',
  cost_price: 15.75,
  selling_price: 20.00,
  quantity: 50,
  restock_level: 10,
  stock_limit: 'limited',
  show_on_storefront: 'yes',
  featured_product: 'no',
  category: 'Electronics',
  tags: JSON.stringify(["Electronics", "Gadget"]),
  SKU: 'SKU12345',
  barcode: '0123456789012',
  product_location: 'Aisle 3, Shelf 5',
  expirations: JSON.stringify([{
    batch_number: "batch123",
    expiration_date: "2024-12-31",
    alert_date: "2024-12-01"
  }]),
  primary_product_image_index: 0
};

const config = {
  method: 'post',
  url: 'https://api.keepup.store/v2.0/products/add',
  headers: {
    'Authorization': 'Bearer API_KEY',  // Replace YOUR_ACCESS_TOKEN with your actual access token
    'Content-Type': 'application/json'
  },
  data: JSON.stringify(productData)
};

axios(config)
.then(function (response) {
  console.log('Product added successfully:', response.data);
})
.catch(function (error) {
  console.error('Failed to add product:', error);
});

```

{% endcode %}
{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();

$filePath = '/path/to/file.jpg';
$cfile = new CURLFile($filePath, 'image/jpeg', 'file.jpg');

$postData = array(
    'product_name' => 'Widget A',
    'description' => 'High-quality gadget',
    'cost_price' => '15.75',
    'selling_price' => '20.00',
    'quantity' => '50',
    'restock_level' => '10',
    'show_on_storefront' => 'yes',
    'featured_product' => 'no',
    'category' => 'Electronics',
    'tags' => json_encode(["Electronics", "Gadget"]),
    'SKU' => 'SKU12345',
    'barcode' => '0123456789012',
    'product_location' => 'Aisle 3, Shelf 5',
    'expirations' => json_encode([{ "batch_number": "batch123", "expiration_date": "2024-12-31", "alert_date": "2024-12-01" }]),
);

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.keepup.store/v2.0/products/add',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => $postData,
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer API_KEY' // Replace 'API_KEY' with your actual API key
  ),
));

$response = curl_exec($curl);

if ($response === false) {
    echo 'Curl error: ' . curl_error($curl);
}

curl_close($curl);
echo $response;

?>

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

m = MultipartEncoder(
    fields={
        'product_name': 'Widget A',
        'description': 'High-quality gadget',
        'cost_price': '15.75',
        'selling_price': '20.00',
        'quantity': '50',
        'restock_level': '10',
        'show_on_storefront': 'yes',
        'featured_product': 'no',
        'category': 'Electronics',
        'tags': json.dumps(["Electronics", "Gadget"]),
        'SKU': 'SKU12345',
        'barcode': '0123456789012',
        'product_location': 'Aisle 3, Shelf 5',
        'expirations': json.dumps([{"batch_number": "batch123", "expiration_date": "2024-12-31", "alert_date": "2024-12-01"}]),
        'primary_product_image_index': '0',
    }
)

response = requests.post('https://api.keepup.store/v2.0/products/add', 
                         data=m, 
                         headers={'Authorization': 'Bearer API_KEY', 'Content-Type': m.content_type})  # Replace YOUR_ACCESS_TOKEN with your actual access token

print(response.text)

```

{% endtab %}
{% endtabs %}

## Sample Response

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

```json
{
    "status": 200,
    "message": "product added",
    "data": {
        "product_id": 19845
    }
}
```

{% endtab %}

{% tab title="Error" %}

```json
{
    "status": 401,
    "error": "Authentication invalid"
}
```

{% endtab %}
{% endtabs %}
