ecomdash API
The ecomdash API allows third party software to integrate with the inventory management module of ecomdash.
Request URL
Request headers
The API integration key from the ecomdash account. This can be found by an ecomdash customer in ecomdash by launching the relevant App Store application
Request body
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.
Default: Product |
QuantityOnHand | int | Optional |
The starting Quantity on Hand for the product
Default: 0
|
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."
}
Response 500
If you receive a 500 code response, something went wrong on ecomdash's side while trying to process your request.
{
"Message": "Oops, something went wrong while processing your request"
}
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