Overview
An iPaaS Product can be transferred to Linnworks using an Add/Update sync method. This mapping supports the automated synchronization of Product records from iPaaS into Linnworks as Item.
In the provided template mappings, the following mapping collections are defined for Add/Update within the iPaaS.com flow:
Product From iPaaS With Variants
Product Variant From iPaaS
Product From iPaaS Without Variants
Integration Flow
Product Creation: A new Item record is created in Linnworks with the mapped details.
Product Resolution: The system finds the corresponding Item in Linnworks using the Linnworks SKU.
Product Variant Creation: A new Item record is created in Linnworks with the mapped details.
Product Variant Resolution: The system finds the corresponding Item in Linnworks using the Linnworks SKU.
Integration Settings
Mapping Status: Enabled.
ID Format: When manually syncing, the Product ID (Internal ID) from iPaaS is used. This can be resolved via SKU.
Conflicting Mappings: This mapping applies only to Item. Ensure no other mappings target the same Linnworks entity to prevent data from being overwritten.
Authentication & Security
To generate an access token for validating Linnworks APIs, Linnworks supports application authentication. You must provide the Application Id, Application Secret, and Token in the subscription settings of the Linnworks subscription. An access token will then be generated, which can be used to authenticate API.
Mappings
Parent Collection: Product From iPaaS With Variants
Mapping Filter
TrackingMethod == "Variant"
Description
In iPaaS, both the product and its variants are created as separate items in Linnworks. To establish the relationship between these items, we implemented functionality to create a Variation Group in Linnworks.
This is why we handle 'Product' and 'Product with Variants' separately. A product with the TrackingMethod set to Product does not support variant logic in iPaaS, while a product with the TrackingMethod set to Variant does support variant logic. We separated these flows as required to correctly create and manage variation groups in Linnworks.
Mapping Type | Source (iPaaS.com) | Destination (Linnworks) | Description |
Field | Sku | ItemNumber | Required |
Field | Name | ItemTitle | Required |
Static | true | IsVariationParent |
|
Dynamic Formula |
| PurchasePrice | This dynamic formula retrieves the Cost value from the product’s Inventory list based on a valid Linnworks location match. It first checks whether the Inventory collection exists and contains entries. For each inventory record: It converts the iPaaS LocationId to a Linnworks location name. It then retrieves the corresponding Linnworks Location ID. If the location exists and the inv.Cost value is greater than zero, it returns that cost. If no matching location is found or no valid cost exists, the method returns null. |
Field | DefaultPrice | RetailPrice |
|
Field | Barcode | BarcodeNumber |
|
Field | TaxClass | TaxRate |
|
Dynamic Formula |
| CategoryId | This code retrieves the first valid Category ID from the Categories collection. It first checks whether the Categories list is not null and contains at least one item. Then, for each category, it calls the asynchronous method GetCategoryIdByName(cat.CategoryName) to get the corresponding category ID. If a valid, non-empty ID is found, it immediately returns that value. If no valid category ID is found or the Categories list is empty or null, the function returns null. |
Field | Height | Height |
|
Field | Weight | Weight |
|
Field | Width | Width |
|
Field | Depth | Depth |
|
Static | 2 | InventoryTrackingType | This field value is static because when we transfer a product with variants, it is treated as a variation with trackingType 2, indicating that the product is transferred as a variation. |
Dynamic Formula |
| StockItemId | Required: This code retrieves the external ID of a product from iPaaS. It calls the asynchronous method GetExternalIdAsync() using the product Id, the entity type "Product", and the SpaceportSustemId. If the retrieved StockItemId is not null or empty, it returns the value. Otherwise, it returns null. |
Child Collection: Product Variant From iPaaS
Mapping Filter
N/A
Description
N/A
Mapping Type | Source (iPaaS.com) | Destination (Linnworks) | Description |
Field | Sku | ItemNumber | Required |
Dynamic Formula | Parent.Name | ItemTitle | Required |
Field | Barcode | BarcodeNumber |
|
Static | true | IsVariationParent |
|
Dynamic Formula |
| PurchasePrice | This dynamic formula retrieves the Cost value from the product’s Inventory list based on a valid Linnworks location match. It first checks whether the Inventory collection exists and contains entries. For each inventory record: It converts the iPaaS LocationId to a Linnworks location name. It then retrieves the corresponding Linnworks Location ID. If the location exists and the inv.Cost value is greater than zero, it returns that cost. If no matching location is found or no valid cost exists, the method returns null. |
Field | DefaultPrice | RetailPrice |
|
Dynamic Formula |
| CategoryId | This code retrieves the first valid Category ID from the Categories collection. It first checks whether the Categories list is not null and contains at least one item. Then, for each category, it calls the asynchronous method GetCategoryIdByName(cat.CategoryName) to get the corresponding category ID. If a valid, non-empty ID is found, it immediately returns that value. If no valid category ID is found or the Categories list is empty or null, the function returns null. |
Field | Height | Height |
|
Field | Weight | Weight |
|
Field | Width | Width |
|
Field | Depth | Depth |
|
Static | 0 | InventoryTrackingType | This field value is static because when we transfer a product variant, it is treated as an item with trackingType 0, indicating that the product is transferred as an item. |
Dynamic Formula |
| StockItemId | This code retrieves the external ID of a product from iPaaS. It calls the asynchronous method GetExternalIdAsync() using the product Id, the entity type "Product Variant", and the SpaceportSustemId. If the retrieved StockItemId is not null or empty, it returns the value. Otherwise, it returns null. |
Collection: Product From iPaaS Without Variants
Mapping Filter
TrackingMethod == "Product"
Description
In iPaaS, the product is created as an individual item in Linnworks. Since products using the TrackingMethod set to Product do not support variant logic in iPaaS, we handle them separately. This setup ensures that the product is created and managed correctly as an item in Linnworks without involving any variant-based functionality.
Mapping Type | Source (iPaaS.com) | Destination (Linnworks) | Description |
Field | Sku | ItemNumber | Required |
Field | Name | ItemTitle | Required |
Static | false | IsVariationParent |
|
Dynamic Formula |
| PurchasePrice | This dynamic formula retrieves the Cost value from the product’s Inventory list based on a valid Linnworks location match. It first checks whether the Inventory collection exists and contains entries. For each inventory record: It converts the iPaaS LocationId to a Linnworks location name. It then retrieves the corresponding Linnworks Location ID. If the location exists and the inv.Cost value is greater than zero, it returns that cost. If no matching location is found or no valid cost exists, the method returns null. |
Field | DefaultPrice | RetailPrice |
|
Field | Barcode | BarcodeNumber |
|
Field | TaxClass | TaxRate |
|
Dynamic Formula |
| CategoryId | This code retrieves the first valid Category ID from the Categories collection. It first checks whether the Categories list is not null and contains at least one item. Then, for each category, it calls the asynchronous method GetCategoryIdByName(cat.CategoryName) to get the corresponding category ID. If a valid, non-empty ID is found, it immediately returns that value. If no valid category ID is found or the Categories list is empty or null, the function returns null. |
Field | Height | Height |
|
Field | Weight | Weight |
|
Field | Width | Width |
|
Field | Depth | Depth |
|
Dynamic Formula |
| InventoryTrackingType | This dynamic formula checks whether the Inventory collection contains any items. If Inventory is not null and has one or more entries, it returns 1. Otherwise, it returns 0. |
Dynamic Formula |
| StockItemId | This code retrieves the external ID of a product from iPaaS. It calls the asynchronous method GetExternalIdAsync() using the product Id, the entity type "Product", and the SpaceportSustemId. If the retrieved StockItemId is not null or empty, it returns the value. Otherwise, it returns null. |
Validation Rules & Testing
Validation Checklist
Product ID is resolved (via Sku).
Product Variant ID is resolved (via Variant Sku).
Test Scenarios
Valid Product: Syncs successfully.
Invalid Product ID: The Product is rejected, and an error is logged.
Valid Product Variant: Syncs successfully.
Invalid Product Variant ID: The Product is rejected, and an error is logged.
