ecomdash API

The ecomdash API allows third party software to integrate with the inventory management module of ecomdash.

Inventory - Create Product

Creates a new product.

Try it

Request URL

Request headers

string

The API integration key from the ecomdash account. This can be found by an ecomdash customer in ecomdash under Administration --> Settings, on the "Tools" tab.

(optional)
string
Media type of the body sent to the API.
string
Subscription key which provides access to this API. Found in your Profile.

Request body

The product being added is represented as JSON in the body of the HTTP request, below are definitions of the properties of the product.
Attribute Type / Valid Values Requirement Description
Sku string Required The SKU number of the product.
Name string Required

The name of the product.

Type Product
Kit
Built
Conditional The type of product being created.
  • Product: Creates a normal product.
  • Kit: A kit is a SKU for selling items in bundles either multiples of the same item or combinations of items
  • Built: A built product is a SKU for products that use other Skus to manufacture or build your inventory.

Default: Product

QuantityOnHand int Optional

The starting Quantity on Hand for the product

Default: 0
Note: If the company is setup to handle multi-warehousing, this value will be overwritten by the sum of the "QuantityOnHand" field in the "Warehouses" array.

Identifiers object Optional

An object that holds various identifiers for the product. This currently accepts UPC, EAN, ISBN, and GTIN.

Identifiers.UPC string Optional

The UPC of the product.

Identifiers.EAN string Optional

The EAN of the product.

Identifiers.ISBN string Optional

The ISBN of the product.

Identifiers.GTIN string Optional

The GTIN of the product.

IsAutoSyncEnabled array Optional

A boolean to flag the product as having autosync on..

Default: true.

IsDiscontinued bool Optional

A boolean to flag the product as being discontinued.

Default: false.

IsDropshipped bool Optional

A boolean to flag the product as one that is provided by a dropshipping supplier.

Default: false.

IsFireArm bool Optional

A boolean to flag the product as a firearm.

Default: false.

IsVariation bool Optional

A boolean to flag the product as a variation. IsVariation and IsParent cannot both be true.

Default: false.

IsParent bool Optional

A boolean to flag the product as a parent product. IsVariation and IsParent cannot both be true.

Default: false.

GlobalListingAttributes object Optional

Information that ecomdash should use for this product as defaults for listings.

GlobalListingAttributes.SoldAsName string Optional

The default name to use for the product when creating listings.

GlobalListingAttributes.ShortDescription string Optional

The default short description to use for the product when creating listings.

GlobalListingAttributes.LongDescription string Optional

The default long description to use for the product when creating listings.

GlobalListingAttributes.Price decimal Optional

The default price to use for the product when creating listings.

GlobalListingAttributes.Condition New, Used Optional

The default condition to use for the product when creating listings.

Images array Optional

An array of images to of the product. A maximum of 12 images will be attached to the product.

Images[i].MIMEType string Optional

The MIME type of the image. (e.g. "image/gif", "image/png", "image/jpeg")

Images[i].Url Uri Conditional

The Url of the image

Note: If an image's Url cannot be successfully parsed into a Uri object, the image will not be added to the product.

Images[i].DisplayOrder int Optional

The display index of the product image that you wish ecomdash to use.

Warehouses array Optional

An array of warehouses to connect the product to.

Note: If the company uses multi-warehousing, all of the Warehouses will be connected to the product.

Warehouses[i].WarehouseId int Conditional

The Id of the Company's Warehouse you are attaching the product to. You can find all of the Company's warehouses using the /Warehouses call.

Note: If any warehouses are in the request, the ID of each warehouse is required.

Warehouses[i].Aisle string Optional

The aisle where the product is stored in the warehouse.

Warehouses[i].Bin string Optional

The bin where the product is stored in the warehouse.

Warehouses[i].QuantityOnHand integer Optional

The number of products in stock at the warehouse.

Default: 0

Warehouses[i].SKU string Optional

In some cases, the SKU in a warehouse may be different than the SKU you use for your inventory. This allows you to set the SKU of the product in this particular warehouse.

Default: This defaults to the product's SKU.

Warehouses[i].IsActive bool Optional

Is this product active in the given warehouse.

Default: true

SupplierInformation object Optional

Information about the supplier of this product.

SupplierInformation.SupplierId int Optional

The Id of the Company's Supplier you are attaching the product to. You can find all of the Company's suppliers using the /Suppliers call.

SupplierInformation.SKU string Optional

In some cases, the SKU for a supplier may be different than the SKU you use for your inventory. This allows you to set the SKU of the product for this particular supplier.

SupplierInformation.Price decimal Optional

