Introduction
Easync is a type of application that allows you to dropship orders from seasoned online retailers like Aliexpress and Amazon. To do this, all you have to do is to process a POST request. This method ensures that your web server will accept the sent data and properly extract it from your transmitted message. This is important for storage and reference for future use and to promote accuracy of dropshipping. Aside from helping you find an excellent item manufacturer, wholesaler, or retailer, Easync also gives you access to product information and price ranges. As of this moment, you can get these pieces of information from supported retailers only.
Quick start
Visit easync.io and create an account. Alternatively, you can directly go to this URL for registration: https://app.easync.io/sign-up.
To place an order, follow the step-by-step process found on the order creation section.
Check out source code of samle scripts.
Supported retailers
The table below shows the endpoints available for each retailer. We can add additional retailers upon request – contact us for a quote for a particular retailer.
Name | Retailer Code | Orders | Product Details | Product Prices |
---|---|---|---|---|
AliExpress | aliexpress | Y | Y | Y |
Amazon | amazon | Y | Y | Y |
Amazon United Kingdom | amazon_uk | Y | Y | Y |
Amazon Canada | amazon_ca | Y | Y | Y |
Amazon Deutschland | amazon_de | Y | Y | Y |
Amazon France | amazon_fr | Y | Y | Y |
Amazon Italy | amazon_it | Y | Y | Y |
Amazon Spain | amazon_es | Y | Y | Y |
BestBuy | bestbuy | Y | Y | Y |
Costco | costco | Y | Y | |
Overstock | overstock | Y | Y | |
Walmart | walmart | Y | Y | Y |
Authentication
Example authentication request
curl http://core.easync.io/api/v1/orders -u "<client_token>":
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
require('request')({
url: 'https://core.easync.io/api/v1/orders',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
},
(error, response, body) => {
console.log(body);
}
);
import requests
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
print requests.get("https://core.easync.io/api/v1/orders", auth=(API_TOKEN, '')).content;
Verify your account by providing client tokens for your transactions. You can use HTTP Basic Auth function to do this. For this function, you will consider the client token as the basic auth username value. You don’t have to use a password for this process. You can assign a token to your Easync account here.
Therefore, you have to contact us if you think someone else is using your token.
Idempotency Keys
Example idempontency key request
curl "http://core.easync.io/api/v1/orders" \
-u "<client_token>": \
-d '{
"idempotency_key": "<idempotency_key>",
"retailer": "amazon",
"max_price": 2300,
...
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
require('request')({
url: 'https://core.easync.io/api/v1/orders',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: {
"retailer": 'amazon',
"idempotency_key": "<idempotency_key>",
"max_price": 2300,
...
},
(error, response, body) => {
console.log(body);
}
);
import requests
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
print requests.get("https://core.easync.io/api/v1/orders", auth=(API_TOKEN, ''), json={
"retailer": 'amazon',
"idempotency_key": "<idempotency_key>",
"max_price": 2300,
...
}).content;
Easync API will not provide you with the typical order deduplication. Every time you complete a new transaction, the API will try to place an order on your behalf. Make sure that you will use the same idempotency key that you used to place this order if ever you encounter problems such as connection concerns to prevent duplicate requests. Easync API has retry request functions that safely attempts to prevent accidentally completing an operation twice in a row.
To complete the idempotent request, just place your unique key to the request body of the POST request. Use the "idempotency_key": <idempotency_key>
parameter to do this. Creation of the unique keys depends on your preferences. For this situation, you may use UUIDs or random strings. Using the same key will send back a similar response for your requests. In case you receive an error instead, you may perform the operation again by sending out another request using another idempotency key. Once you receive a response for the said transaction, you can no longer change the details for your order.
In case your API request returns with 5XX status code, retrying the request will possibly end up in a duplicate request. A 5XX request code will give you complications determining the current state of the request. Therefore, make sure you attempt all your requests using idempotency keys. If you are not using these and you end up having an error code, Easync will not refund the completed duplicate order.
Place an order
Create an order
Easync provides underlying API for applications that require real-time order completion functions. With just one POST request, ordering from a supported retailer is a breeze. After starting an order, you will receive one request_id
. You can find this in the POST body response. In turn, you can use this to retrieve the order status.
Example create an order request
curl "http://core.easync.io/api/v1/orders" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"products": [
{
"product_id": "B01K7C0CSA",
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": 15000,
"prime": true
}
}
],
"max_price": 2300,
"shipping_address": {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
},
"is_gift": true,
"gift_message": "Here is your package, Tim! Enjoy!",
"shipping_method": "free",
"payment_method": {
"expiration_month": 9,
"expiration_year": 9999,
"name_on_card": "Jack Sparrow",
"number": "0000000000000000",
"security_code": "555",
"use_gift": true
},
"billing_address": {
"first_name": "John",
"last_name": "Smith",
"address_line1": "14 Bus St.",
"address_line2": "",
"zip_code": "123456",
"city": "Atlanta",
"state": "GA",
"country": "US",
"phone_number": "1234567890"
},
"retailer_credentials": {
"email": "[email protected]",
"password": "123456"
},
"cashback": {
"topcashback": {
"login": "[email protected]",
"password": "awesomepassword"
},
"givingassistant": {
"login": "[email protected]",
"password": "awesomepassword"
}
}
"webhooks": {
"order_placed": "http://mywebsite.com/easync/order_placed",
"order_failed": "http://mywebsite.com/easync/order_failed",
"tracking_obtained": "http://mywebsite.com/easync/tracking_obtained"
},
"client_notes": {
"our_internal_order_id": "abc123",
"any_other_field": ["any value"]
}
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const PRODUCT_ID = 'B01K7C0CSA'; //Amazon US
// const PRODUCT_ID = 'B01BRC1ZYE'; //Amazon DE
// const PRODUCT_ID = 'B00V6C5Z0Q'; //Amazon UK
// const PRODUCT_ID = 'B010S9M3L6'; //Amazon ES
// const PRODUCT_ID = 'B019HC54WU'; //Amazon FR
// const PRODUCT_ID = 'B019HC54WU'; //Amazon CA
// const PRODUCT_ID = 'B007PNGRPC'; //Amazon IT
const MAX_PRICE = 30000;
const RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
const BILLING_ADDRESS = {
"first_name": "John",
"last_name": "Smith",
"address_line1": "14 Bus St.",
"address_line2": "",
"zip_code": "123456",
"city": "Atlanta",
"state": "GA",
"country": "US",
"phone_number": "1234567890"
}
const SHIPPING_ADDRESS = {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
};
const PAYMENT_METHOD = {
"expiration_month": 9,
"expiration_year": 9999,
"name_on_card": "Jack Sparrow",
"number": "0000000000000000",
"security_code": "555",
"use_gift": true
};
const ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
"products": [
{
"product_id": PRODUCT_ID,
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": MAX_PRICE,
"prime": true
}
}
],
"shipping_address": SHIPPING_ADDRESS,
"shipping_method": "free",
"billing_address": BILLING_ADDRESS,
"payment_method": PAYMENT_METHOD,
"is_gift": true,
"gift_message": "Thank you so much!",
"max_price": MAX_PRICE,
}
require('request')({
url: 'https://core.easync.io/api/v1/orders',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon';
PRODUCT_ID = 'B01K7C0CSA'; # Amazon US
# PRODUCT_ID = 'B01BRC1ZYE'; # Amazon DE
# PRODUCT_ID = 'B00V6C5Z0Q'; # Amazon UK
# PRODUCT_ID = 'B010S9M3L6'; # Amazon ES
# PRODUCT_ID = 'B019HC54WU'; # Amazon FR
# PRODUCT_ID = 'B019HC54WU'; # Amazon CA
# PRODUCT_ID = 'B007PNGRPC'; # Amazon IT
MAX_PRICE = 30000;
RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
BILLING_ADDRESS = {
"first_name": "John",
"last_name": "Smith",
"address_line1": "14 Bus St.",
"address_line2": "",
"zip_code": "123456",
"city": "Atlanta",
"state": "GA",
"country": "US",
"phone_number": "1234567890"
}
SHIPPING_ADDRESS = {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
};
PAYMENT_METHOD = {
"expiration_month": 9,
"expiration_year": 9999,
"name_on_card": "Jack Sparrow",
"number": "0000000000000000",
"security_code": "555",
"use_gift": true
};
ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
"products": [
{
"product_id": PRODUCT_ID,
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": MAX_PRICE,
"prime": true
}
}
],
"shipping_address": SHIPPING_ADDRESS,
"shipping_method": "free",
"billing_address": BILLING_ADDRESS,
"payment_method": PAYMENT_METHOD,
"is_gift": true,
"gift_message": "Thank you so much!",
"max_price": MAX_PRICE,
}
print requests.post(
"https://core.easync.io/api/v1/orders",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example create an FBE order request
curl "http://core.easync.io/api/v1/orders" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"products": [
{
"product_id": "B01K7C0CSA",
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": 15000,
"prime": true
}
}
],
"max_price": 2300,
"shipping_address": {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
},
"is_gift": true,
"gift_message": "Here is your package, Tim! Enjoy!",
"shipping_method": "free",
"fbe": true,
"webhooks": {
"order_placed": "http://mywebsite.com/easync/order_placed",
"order_failed": "http://mywebsite.com/easync/order_failed",
"tracking_obtained": "http://mywebsite.com/easync/tracking_obtained"
},
"client_notes": {
"our_internal_order_id": "abc123",
"any_other_field": ["any value"]
}
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const PRODUCT_ID = 'B01K7C0CSA'; //Amazon US
// const PRODUCT_ID = 'B01BRC1ZYE'; //Amazon DE
// const PRODUCT_ID = 'B00V6C5Z0Q'; //Amazon UK
// const PRODUCT_ID = 'B010S9M3L6'; //Amazon ES
// const PRODUCT_ID = 'B019HC54WU'; //Amazon FR
// const PRODUCT_ID = 'B019HC54WU'; //Amazon CA
// const PRODUCT_ID = 'B007PNGRPC'; //Amazon IT
const MAX_PRICE = 30000;
const SHIPPING_ADDRESS = {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
};
const ORDER = {
"retailer": RETAILER,
"fbe": true
"products": [
{
"product_id": PRODUCT_ID,
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": MAX_PRICE,
"prime": true
}
}
],
"shipping_address": SHIPPING_ADDRESS,
"shipping_method": "free",
"is_gift": true,
"gift_message": "Thank you so much!",
"max_price": MAX_PRICE,
}
require('request')({
url: 'https://core.easync.io/api/v1/orders',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon';
PRODUCT_ID = 'B01K7C0CSA'; # Amazon US
# PRODUCT_ID = 'B01BRC1ZYE'; # Amazon DE
# PRODUCT_ID = 'B00V6C5Z0Q'; # Amazon UK
# PRODUCT_ID = 'B010S9M3L6'; # Amazon ES
# PRODUCT_ID = 'B019HC54WU'; # Amazon FR
# PRODUCT_ID = 'B019HC54WU'; # Amazon CA
# PRODUCT_ID = 'B007PNGRPC'; # Amazon IT
MAX_PRICE = 30000;
SHIPPING_ADDRESS = {
"first_name": "Eric",
"last_name": "Walter",
"address_line1": "18 Ellie St.",
"address_line2": "",
"zip_code": "070065",
"city": "Sacramento",
"state": "CA",
"country": "US",
"phone_number": "1234567890"
};
ORDER = {
"retailer": RETAILER,
"fbe": true,
"products": [
{
"product_id": PRODUCT_ID,
"quantity": 1,
"seller_selection_criteria": {
"condition_in": [
"New"
],
"handling_days_max": 5,
"max_item_price": MAX_PRICE,
"prime": true
}
}
],
"shipping_address": SHIPPING_ADDRESS,
"shipping_method": "free",
"is_gift": true,
"gift_message": "Thank you so much!",
"max_price": MAX_PRICE,
}
print requests.post(
"https://core.easync.io/api/v1/orders",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example create an order response
{
"request_id": "66e94c40-facb-11e7-b69b-2f40a5f75e81"
}
Required attributes
Attribute | Type | Description |
---|---|---|
retailer | String | Retailer code corresponding to the supported retailers. |
products | List | A list of product objects that you have to order. |
shipping_address | Object | This is the address object where your order will be shipped. |
shipping_method | String | This is your preferred shipping method for the order. The available methods are the following: free (does not work for items that have no free shipping), fastest (enables selection of fastest option available), cheapest (enables selection of most affordable option available), free_standard (this will not use Prime benefits and takes 5 days to ship) and no_rush (slower than standard and adds a balance toward your Prime Pantry that you can use within 30 days. Goes away on business accounts), expedited (AmazonGlobal Expedited Shipping) . |
billing_address | (Not required for FBE order) Object | An address object for someone associated with credit card. |
payment_method | (Not required for FBE order) Object | A payment method that contains payment details for a certain order. |
retailer_credentials | (Not required for FBE order) Object | The retailer credentials object used to log into your retailer using a pre-existing account. |
Optional attributes
Attribute | Type | Description |
---|---|---|
gift_message | String | Message that you have to provide on the recipient’s packing slip. This should be a maximum of 240 characters (equivalent to 9 lines) only. |
is_gift | Boolean | Considers a part or all items for transaction as gifts. Retailers usually exclude the receipt price if is_gift is set. |
max_price | Number | Shows the maximum price for your order (in cents). If the final amount for your transaction exceeds this, your order will be postponed. This will eventually return max_price_exceeded error. |
webhooks | Object | A webhooks object that includes the URLs that you will receive on POST requests. You will receive these after specified events. |
client_notes | Object | Any type of metadata that you can use to keep your requests for future use. Client_notes will be passed back on the response part. |
cashback | Object | A cashback credentials that includes cashbask credentials from any of supported cashback sites (topcashback.com, givingassistant.com, befrugal.com). |
promo_codes | Array | Shows the promotion codes list that you can use upon checkout. |
ignore_invalid_promo_code | Boolean | Considered a nordstrom only. Helps you proceed with the checkout despite invalid promotion codes. Default setting is false . |
po_number | String | This is for amazon business accounts only. The attribute adds purchase order numbers to your orders. |
fbe | Boolean | Set this attribute to true for FBE order. |
bundled | Boolean | (Amazon only). If enabled, orders will be grouped together into batches and placed together. See the order bundling section for more details. |
bundle_threshold | Number | (Amazon only). Total price threshold for placing bundled orders. See the order bundling section for more details. Default 50$ for Amazon US and 30£ for Amazon UK. |
remove_shipping_addresses | Boolean | (Amazon only). The shipping address or addresses from this order will be removed from the address book of the amazon account in the event of a successful order. |
remove_shipping_addresses_all | Boolean | (Amazon only). Set this attribute to true if you want robot to delete all addresses from Amazon account's address book. |
check_emails | Array | (Amazon only). check_emails is an additional list of email addresses for finding confirmation codes sent by Amazon during login. If not specified, the email is used from the retailer credentials object. |
2fa_secret_key | String | (Amazon only). A user key for two-step verification. |
store_address | Object | This is the address object of your store (if you want this information to appear in the tracking). |
last_orders | Array | An array of last order. Pass this array if you want to place order of same product to the same shipping address from same fulfillment account again to prevent Order already placed error. |
Retrieving an order
Example retrieve an order request
curl "http://core.easync.io/api/v1/orders/3f1c939065cf58e7b9f0aea70640dffc" \
-u <client_token>:
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const REQUEST_ID = 'c78b4ac0-fac7-11e7-af7a-a3722abb32e3';
require('request')({
url: 'https://core.easync.io/api/v1/orders/' + REQUEST_ID,
method: 'GET',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64"),
},
},
(error, response, body) => {
console.log(body);
}
);
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
REQUEST_ID = '66e94c40-facb-11e7-b69b-2f40a5f75e83';
print requests.get(
"https://core.easync.io/api/v1/orders/"+REQUEST_ID,
auth=(API_TOKEN, '')
).content;
Example retrieve an order response (request processing)
{
"_type": "error",
"code": "request_processing",
"message": "Request is currently processing and will complete soon.",
"data": {}
}
To see the status of an order, you can retrieve it using the request id you obtained from your order request, and placing it in a GET request URL. Orders usually take a while to process. While your order is processing, the response will return an error with code type request_processing
.
Once the request completes, the retrieve an order response should either return a response of type order_response
or error
. An error response body will contain a code
and a message
. The code indicates the error that occurred, while the message provides a more detailed description of the error. Any extra details about the error will be provided in the data
object. For a full list of errors, see the Errors section.
Order response attributes
Example retrieve an order response (order response)
{
"_type" : "order_response",
"price_components" : {
"shipping" : 0,
"subtotal" : 2000,
"tax" : 0,
"total" : 2000
},
"merchant_order_ids" : [
{
"merchant_order_id" : "112-1234567-9898989",
"merchant" : "amazon",
"account" : "[email protected]",
"placed_at" : "2018-01-02T23:51:08.366Z"
}
],
"tracking" : [
{
"product_id" : "B01K7C0CSA",
"merchant_order_id" : "112-1234567-9898989",
"carrier" : "Fedex",
"tracking_number" : "9261290100129790891234",
"obtained_at" : "2018-01-03T23:22:48.165Z"
}
],
"request" : {
...
}
}
Attribute | Type | Description |
---|---|---|
price_components | Object | A price components object which contains details about the price of the final order |
gift_balance | Number | (Optional) Available gift balance value after placing an order. |
merchant_order_ids | Array | A merchant order ids object which contains details about the retailer’s order identifiers |
tracking | Array | An array of tracking objects that contain the order’s tracking information. In most cases, this field will not be populated immediately after the order is placed and will only be available later after tracking is updated by the retailer. Once tracking has been obtained, a POST request will be sent to the tracking_obtained field of the webhooks object from the request if set. |
request | Object | The original request that was sent to the Easync API |
Selecting shipping
Ordering on the Easync API can be complicated due to all the potential shipping options available. Generally, faster shipping will cost more money, so you must decide how fast you’d like your items or how much money to pay for shipping. Easync provides a number of options to customize your shipping speed and cost formulas.
Since different items will have different shipping options, you can use a product’s seller selection criteria to specify handling_days_max
. This will filter the list of potential offers down to those that will arrive within a certain number of days. The Easync API will then select the cheapest offer that matched all of your seller selection criteria to make a purchase. For example, if you specified "handling_days_max": 6
, then any offer whose latest delivery date is greater than 6 days from now would be excluded from your buying selection. Thus, if two sellers are offering the same product, but one has a guaranteed delivery date 10 days away and the other seller has a guaranteed delivery date 5 days away, the second seller’s offer would be selected.
You may also use the shipping parameter on an order to select a shipping option once a product has been selected. Instead of filtering by the different offers, like the seller selection criteria, the shipping
parameter will choose the shipping speed on the selected offer. For example, if you set "max_days": 5
on the shipping
parameter, the Easync API would attempt to select the cheapest shipping method that took less than 5 days. Thus, if there was a shipping method that took 3 days and cost $10 and another shipping method that took 7 days but cost $2, the first shipping option would be selected.
Order bundling
The bundling feature groups orders together before placing them. This is often advantageous on retailers where larger orders are given free shipping. To use bundling, you only need to specify bundled: true
when placing an order request. Bundling currently only works on the following retailers: amazon
, amazon_uk
, amazon_ca
, amazon_fr
, amazon_de
.
The bundling feature allows you to take advantage of free shipping over $50 (on Amazon) without having to change your Easync integration. Bundling will take the shipping addresses, products, and quantities from separate orders and will group them together into a single order, making sure that each product is routed correctly. The order requests and responses remain exactly the same. The only difference is when the order is placed. The order bundling feature will wait for enough orders in the queue before launching a bundled order. The exact dynamics are as follows:
- The order bundler will wait until $50 (or
bundle_threshold
) in products have been purchased. As soon as more than $50 of products have been queued withbundled: true
, the bundler will launch a new order. - If the order bundler has waited for longer than 6 hours and has not yet obtained $50 in products, it will launch an order with whatever products are currently in the queue.
Note that the order bundler will not group together two orders which have the same product ids.
Cancel bundled order
GET https://core.easync.io/api/v1/cancel_bundle/:order_id
Available responses:
_type | code | message | Description |
---|---|---|---|
order_response | Order removed from bundle | Successfully removed from bundle | |
error | internal_error | no_such_order | Failure: No such order |
error | internal_error | currently_on_check | Failure: Order can not be canceled, because it currently on check |
error | invalid_request | order not bundled | Failure: Order posted with order.bundled: false |
Getting order screenshots
GET https://core.easync.io/api/v1/shot/:order_id
Retrieve the screenshots of the order placement process by sending an authorized GET request to the endpoint. If screenshots are available in the system, the response will be a JSON array containing a list of image URLs in chronological order.
Get order screenshots request
curl "https://core.easync.io/api/v1/shot/<order_id>" \
-u <client_token>:
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; // See https://app.easync.io/api for details
const REQUEST_ID = 'ed33d825-5344-495a-922b-f63e7a846bfc';
require('request')({
url: 'https://core.easync.io/api/v1/shot/' + REQUEST_ID,
method: 'GET',
headers: {
'Authorization': "Basic " + Buffer.from(API_TOKEN + ":").toString("base64"),
},
},
(error, response, body) => {
console.log(body);
}
);
import requests
API_TOKEN = '00000000-0000-0000-0000-000000000000'; # See https://app.easync.io/api for details
REQUEST_ID = '4339e696-776a-44ef-82da-281bb06e1cb5';
response = requests.get(
"https://core.easync.io/api/v1/shot/" + REQUEST_ID,
auth=(API_TOKEN, '')
)
print(response.content)
Example order screenshots response
[
"https://logstorage.amzdrop.com/img/458f3a4c-963b-4f6e-af47-8aea24097a17-cb540ded-cc9b-4c68-a53d-2777ca96f4ca.jpg",
"https://logstorage.amzdrop.com/img/b26200af-20c1-4c92-85b0-34cc93dab12c-4bf01e73-f900-4b37-996e-c5ccacc465c3.jpg",
"https://logstorage.amzdrop.com/img/10513e41-ecbc-43d9-bbdc-4a9682977261-6abe1ef0-076c-4041-a223-12ae9b8b33bf.jpg"
]
Get order tracking
Example order tracking request
curl "https://core.easync.io/api/v1/tracking/000007d0-ae0d-11e8-baff-49805dc0f7a2" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json"
Get up to date information on carrier and tracking history of your order.
To retrieve this information make a GET request to the following URL, with Authorization and Content-Type: application/json headers.
https://core.easync.io/api/v1/tracking/:order_request_id
Required tracking request attributes
Attribute | Type | Description |
---|---|---|
order_request_id | String | The request id you obtained from your order request |
Response details attributes
Result of your request is JSON object with tracking information.
Example success order tracking response
{
"type": "success",
"result": {
"obtained": true,
"tracking": {
"carrier": "Amazon",
"tracking_number": "Q00000000000",
"merchant_order_id": "205-000000-0500000",
"url": "https://www.amazon.co.uk/progress-tracker/package/ref=oh_aui_hz_st_btn?_encoding=UTF8&itemId=qiqgmqqlmjbbb&orderId=205-000000-0500000",
"tracker_progress": [
{
"date": "Friday, 2 November",
"time": "6:35 PM",
"message": "Delivered",
"location": "Liverpool, GB",
"status": "delivered"
},
{
"date": "Friday, 2 November",
"time": "6:01 PM",
"message": "Out for delivery",
"location": "Liverpool, GB",
"status": "shipping"
},
{
"date": "Friday, 2 November",
"time": "2:55 PM",
"message": "Package arrived at the final delivery station",
"location": "Liverpool, GB",
"status": "shipping"
},
{
"date": "Friday, 2 November",
"time": "",
"message": "Package has shipped",
"location": "",
"status": "shipping"
}
],
"arriving_date": false,
"obtained_at": "2019-02-21T17:38:23.000Z",
"aquiline": "AQUAA7149921320YQ",
"bluecare": "BCEQQ0304502310YQ"
}
}
}
If the request is successfull and tracking was obtained, the response includes type: success
and result.obtained: true
fields.
Attribute | Type | Description |
---|---|---|
type | Boolean | Type of core.easync.io response. |
result | Object | Response data object |
result.obtained | Boolean | Indicates that tracking was obtained by source market |
result.tracking | Object | Tracking details object |
result.tracking.carrier | String | Source market carrier |
result.tracking.tracking_number | String | Source market tracking number |
result.tracking.merchant_order_id | String | Source market order number |
result.tracking.url | String | Url of order tracking page on source market |
result.tracking.tracker_progress | Array | Array of parsed package delivery stages that displays on source market tracking page |
result.tracking.arriving_date | String | Estimated delivery date or false |
result.tracking.obtained_at | String | Date and time of assigning tracking number or false |
result.tracking.aquiline | String | Aquiline® tracking reference (if available) |
result.tracking.bluecare | String | Bluecare Express® tracking reference (if available) |
Otherwise response contains type: failure
and result.obtained: false
fields.
Example failure order tracking response
{
"type": "failure",
"result": {
"obtained": "false"
}
}
Cancel an order
Example cancel an order request
curl "http://core.easync.io/api/v1/cancels" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"retailer_order_id": "000-0000000-0000000",
"retailer_credentials": {
"email": "[email protected]",
"password": "123456"
}
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const RETAILER_ORDER_ID = '000-0000000-0000000';
const RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
const ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
}
require('request')({
url: 'https://core.easync.io/api/v1/cancels',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon';
RETAILER_ORDER_ID = '000-0000000-0000000'
RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
"retailer_order_id": RETAILER_ORDER_ID
}
print requests.post(
"https://core.easync.io/api/v1/cancels",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example cancel an FBE order request
curl "http://core.easync.io/api/v1/cancels" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"fbe": true
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const RETAILER_ORDER_ID = '000-0000000-0000000';
const ORDER = {
"retailer": RETAILER,
"retailer_order_id": RETAILER_ORDER_ID,
"fbe": true,
}
require('request')({
url: 'https://core.easync.io/api/v1/cancels',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon'
RETAILER_ORDER_ID = '000-0000000-0000000'
ORDER = {
"retailer": RETAILER,
"retailer_order_id": RETAILER_ORDER_ID,
"fbe": true,
}
print requests.post(
"https://core.easync.io/api/v1/cancels",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example cancel an order response
{
"request_id": "66e94c40-facb-11e7-b69b-2f40a5f75e81"
}
Required attributes
Attribute | Type | Description |
---|---|---|
retailer | String | Retailer code corresponding to the supported retailers. |
retailer_order_id | String | Retailer order id. |
retailer_credentials | (Not required for FBE order) Object | The retailer credentials object used to log into your retailer using a pre-existing account. |
Retrieving cancel an order
Example retrieve cancel an order request
curl "http://core.easync.io/api/v1/cancels/3f1c939065cf58e7b9f0aea70640dffc" \
-u <client_token>:
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const REQUEST_ID = 'c78b4ac0-fac7-11e7-af7a-a3722abb32e3';
require('request')({
url: 'https://core.easync.io/api/v1/cancels/'+REQUEST_ID,
method: 'GET',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64"),
},
},
(error, response, body) => {
console.log(body);
}
);
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
REQUEST_ID = '66e94c40-facb-11e7-b69b-2f40a5f75e83';
print requests.get(
"https://core.easync.io/api/v1/cancels/"+REQUEST_ID,
auth=(API_TOKEN, '')
).content;
Example retrieve cancel an order response (request processing)
{
"_type": "error",
"code": "request_processing",
"message": "Request is currently processing and will complete soon.",
"data": {}
}
To see the status of cancel an order, you can retrieve it using the request id you obtained from your order request, and placing it in a GET request URL. While your cancel an order is processing, the response will return an error with code type request_processing
.
Once the request completes, the retrieve an order response should either return a response of type order_response
or error
. An error response body will contain a code
and a message
. The code indicates the error that occurred, while the message provides a more detailed description of the error. Any extra details about the error will be provided in the data
object. For a full list of errors, see the Errors section.
Cancel order response attributes
Example retrieve cancel an order response
{
"_type" : "cancel_response",
"status": "success",
"message": "This order has been cancelled.",
"request" : {
...
}
}
Attribute | Type | Description |
---|---|---|
message | String | Result message about cancel an order |
status | String | Result status cancel an order |
Return an order
Example return an order request
curl "http://core.easync.io/api/v1/returns" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"retailer_order_id": "000-0000000-0000000",
"retailer_credentials": {
"email": "[email protected]",
"password": "123456"
}
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const RETAILER_ORDER_ID = '000-0000000-0000000';
const RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
const ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
}
require('request')({
url: 'https://core.easync.io/api/v1/returns',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon';
RETAILER_ORDER_ID = '000-0000000-0000000'
RETAILER_CREDENTIALS = {
"email": '[email protected]',
"password": '123456'
}
ORDER = {
"retailer": RETAILER,
"retailer_credentials": RETAILER_CREDENTIALS,
"retailer_order_id": RETAILER_ORDER_ID
}
print requests.post(
"https://core.easync.io/api/v1/returns",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example return an FBE order request
curl "http://core.easync.io/api/v1/returns" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon",
"fbe": true
}'
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const RETAILER = 'amazon';
const RETAILER_ORDER_ID = '000-0000000-0000000';
const ORDER = {
"retailer": RETAILER,
"retailer_order_id": RETAILER_ORDER_ID,
"fbe": true,
}
require('request')({
url: 'https://core.easync.io/api/v1/returns',
method: 'POST',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64")
},
json: ORDER
},
(error, response, body) => {
console.log(body);
}
);
import requests
import json
true = True
false = False
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
RETAILER = 'amazon'
RETAILER_ORDER_ID = '000-0000000-0000000'
ORDER = {
"retailer": RETAILER,
"retailer_order_id": RETAILER_ORDER_ID,
"fbe": true,
}
print requests.post(
"https://core.easync.io/api/v1/returns",
auth=(API_TOKEN, ''),
json=ORDER
).content;
Example return an order response
{
"request_id": "66e94c40-facb-11e7-b69b-2f40a5f75e81"
}
Required attributes
Attribute | Type | Description |
---|---|---|
retailer | String | Retailer code corresponding to the supported retailers. |
retailer_order_id | String | Retailer order id. |
retailer_credentials | (Not required for FBE order) Object | The retailer credentials object used to log into your retailer using a pre-existing account. |
Retrieving return an order
Example retrieve return an order request
curl "http://core.easync.io/api/v1/returns/3f1c939065cf58e7b9f0aea70640dffc" \
-u <client_token>:
const API_TOKEN = '00000000-0000-0000-0000-000000000000'; //SEE https://app.easync.io/api for details
const REQUEST_ID = 'c78b4ac0-fac7-11e7-af7a-a3722abb32e3';
require('request')({
url: 'https://core.easync.io/api/v1/returns/'+REQUEST_ID,
method: 'GET',
headers: {
'Authorization': "Basic " + new Buffer(API_TOKEN + ":").toString("base64"),
},
},
(error, response, body) => {
console.log(body);
}
);
API_TOKEN = '00000000-0000-0000-0000-000000000000'; #SEE https://app.easync.io/api for details
REQUEST_ID = '66e94c40-facb-11e7-b69b-2f40a5f75e83';
print requests.get(
"https://core.easync.io/api/v1/returns/"+REQUEST_ID,
auth=(API_TOKEN, '')
).content;
Example retrieve return an order response (request processing)
{
"_type": "error",
"code": "request_processing",
"message": "Request is currently processing and will complete soon.",
"data": {}
}
To see the status of return an order, you can retrieve it using the request id you obtained from your order request, and placing it in a GET request URL. Return an orders usually take a while to process. While your order is processing, the response will return an error with code type request_processing
.
Once the request completes, the retrieve return an order response should either return a response of type order_response
or error
. An error response body will contain a code
and a message
. The code indicates the error that occurred, while the message provides a more detailed description of the error. Any extra details about the error will be provided in the data
object. For a full list of errors, see the Errors section.
Return order response attributes
Example retrieve return an order response
{
"_type" : "return_response",
"status": "success",
"image_url": "http://bars1.dev.easync.io/image/113-4863325-9281018.gif",
"request" : {
...
}
}
Attribute | Type | Description |
---|---|---|
status | String | Result status return an order |
image_url | String | Image url of return label |
Get product details
Example product details request
curl "https://core.easync.io/api/v1/products" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
{
"retailer": ": retailer",
"product_ids": [": product_id"],
"webhooks": {
"success": "XXX",
"failure": "XXX"
}
}
}'
Get up to date information on the title, description, manufacturer details, item specifics, and more for any product on our supported retailers.
To retrieve product details, make a POST request to the following URL, with Content-Type: application/json headers and body.
https://core.easync.io/api/v1/products
if the request is successfully sent, the response will be: { "request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" }
Required details request attributes
Attribute | Type | Description |
---|---|---|
retailer | String | The retailer for the product |
product_ids | Array | Array of product ids |
Optional details request attributes
Attribute | Type | Description |
---|---|---|
webhooks | Object | URLs for success or failed webhooks |
Response details attributes
To upload the result, send the GET request with the request_id received above to https://core.easync.io/api/v1/products/:request_id
Example product details response
{
"request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"request": {
"retailer": "amazon",
"product_ids": [
"B01DFKC2SO",
],
"webhooks": {
"success": "http://XXXX.ngrok.io/api/product/import/success",
"failure": "http://XXXX.ngrok.io/api/product/import/failure"
}
},
"result": [
{
"product_id": "B01DFKC2SO",
"result": {
"productOptions": {
"title": "Echo Dot (2nd Generation) - Smart speaker with Alexa - Black",
"imagesSrcs": [
"https://images-na.ssl-images-amazon.com/images/I/61qaMh0rSIL._SL1000_.jpg",
"https://images-na.ssl-images-amazon.com/images/I/61ikAJnULvL._SL1000_.jpg",
"https://images-na.ssl-images-amazon.com/images/I/61RrCPRq7mL._SL1000_.jpg",
"https://images-na.ssl-images-amazon.com/images/I/71WJE9YHjaL._SL1000_.jpg",
"https://images-na.ssl-images-amazon.com/images/I/61TJXt9UdGL._SL1000_.jpg",
"https://images-na.ssl-images-amazon.com/images/I/71-oquug6dL._SL1000_.jpg"
],
"featureBullets": [
"Echo Dot (2nd Generation) is a hands-free, voice-controlled device that uses Alexa to play music, control smart home devices, make calls, send and receive messages, provide information, read the news, set music alarms, read audiobooks from Audible, control Amazon Video on Fire TV, and more",
"Connects to speakers or headphones through Bluetooth or 3.5 mm stereo cable to play music from Amazon Music, Spotify, Pandora, iHeartRadio, and TuneIn. Play music simultaneously across Echo devices and speakers connected via cable with multi-room music.",
"Call or message almost anyone hands-free with your Echo device. Also, instantly connect to other Echo devices in your home using just your voice.",
"Controls lights, fans, TVs, switches, thermostats, garage doors, sprinklers, locks, and more with compatible connected devices from WeMo, Philips Hue, Sony, Samsung SmartThings, Nest, and others",
"Hears you from across the room with 7 far-field microphones for hands-free control, even in noisy environments or while playing music",
"Includes a built-in speaker so it can work on its own as a smart alarm clock in the bedroom, an assistant in the kitchen, or anywhere you might want a voice-controlled computer. Adjust the treble, mid, and bass levels with your voice.",
"Always getting smarter and adding new features, plus thousands of skills like Uber, Domino's, DISH, and more"
],
"productDetails": [],
"itemSpecifics": [],
"productId": "B01DFKC2SO",
"variants": [
{
"name": "configuration",
"value": "Echo Dot"
},
{
"name": "color",
"value": "Black"
}
],
"productDescription": "",
"dimension": {
"all": "__unknown__"
},
"weight": {
"item": "__unknown__",
"shipping": "__unknown__"
},
"brand": "Amazon",
"color": "Black",
"variantsIds": [
"B07D7RLM38",
"B079Z2XLCG",
"B079YZ5J5Q",
"B01DFKC2SO",
"B07D779FSL",
"B015TJD0Y4"
],
"upc": 841667112640,
"ean": 841667112640,
"offers": [
{
"addon": false,
"buyBoxWinner": false,
"international": false,
"prime": true,
"primeOnly": false,
"condition": "Used",
"handlingDaysMax": 1,
"handlingDaysMin": 0,
"merchantId": -1,
"offerListingId": "stub",
"price": {
"amount": 3151,
"currency": "USD"
},
"sellerName": "Amazon.us",
"sellerNumRatings": -1,
"sellerPercentPositive": "70-79%",
"shipPrice": {
"amount": 0,
"currency": "USD"
},
"available": true,
"offerNumber": 1,
"quantity": -1
},
{
"addon": false,
"buyBoxWinner": false,
"international": false,
"prime": true,
"primeOnly": false,
"condition": "Used",
"handlingDaysMax": 1,
"handlingDaysMin": 0,
"merchantId": -1,
"offerListingId": "stub",
"price": {
"amount": 3299,
"currency": "USD"
},
"sellerName": "Amazon.us",
"sellerNumRatings": -1,
"sellerPercentPositive": "70-79%",
"shipPrice": {
"amount": 0,
"currency": "USD"
},
"available": true,
"offerNumber": 2,
"quantity": -1
},
{
"addon": false,
"buyBoxWinner": false,
"international": false,
"prime": true,
"primeOnly": false,
"condition": "New",
"handlingDaysMax": 1,
"handlingDaysMin": 0,
"merchantId": -1,
"offerListingId": "stub",
"price": {
"amount": 4999,
"currency": "USD"
},
"sellerName": "Amazon.us",
"sellerNumRatings": -1,
"sellerPercentPositive": "98-100%",
"shipPrice": {
"amount": 0,
"currency": "USD"
},
"available": true,
"offerNumber": 3,
"quantity": -1
}
]
}
}
}
]
}
Get product prices
Example product prices request
curl "https://core.easync.io/api/v1/offers" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
{
"retailer": ": retailer",
"product_ids": [": product_id"],
"webhooks": {
"success": "XXX",
"failure": "XXX"
}
}
}'
Get information about all the offers for a particular product, including seller name, item price, shipping price, condition, seller reputation, and more.
To retrieve product offers, make a POST request to the following URL, with Content-Type: application/json headers and body.
https://core.easync.io/api/v1/offers
if the request is successfully sent, the response will be: { "request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" }
Required prices request attributes
Attribute | Type | Description |
---|---|---|
retailer | String | The retailer for the product |
product_ids | Array | The retailer for the product |
Optional prices request attributes
Attribute | Type | Description |
---|---|---|
webhooks | Object | URLs for success or failed webhooks |
Response prices attributes
To upload the result, send the GET request with the request_id received above to https://core.easync.io/api/v1/offers/:request_id
Example product offers response
{
"request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"request": {
"retailer": "amazon",
"product_ids": [
"B0753GRNQZ"
],
"webhooks": {
"success": "http://XXX.ngrok.io/api/product/prices/success",
"failure": "http://XXX.ngrok.io/api/product/prices/failure"
}
},
"result": [
{
"product_id": "B0753GRNQZ",
"result": {
"offers": [
{
"addon": false,
"buyBoxWinner": false,
"international": false,
"prime": true,
"primeOnly": false,
"condition": "New",
"handlingDaysMax": 1,
"handlingDaysMin": 0,
"merchantId": "A1E57UY6AMKO25",
"offerListingId": "stub",
"price": {
"amount": 1998,
"currency": "USD"
},
"sellerName": "Patozon",
"sellerNumRatings": 172153,
"sellerPercentPositive": 99,
"shipPrice": {
"amount": 0,
"currency": "USD"
},
"available": true,
"offerNumber": 1
}
]
}
}
]
}
Account balance
Example account gift-card balance request
curl "https://core.easync.io/api/v1/gift_balance" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"2fa_secret_key": "518B 61E2 C08C 47C7 A3D0 D200 3463",
"billing_address": {
"address_line1": "14 Bus St.",
"address_line2": "",
"city": "Atlanta",
"country": "US",
"first_name": "John",
"last_name": "Smith",
"phone_number": "1234567890",
"state": "GA",
"zip_code": "123456"
},
"check_emails": [
"[email protected]"
],
"client_notes": {
"some_extra_info": "XXX"
},
"retailer": "amazon_uk",
"retailer_credentials": {
"email": "[email protected]",
"password": "secret"
},
"webhooks": {
"failure": "http://mysite.com/gc_failure",
"success": "http://mysite.com/gc_success"
},
"gift_code": "AQXX-XXXX-XXX"
}'
Get information about gift card (GC) balance of Amazon accounts or apply gift card codes to them.
To retrieve balance or apply gift code, make a POST request to the following URL, with Content-Type: application/json headers and body.
https://core.easync.io/api/v1/gift_balance
if the request is successfully sent, the response will be: { "request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" }
Required gift-card balance request attributes
Attribute | Type | Description |
---|---|---|
retailer | String | Retailer code corresponding to the supported retailers. |
billing_address | Object | An address object for someone associated with credit card. |
retailer_credentials | Object | The retailer credentials object used to log into your retailer using a pre-existing account. |
Optional gift-card balance request attributes
Attribute | Type | Description |
---|---|---|
webhooks | Object | A webhooks object that includes the URLs that you will receive on POST requests. You will receive these after specified events. |
client_notes | Object | Any type of metadata that you can use to keep your requests for future use. Client_notes will be passed back on the response part. |
check_emails | Array | (Amazon only). check_emails is an additional list of email addresses for finding confirmation codes sent by Amazon during login. If not specified, the email is used from the retailer credentials object. |
2fa_secret_key | String | (Amazon only). A user key for two-step verification. |
gift_code | String | (Amazon only). If present, this code will be applied to Amazon account that specified in the retailer credentials object. |
Response gift-card balance attributes
To upload the result, send the GET request with the request_id received above to https://core.easync.io/api/v1/gift_balance/:request_id
Example gift-card balance success response
{
"result": {
"balance": 13808
},
"request": {
"2fa_secret_key": "518B 61E2 C08C 47C7 A3D0 D200 3463",
"billing_address": {
"address_line1": "14 Bus St.",
"address_line2": "",
"city": "Atlanta",
"country": "US",
"first_name": "John",
"last_name": "Smith",
"phone_number": "1234567890",
"state": "GA",
"zip_code": "123456"
},
"check_emails": [
"[email protected]"
],
"client_notes": {
"some_extra_info": "XXX"
},
"retailer": "amazon_uk",
"retailer_credentials": {
"email": "[email protected]",
"password": "secret"
},
"webhooks": {
"failure": "http://mysite.com/gc_failure",
"success": "http://mysite.com/gc_success"
}
},
"request_id": "12345-my-request-id"
}
Example gift-card balance failure response
{
"result": {
"_type": "error",
"code": "wrong_responsed_activation",
"message": "Gift card claim code is invalid!"
},
"request": {
"2fa_secret_key": "518B 61E2 C08C 47C7 A3D0 D200 3463",
"billing_address": {
"address_line1": "14 Bus St.",
"address_line2": "",
"city": "Atlanta",
"country": "US",
"first_name": "John",
"last_name": "Smith",
"phone_number": "1234567890",
"state": "GA",
"zip_code": "123456"
},
"check_emails": [
"[email protected]"
],
"client_notes": {
"some_extra_info": "XXX"
},
"gift_code": "AQXX-XXXX-XXX",
"retailer": "amazon_uk",
"retailer_credentials": {
"email": "[email protected]",
"password": "secret"
},
"webhooks": {
"failure": "http://mysite.com/gc_failure",
"success": "http://mysite.com/gc_success"
}
},
"request_id": "12345-my-request-id"
}
{ "status": "success", "data": { "amount": 3296, "currency": "USD", "reservedAmount": 1877 } }
FBE® balance
Example fbe balance request
curl "https://core.easync.io/api/v1/fbe_balance/USD" \
-u "<API_TOKEN>":
Get information about your Easync FBE balance.
To retrieve this information, make a GET request to the following URL.
https://core.easync.io/api/v1/fbe_balance/:CURRENCY
Response example
{
"status": "success",
"data": {
"amount": 0,
"currency": "USD",
"reservedAmount": 0
}
}
See authentication section to find your api token.
Required FBE balance request attributes
Attribute | Type | Description |
---|---|---|
currency | String | Currency code. Available currencies: USD, EUR, CAD, GBP. |
Response FBE balance attributes
Attribute | Type | Description |
---|---|---|
status | String | Response status |
status.data.amount | Number | Amount of your FBE balance |
status.data.currency | String | Request currency code |
status.data.reservedAmount | Number | Reserved amount of your fbe balance. In case you currently have FBE orders with "request_processing" status. |
Object reference
Product object
Example product object
{
"product_id": "0923568964",
"quantity": 1,
"seller_selection_criteria": {
"prime": true,
"handling_days_max": 6,
"condition_in": ["New"],
}
}
Attribute | Type | Description |
---|---|---|
product_id | String | The retailer’s unique identifier for the product. Note that Easync does not support digital purchases or Amazon prime pantry items. |
quantity | Number | The number of products to purchase. |
seller_selection_criteria | Object | A seller selection criteria object containing information about which offers to choose when there are multiple offers available. If the seller selection criteria object is not included for a product, the seller selection criteria will default to "prime": true , "handling_days_max": 6 , and "condition_in": ["New"] . |
Seller selection criteria object
Example seller selection criteria object
{
"addon": false,
"condition_in": ["New", "Used - Like New", "Refurbished", "Collectible - Like New"],
"handling_days_max": 6,
"max_item_price": 5350,
"min_seller_num_ratings": 100,
"prime": true,
}
Seller selection criteria allow you to filter multiple offers for a product from a retailer. They give you fine grained control when a retailer has multiple offers for a single product. This happens frequently when third party or affiliated merchants are selling on a platform, such as o Amazon.
The seller selection criteria serve as a series of optional filters to narrow down the potential set of offers to something reasonable. After all the filters have been applied, Easync will select the cheapest offer that is still available. For example, if "handling_days_max": 6
is applied, then the Easync API will order the cheapest offer where the shipping will arrive in 6 days or less.
Attribute | Type | Description |
---|---|---|
addon | Boolean | Addon is for Amazon as well. This specifies if chosen offer must be add-on item. |
buy_box | Boolean | This is for Amazon. This specifies if chosen offer must be the default offer |
condition_in | Array | An array of item conditions that the Easync API must order from |
condition_not_in | Array | An array of item conditions that the Easync API must not order from |
first_party_seller | Boolean | This is the one that determines if the seller is first-party |
handling_days_max | Number | Pertains to the highest number of days for shipping and handling |
international | Boolean | Specifies if the item is from an international supplier |
max_item_price | Number | The maximum allowable price in cents for an item |
merchant_id_in | Array | An array of merchant ids that the Easync API must order from |
merchant_id_not_in | Array | An array of merchant ids that the Easync API must not order from |
min_seller_num_ratings | Number | (Amazon only) The minimum number of ratings required for an Amazon seller’s offer to be selected |
min_seller_percent_positive_feedback | Number | (Amazon only) The minimum percentage of positive ratings of an Amazon seller for their offer to be selected |
prime | Boolean | (Amazon only) Specifies whether the selected offer should be an Amazon Prime offer |
Address object
Example address object
{
"first_name": "Tim",
"last_name": "Beaver",
"address_line1": "77 Massachusetts Avenue",
"address_line2": "",
"zip_code": "02139",
"city": "Cambridge",
"state": "MA",
"country": "US",
"phone_number": "5551230101"
}
Attribute | Type | Description |
---|---|---|
first_name | String | The first name of the addressee |
last_name | String | The last name of the addressee |
address_line1 | String | The house number and street name |
address_line2 | String | The suite, post office box, or apartment number (optional) |
zip_code | String | The zip code of the address |
city | String | The city of the address |
state | String | The USPS abbreviation for the state of the address (e.g. AK) |
country | String | The ISO abbreviation for the country of the address (e.g. US). A list of all available two-letter country codes can be found here. |
phone_number | String | The phone number associated with the address |
Payment method object
Example payment object
{
"name_on_card": "Ben Bitdiddle",
"number": "5555555555554444",
"security_code": "123",
"expiration_month": 1,
"expiration_year": 2015,
"use_gift": false
}
Recommended means to pay for items is through credited gift card balance. These cards are supported in walmart
, amazon_ca
, amazon_uk
, and amazon_us
. To use credit card, you have to fill in the required details regardless of the platform used. To use the existing gift balance on the account, simply pass {"use_gift": true}
as the payment_method
object.
To use a credit card, you must include the name_on_card
, number
, security_code
, expiration_month
, and expiration_year
fields. For Amazon, you should only have a single credit card associated with an account which should be the same as the card passed in the payment method object. This allows the system to correctly answer any payment-related security questions.
Attribute | Type | Description |
---|---|---|
name_on_card | String | The full name on the credit/debit card |
number | String | The credit/debit card number |
security_code | String | The card verification value on the back of the credit/debit card |
expiration_month | Number | The month of the expiration of the card (e.g. January is 1, February is 2) |
expiration_year | Number | The year of the expiration of the card (e.g. 2016) |
use_gift | Boolean | Whether or not to use the gift balance on the retailer account. If true, then the gift balance will be used for payment. Only works for retailers which support gift balance. |
Webhooks object
Example webhooks object
{
"order_placed": "http://mywebsite.com/easync/order_placed",
"order_failed": "http://mywebsite.com/easync/order_failed",
"tracking_obtained": "http://mywebsite.com/easync/tracking_obtained",
"status_updated": "http://mywebsite.com/easync/status_updated"
}
Webhooks let you register a URL that the Easync API notifies whenever an event happens pertaining to your account. When an event occurs, we will send a POST
request to the URL specified in the webhooks object. If no URL was specified, then a webhook will not be sent. The body of the POST
request is the standard raw JSON response for that object.
As an example, let’s say you have just created an order via the Easync API. Every time the order status changes, a POST
request will be sent to the URL that you passed in the status_updated
parameter of the webhooks object. The body will mimic the response received from the standard GET http://core.easync.io/api/v1/orders/<request_id>
request. A webhook will also be sent if order fails, gets placed, or if tracking gets updated.
Attribute | Type | Description |
---|---|---|
order_placed | String | The webhook URL to send data to when an order is placed |
order_failed | String | The webhook URL to send data to when an order fails |
tracking_obtained | String | The webhook URL to send data to when tracking for an order is retrieved |
status_updated | String | The webhook URL to send data to when the status of a request is updated |
Last order object
Example last order object
{
"first_name": "Harry",
"last_name": "Vice",
"order": "MY_INTERNAL_ORDER_ID",
"product_id": "B07KJZPPLR"
}
This option allows you to pass duplicate orders check in case you need to order same product to the same shipping address from same fulfillment account.
Attribute | Type | Description |
---|---|---|
first_name | String | Shipping address first name from order placed earlier |
last_name | String | Shipping address last name from order placed earlier |
order | String | Your system internal order id. Can be markets merchant order id |
product_id | String | Product id from from order placed earlier |
Retailer credentials object
Example retailer credentials object
{
"email": "[email protected]",
"password": "myRetailerPassword"
}
Cashback credentials object
Example cashback credentials object
{
"topcashback": {
"email": "[email protected]",
"password": "myTopCashbackComPassword"
},
"befrugal": {
"email": "[email protected]",
"password": "myBefrugalComPassword"
},
"givingassistant": {
"email": "[email protected]",
"password": "myGivingassistantComPassword"
},
}
Attribute | Type | Description |
---|---|---|
String | The email for the retailer account | |
password | String | The password for the retailer account |
Price components object
Example price components object
{
"shipping" : 0,
"subtotal" : 1999,
"tax" : 0,
"total" : 1999
}
Attribute | Type | Description |
---|---|---|
shipping | Number | The price for shipping |
subtotal | Number | The total price of the order before tax and other price adjustments |
tax | Number | The tax collected on the order |
total | Number | The total price paid for the order |
gift_certificate | Number | (Optional) The amount of value used on a gift certificate placed on the account |
Merchant order ids object
Example merchant order ids object
{
"merchant_order_id" : "112-1234567-7272727",
"merchant" : "amazon",
"account" : "[email protected]",
"placed_at" : "2014-07-02T23:51:08.366Z"
}
Attribute | Type | Description |
---|---|---|
merchant_order_id | String | The identifier provided by the retailer for the order that was placed |
merchant | String | The retailer on which the order was placed |
account | String | The account on which the order was placed |
placed_at | Date | The date and time at which the order was placed |
Product offer object
Example product offer object
{
"addon": false,
"condition": "New",
"handling_days_max": 0,
"handling_days_min": 0,
"international": false,
"merchant_id": "ATVPDKIKX0DER",
"offerlisting_id": "lUai8vEbhC%2F2vYZDwaePlc4baWiHzAy9XJncUR%2FpQ9l4VOrs%2FfpYt4ZtreQaB%2BPL1xJwz5OpIc%2BJjyymHg3iv4YkZvWy5z7flil7n7lUDWNPY76YUhMNdw%3D%3D",
"price": 9.79,
"ship_price": 0,
"prime": true,
"prime_only": false,
"seller_name": "Amazon.com",
"seller_num_ratings": 1000000,
"seller_percent_positive": 100
}
Attribute | Type | Description |
---|---|---|
addon | Boolean | Whether or not the product is an addon item that can only be purchased in a bundle |
condition | String | The condition of the product. Possible values are New , Refurbished , Used - Like New , Used - Very Good , Used - Good , Used - Acceptable , Unacceptable , Used - Like New , Refurbished , Used - Very Good , Used - Good , Used - Acceptable , Unacceptable , Collectible - Like New , Collectible - Very Good , Collectible - Good , Collectible - Acceptable |
handling_days_max | Number | The maximum number of days required for shipping and handling |
handling_days_min | Number | The minimum number of days required for shipping and handling |
international | Boolean | Whether or not the product ships from outside of the United States |
merchant_id | String | The merchant’s unique identifier for the product |
offerlisting_id | String | (amazon and amazon_uk only). The unique identifier that identifies an item sold by any merchant on Amazon |
price | Number | The price of the item, not including shipping |
ship_price | Number | The price of the shipping for the item |
prime | Boolean | (amazon and amazon_uk only). Whether or not the product ships using Amazon Prime |
prime_only | Boolean | (amazon and amazon_uk only). Whether or not the product only ships using Amazon Prime |
seller_name | String | The name of the seller of the current offer |
seller_num_ratings | Number | The number of ratings that the seller has accumulated |
seller_percent_positive | Number | Number between 0 and 100 denoting the percentage of positive ratings the seller has received |
Tracking object
Example tracking object
{
"merchant_order_id": "112-1234567-7272727",
"carrier": "UPS",
"tracking_number": "1Z9999999999999999",
"tracking_url": "http://some-url.com/tracking-number/1Z9999999999999999",
"product_id": "0923568964"
}
Attribute | Type | Description |
---|---|---|
merchant_order_id | String | The corresponding order identifier for which tracking was obtained. |
carrier | String | (Optional) The logistics carrier that was used to ship the package. |
tracking_number | String | (Optional) The tracking number from the logistics carrier. |
tracking_url | String | (Optional) The tracking url that can be used to find the carrier and tracking number for a package. |
product_id | String | (Optional) The corresponding product for which tracking was obtained. |
Errors
Example error response
{
"_type": "error",
"code": "product_unavailable",
"message": "One of the products you selected is unavailable.",
"data": {'product_id': '018293801'}
}
If there is a problem in request processing, the endpoint will most likely return with an error object that has the three main fields: data
, message
, and code
.
The code
field can provide a short but unique code that describes the situation of the error. The message
field gives a type of human-readable that describes the error. This is meant for developers, not the end users. On the other hand, the data
field has the specific pieces of information related to the error.
The Easync API uses the following errors:
Error Code | Meaning |
---|---|
account_login_failed | We were unable to log in to the retailer with the username and password you provided. |
add_on_item | Add-on items cannot be ordered individually. |
additional_information_required | The retailer asked for additional account verification questions. If using the API, please add a field ‘phone_number’ in the billing address that matches your billing telephone number. |
billing_address_refused | The billing address you provided was refused by the retailer. |
brand_not_accepted | Your credit card brand is not accepted with this merchant. |
credit_card_declined | The credit card you entered was declined. |
duplicate_order | This order is a duplicate. |
expired_product_id | The product_id you used is no longer supported by the retailer. |
incomplete_account_setup | You attempted to place an order with an account that has not been fully set up. |
insufficient_variants | You did not select all required variants for a product. |
internal_error | Easync or the retailer you requested is experiencing outages. Please try again or contact [email protected] if this error persists. |
invalid_card_number | The credit card number you entered is not valid. |
invalid_client_token | Your client token is invalid. |
invalid_expiration_date | The expiration date on your credit card is not valid. |
invalid_gift_options | The gift options you provided were rejected by the retailer. |
invalid_json | The JSON in your request could not be parsed. |
invalid_login_credentials | The email and password you entered were incorrect. |
invalid_payment_method | The payment method provided is not available on the retailer. |
invalid_promo_code | One of the promotion code you entered was not valid. |
invalid_quantity | The quantity for one of the products does not match the one available on the retailer. |
invalid_request | Validation failed on the request. |
invalid_request_id | The provided request_id is invalid. |
invalid_security_code | The security code you entered was declined. |
invalid_shipping_method | The shipping method you selected was not valid. |
invalid_variant | One of the product variants you provided was not valid. |
manual_review_required | This order is under manual review by Easync – please check back later for the status of this order. |
max_price_exceeded | The retailers final price exceeds the maximum price. |
max_quantity_exceeded | You have exceeded the maximum quantity available for a specific product. |
no_free_shipping | Free shipping is not available for the item(s) you selected. |
no_gift_shipping | No gift shipping was available on this order. |
no_two_day_shipping | Two day shipping (or faster) is not available for the item(s) you selected. |
order_probably_placed | This order was probably placed, but we were not able to retrieve the merchant order ids. |
payment_info_problem | There was a problem with your payment information (likely not enough gift balance). |
prime_pantry_not_supported | Purchasing Prime Pantry items is not supported by the Easync API. |
product_unavailable | One of the products you selected is not available on the retailer. Either the seller selection criteria did not match any available offers or the product is out of stock and not available for purchase. |
request_processing | Request is currently processing and will complete soon. |
shipping_address_refused | The shipping address you provided was refused by the retailer. |
shipping_address_unavailable | The item(s) cannot be shipped to the selected shipping address. |
shipping_method_unavailable | The selected shipping_method is not available for the selected shipping_address. |
unauthorized_access | You are not authorized to make this API call. Please contact [email protected]. |
Product matching
Example product matching request
curl "https://core.easync.io/api/v1/match" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"retailer": "amazon_uk",
"products": [
"0006275192",
"B01864K3BM",
"1542855829"
],
"webhooks": {
"success": "http://mysite.com/api/match_result_success",
"failure": "http://mysite.com/api/match_result_failure"
}
}'
Match Amazon product id (ASIN) to various product indentifiers such as MPN, UPC, ISBN, EAN.
To retrieve this information, make a POST request to the following URL, with Content-Type: application/json headers and body.
https://core.easync.io/api/v1/match
if the request is successfully sent, the response will be: { "request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" }
Required product match request attributes
Attribute | Type | Description |
---|---|---|
retailer | String | Retailer code corresponding to the supported Amazon retailers. |
products | Array | Array of product ids (String). Up to 100 items per request. |
Optional product match request attributes
Attribute | Type | Description |
---|---|---|
webhooks | Object | A webhooks object that includes the URLs that you will receive on POST requests. You will receive these after request processing finished. |
client_notes | Object | Any type of metadata that you can use to keep your requests for future use. Client_notes will be passed back on the response part. |
Product match response attributes
To check the result, send the GET request with the request_id received above to https://core.easync.io/api/v1/match/:request_id
Example product match success response
{
"result": [
{
"product_id": "0006275192",
"upc": [
"025986275198"
],
"ean": [
"9780006275190"
],
"isbn": [
null
],
"mpn": [
null
]
},
{
"product_id": "B01864K3BM",
"upc": [
null
],
"ean": [
"5053343087738"
],
"isbn": [
null
],
"mpn": [
"TMC-109"
]
},
{
"product_id": "1542855829",
"upc": [
null
],
"ean": [
"9781542855822"
],
"isbn": [
null
],
"mpn": [
null
]
}
],
"request": {
"retailer": "amazon_uk",
"products": [
"0006275192",
"B01864K3BM",
"1542855829"
],
"webhooks": {
"success": "http://mysite.com/api/match_result_success",
"failure": "http://mysite.com/api/match_result_failure"
}
},
"request_id": "eb7a5000-e864-11ea-bcdc-0000000"
}
Hot items
Example hot items request
curl "https://core.easync.io/api/v1/hot/items/amazon" \
-u "<API_TOKEN>": \
-H "Content-Type: application/json" \
-d '{
"products": [
"B07MZVSY9Z",
"B005J8UI3W"
]
}'
Get up-to-date information about competitors prices and best-selling products.
To retrieve this information, make a GET request to the following URL, with Content-Type: application/json headers and body.
https://core.easync.io/api/v1/hot/items/:market
Available stores
URL :market value | Location |
---|---|
/amazon | amazon.com |
/amazon_uk | amazon.co.uk |
/amazon_ca | amazon.ca |
/amazon_de | amazon.de |
/amazon_es | amazon.es |
/amazon_fr | amazon.fr |
/amazon_it | amazon.it |
Required hot items request attributes
Attribute | Type | Description |
---|---|---|
products | Array | Array of product ids (String). Up to 50 items per request. |
Example hot items success response
[
{
"asin": "B07MZVSY9Z",
"found": false //if item not found
},
{
"minSellPrice": {
"amount": 1316,
"currency": "USD"
},
"maxSellPrice": {
"amount": 1427,
"currency": "USD"
},
"targetLowestPrice": {
"amount": 1215,
"currency": "USD"
},
"lastTargetLowestPrice": {
"amount": 1316,
"currency": "USD"
},
"asin": "B005J8UI3W",
"lastSellPrice": {
"amount": 1317,
"currency": "USD"
},
"price": {
"amount": 996,
"currency": "USD"
},
"quantitySoldDiff": {
"quantitySoldDiff": 1,
"period": 8.5
},
"competitorsCount": 31.5,
"amazonRatingInfo": {
"sellerPositiveFeedbackRating": "98-100%",
"sellerFeedbackCount": 387238
},
"found": true // if item found
}
]
See authentication section to find your api token.