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.

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.

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

Identifiers object Optional

An object that holds various identifiers for the product. This will be expanded in the futured, but currently only includes UPC.

Identifiers.UPC string Optional

The UPC of the product.

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.

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.

Response 200

You can receive a 200 response in two instances.

  1. Your product was successfully
  2. Your product was not created because of validation issues

{
  "status": "Success",
  "messages": [],
  "data": {
    "Product": {
      "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
        }
      ]
    },
    "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