Your cost of the product for this particular supplier.

{
	"Id": 235047,
	"CompanyId": 4,
	"Sku": "APITEST28",
	"Name": "Create Product with API Test28",
	"Type": "Product",
	"QuantityOnHand": 5,
	"Identifiers": {
		"ProductId": 235047,
		"UPC": "01928375612828"
	},
	"IsActive": true,
	"IsAutoSyncEnabled": false,
	"IsDiscontinued": false,
	"IsDropshipped": false,
	"IsFireArm": false,
	"IsVariation": false,
	"SupplierInformation": {
		"ProductId": 235047,
		"SupplierId": 2,
		"Name": "Supplier A",
		"Sku": "APITEST28",
		"Price": 5.99,
		"IsOutOfStock": false,
		"IsOrderedByCase": false
	},
	"GlobalListingAttributes": {
		"ProductId": 235047,
		"SoldAsName": "SaN APITEST28",
		"ShortDescription": "SDesc APITEST28",
		"LongDescription": "LDesc APITEST28",
		"Price": 8.39,
		"Condition": "New"
	},
	"Images": [{
		"Id": 9833,
		"ProductId": 235047,
		"MIMEType": "image/jpeg",
		"Url": "http://i.upcindex.com/i/WjI5dlpjMmwwWlM1MWJtSmxZWFJoWW14bGMyRnNaUzVqYjIwdmFXMW5Namt3TDJOamNuQTJNRGs1TG1kcFpnPT0yeGxjM1ZqYTNN.jpg",
		"DisplayOrder": 1
	},
	{
		"Id": 9834,
		"ProductId": 235047,
		"MIMEType": "image/jpeg",
		"Url": "http://i.upcindex.com/i/WjI5dlphUzUzWVd4dFlYSjBhVzFoWjJWekxtTnZiUzlwTDNBdk1EQXZNRE12TWpJdk5EY3ZNVGN2TURBd016SXlORGN4TnpRd09WODFNREJZTlRBd0xtcHdadz09MnhsYzNWamEzTQ,,.jpg",
		"DisplayOrder": 2
	},
	{
		"Id": 9835,
		"ProductId": 235047,
		"MIMEType": "image/jpeg",
		"Url": "http://i.upcindex.com/i/WjI5dlpaV040TG1sdFlXZGxjeTFoYldGNmIyNHVZMjl0TDJsdFlXZGxjeTlRTDBJd01ESlNRa2ROTVRZdU1ERXVYMU5NTlRBd1gxQkZOVFJmVDFVd01WOVRRMHhhV2xwYVdscGFYMVkwTURBNU9EYzFNVEJmTG1wd1p3PT0yeGxjM1ZqYTNN.jpg",
		"DisplayOrder": 3
	}],
	"Warehouses": [{
		"Id": 370,
		"ProductId": 235047,
		"WarehouseId": 3,
		"Name": "Warehouse 1 - Drews dont touch",
		"Aisle": "55B",
		"Bin": "AA3",
		"QuantityOnHand": 4,
		"SKU": "APITEST28-3",
		"IsActive": true,
		"IsDefault": false
	},
	{
		"Id": 371,
		"ProductId": 235047,
		"WarehouseId": 73,
		"Name": "Kelsey's",
		"QuantityOnHand": 1,
		"SKU": "APITEST28-73",
		"IsActive": true,
		"IsDefault": false
	}]
}

Response 200

