Our e-commerce middleware retrieves e-commerce products that have been added or updated since the last successful sync. Each of these products is then compared with the inventory on the integration platform and inserted or updated accordingly. Sync is one-direction so changes made to products on the integration provider are not synced back to Crystal, and changes made in Crystal will overwrite their corresponding values in the integration when an update is performed.
Data coming from Crystal
Ecom Products: (api: /v1/ecom/products)
Product
Property | Type | Crystal source |
id | string | products.uuid |
vendor | n/a | |
item_type | n/a | |
product_number | string | products.product_number |
name | string | products.ecom_title |
description | string | products.ecom_description |
short_description | string | products.ecom_short_description |
images | string[] | products.ecom_images |
tags | string[] | product.ecom_tags |
allow_backorder | boolean | products.ecom_allow_backorder |
quantity | number | calculated @ backened |
price | number | products.price |
created | string | products.created |
last_updated | string | products.last_updated |
is_visible | boolean | calculated: always true |
Child Types
Vendor
Property | Type | Crystal source |
id | string | accounts.uuid |
name | string | accounts.ecom_name |
code | string | accounts.code |
ItemType
Property | Type | Crystal source |
id | string | product_types.uuid |
name | string | product_types.name |
Shopify
Product Field Mappings
Shopify ProductInput | Crystal Ecom Product |
handle | id (product uuid) |
title | name (OR product_number if no name) |
published | based on qty and org preference |
images | images |
description | description |
vendor | vendor.name |
tags | tags |
status | ‘ACTIVE’ (static string) |
variant*.barcode | product_number |
variant.price | price |
variant.quantity | object => { availableQuantity: quantity
locationId: shop.location (comes from MW db)
} |
variant.tracked | object => { tracked: ‘true’ } |
variant.sku | id |
variant.requiresShipping | true |
variant.taxable | true |
variant.inventoryPolicy | ‘Continue’ or ‘Deny’ based on allow_backorder |
variant.weightUnit | ‘POUNDS’ |
*Shopify product mapping creates a single variant for the product to support quantity, price, tax, etc