{
  "status": "Success",
  "messages": [],
  "data": {
    "Product": {
      "Id": 133098803,
      "CompanyId": 17195,
      "Sku": "APITEST20190412.1",
      "Name": "Create Product with API APITEST20190412.1",
      "Type": "Product",
      "QuantityOnHand": 5,
      "Identifiers": {
        "ProductId": 133098803,
        "UPC": "01928375612347"
      },
      "IsActive": true,
      "IsAutoSyncEnabled": false,
      "IsDiscontinued": false,
      "IsDropshipped": true,
      "IsFireArm": false,
      "IsVariation": false,
      "IsParent": false,
      "GlobalListingAttributes": {
        "ProductId": 133098803,
        "SoldAsName": "SaN APITEST20190412.1",
        "ShortDescription": "SDesc APITEST20190412.1",
        "LongDescription": "LDesc APITEST20190412.1",
        "Price": 8.39,
        "Condition": "New"
      },
      "Images": [
        {
          "Id": 179760997,
          "ProductId": 133098803,
          "MIMEType": "image/jpeg",
          "Url": "http://i.upcindex.com/i/WjI5dlpjMmwwWlM1MWJtSmxZWFJoWW14bGMyRnNaUzVqYjIwdmFXMW5Namt3TDJOamNuQTJNRGs1TG1kcFpnPT0yeGxjM1ZqYTNN.jpg",
          "DisplayOrder": 1
        },
        {
          "Id": 179760998,
          "ProductId": 133098803,
          "MIMEType": "image/jpeg",
          "Url": "http://i.upcindex.com/i/WjI5dlphUzUzWVd4dFlYSjBhVzFoWjJWekxtTnZiUzlwTDNBdk1EQXZNRE12TWpJdk5EY3ZNVGN2TURBd016SXlORGN4TnpRd09WODFNREJZTlRBd0xtcHdadz09MnhsYzNWamEzTQ,,.jpg",
          "DisplayOrder": 2
        },
        {
          "Id": 179760999,
          "ProductId": 133098803,
          "MIMEType": "image/jpeg",
          "Url": "http://i.upcindex.com/i/WjI5dlpaV040TG1sdFlXZGxjeTFoYldGNmIyNHVZMjl0TDJsdFlXZGxjeTlRTDBJd01ESlNRa2ROTVRZdU1ERXVYMU5NTlRBd1gxQkZOVFJmVDFVd01WOVRRMHhhV2xwYVdscGFYMVkwTURBNU9EYzFNVEJmTG1wd1p3PT0yeGxjM1ZqYTNN.jpg",
          "DisplayOrder": 3
        }
      ],
      "Warehouses": [
        {
          "Id": 1728365009,
          "ProductId": 133098803,
          "WarehouseId": 4865,
          "Name": "Andora Warehouse",
          "QuantityOnHand": 5,
          "SKU": "APITEST20190412.1",
          "IsActive": true,
          "IncludeInSyncBalance": true
        },
        {
          "Id": 1728365010,
          "ProductId": 133098803,
          "WarehouseId": 3272,
          "Name": "My Warehouse",
          "QuantityOnHand": 0,
          "SKU": "APITEST20190412.1",
          "IsActive": true,
          "IncludeInSyncBalance": true
        }
      ]
    },
    "WasSuccessful": true,
    "Messages": []
  }
}

Response 400

You will receive a 400 Bad Request response if the body of your request was not in a valid format to even attempt the creation of a new product.

Response 403

If you have provided an invalid "ecd-subscription-key", you will receive a 403 FORBIDDEN response. This will happen for the following reasons:

  • The "ecd-subscription-key" was missing or it not found in the ecomdash databases
  • The "ecd-subscription-key" was found, but the company attached to it does not have a current ecomdash subscription.
  • The provided "ecd-subscription-key" is associated with an AppStore subscription, but the associated "application-id" header was either missing or not the same one associated with the " ecd-subscription-key".

{
  "Message": "The provided 'ecd-subscription-key' / 'application-id' combination is not valid or does not belong to a company with a current ecomdash subscription."
}

Code samples

@ECHO OFF

curl -v -X POST "https://ecomdash.azure-api.net/api/Inventory"
-H "ecd-subscription-key: "
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: {subscription key}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("ecd-subscription-key", "");
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");

            var uri = "https://ecomdash.azure-api.net/api/Inventory?" + queryString;

            HttpResponseMessage response;

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes("{body}");

            using (var content = new ByteArrayContent(byteData))
            {
               content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
               response = await client.PostAsync(uri, content);
            }

        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://ecomdash.azure-api.net/api/Inventory");


            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader("ecd-subscription-key", "");
            request.setHeader("Content-Type", "application/json");
            request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://ecomdash.azure-api.net/api/Inventory?" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("ecd-subscription-key","");
                xhrObj.setRequestHeader("Content-Type","application/json");
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
            },
            type: "POST",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://ecomdash.azure-api.net/api/Inventory";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"POST"];
    // Request headers
    [_request setValue:@"" forHTTPHeaderField:@"ecd-subscription-key"];
    [_request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://ecomdash.azure-api.net/api/Inventory');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'ecd-subscription-key' => '',
    'Content-Type' => 'application/json',
    'Ocp-Apim-Subscription-Key' => '{subscription key}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_POST);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'ecd-subscription-key': '',
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('ecomdash.azure-api.net')
    conn.request("POST", "/api/Inventory?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'ecd-subscription-key': '',
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('ecomdash.azure-api.net')
    conn.request("POST", "/api/Inventory?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://ecomdash.azure-api.net/api/Inventory')

request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
request['ecd-subscription-key'] = ''
# Request headers
request['Content-Type'] = 'application/json'
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body