Summary
This documentation describes how standard Shopware orders (transactions) are transferred to iPaaS.com. When triggered by a Shopware order webhook event or by Manual Sync, the integration retrieves the full order and dispatches it to iPaaS.com together with its addresses, line items, payments, and taxes through the supported child collections. The parent collection transfers the order's core commercial values, links the order to the correct iPaaS.com customer (or, for business orders, the correct company), and uses dynamic formulas to translate the Shopware order state into an iPaaS.com status, sum promotions and line quantities, compute totals and taxes, and resolve the Shopware currency to a readable name.
ID Format
Manual Sync ID Format
Orders can be transferred from the iPaaS.com Manual Sync page by entering the Shopware order ID. The order ID is the internal Shopware identifier for the order — for example, 01915630e5db7214ab1ab2dc71608955. Entering this value transfers the specific order together with its addresses, line items, payments, and taxes.
External ID Format
After an order is transferred, iPaaS.com retains a cross-platform link between the Shopware order and the resulting iPaaS.com Transaction record. The order's Shopware order number is also stored on the iPaaS.com Transaction number field as the primary human-readable identifier used to find and reconcile the order in iPaaS.com.
Deleted Record Support
Order deletions are not propagated by this family. There is no outbound delete collection for orders, so removing an order in Shopware does not delete the corresponding Transaction in iPaaS.com. Order-state events such as cancellation are reflected by updating the iPaaS.com order status (for example, to Cancelled) rather than by removing the record.
Custom Field Support
This family stores two Shopware-specific order values on iPaaS.com Transaction custom fields: Shopware Currency Name (the order's currency, resolved from the Shopware currency ID to a readable name) and Shopware Sales Channel (the Shopware sales channel ID the order was placed through). The currency name is resolved at transfer time by the GetCurrencyNameById conversion function; the sales channel is carried through directly from the Shopware order. The exact formula for each custom field is shown in the Mappings section below.
Mapping Collection Status
Status: Enabled (parent collection and all four child collections).
Trigger Events
checkout.order.placed: a new order is placed.
state_enter.order.state.open: an order enters the Open state.
state_enter.order.state.in_progress: an order enters the In Progress state.
state_enter.order.state.completed: an order is completed.
state_enter.order.state.cancelled: an order is cancelled.
checkout.order.payment_method.changed: the payment method on an order changes.
order_approval.pending_order.requested: a pending order is requested for approval (B2B approval workflow).
The child collections (Line Item, Payment, Excise Tax, Address) have no independent trigger; they run automatically as part of the parent order transfer, whether that transfer was started by a webhook or by Manual Sync.
Duplicate or Conflicting Mappings
This documentation covers orders transferred from Shopware to iPaaS.com. The following mapping collection operates on order records in the opposite direction:
Update Shopware Order FROM iPaaS.com: Updates orders in Shopware from iPaaS.com data.
Before enabling this inbound collection alongside the outbound "From iPaaS.com" order collection, subscribers or their MiSP should review and customize their mapping collection filters to prevent circular updates, and define clearly which system is the source of truth for order data. If both directions are active with default mappings, changes may propagate back and forth between systems. The child collections (Line Item, Payment, Excise Tax) may also have opposite-direction inbound counterparts; the same filter review applies to each.
Unmapped Field Overwrite Risk
The iPaaS.com API performs a full record replace when updating records, and every collection in this family handles both Add and Update. On each Update transfer, any standard field that is not mapped is overwritten with an empty value unless a mapping is added to preserve it. To preserve such values, split the combined Add/Update collection into separate Add and Update collections and, in the Update collection, add a Dynamic Formula mapping that uses the DestinationValue function to carry the existing iPaaS.com value forward — for example, DestinationValue.Weight mapped to the iPaaS.com Weight field. The fields at risk per collection are:
Transaction (parent): After excluding the server-managed fields Id, ParentId, and TransactionUpdatedDateTime (all managed by iPaaS.com itself), there are no unmapped subscriber-writeable scalar fields, so no overwrite-preservation action is needed for the parent collection.
Transaction Line: DiscountPercent, EstimatedTaxAmount, QtyShipped, Weight.
Transaction Payment: MethodInfo.
Transaction Tax (Excise Tax): OriginalAmount, TaxPercent.
Transaction Address: ShipDate, ShippingAmount, ShippingMethodDescription.
Supported Child Collections
Add/Update Shopware Order Address TO iPaaS.com (Transaction Address): Transfers the order's billing and shipping addresses as part of the order transfer.
Add/Update Shopware Order Line Item TO iPaaS.com (Transaction Line): Transfers the order's product line items.
Add/Update Shopware Order Payment TO iPaaS.com (Transaction Payment): Transfers the order's payment record.
Add/Update Shopware Order Excise Tax TO iPaaS.com (Transaction Tax): Derives a single excise tax row from the order's line item data.
Shopware Caveats
Webhook workflow actions require Enterprise Shopware: The automatic-transfer workflows described under Setup Requirements can only be created on Enterprise editions of Shopware. Subscribers on other editions should rely on Manual Sync.
Order state names are language-dependent: Shopware returns the order state name in the store's configured language, so the Status translation matches both English and German spellings. Stores configured in another language may need the status mapping extended so their state names map to the correct iPaaS.com status; otherwise those orders default to Pending.
Per-line discount requires a customized API: The line item DiscountAmount value is not native to Shopware. It requires the Shopware Admin API to be customized to expose a per-line discount on the line item price object. Without that extension, the discount amount is empty.
Payment method and status resolution: The payment Method and Description are resolved by looking up the Shopware payment method by its ID; if the ID is empty or the method cannot be found, both fields are left empty. The payment Status depends on the Shopware transaction state ID resolving to a state name; if it cannot be resolved, the status is empty.
Address country, region, and shipping method resolution: The address Country and Region names are resolved from Shopware's country and country-state IDs and depend on those IDs existing in Shopware. The ShippingMethod name and the IsPrimaryShipping flag are derived from the parent order's tracking information; if the parent order has no tracking record, the shipping method name is empty and the shipping flag is false for every address on the order.
Excise tax source data: The excise tax amount is summed from a per-line excise calculated taxes value on the order's line items; if that data is not present on a line, the per-line contribution is zero.
iPaaS.com Caveats
An order is linked to its customer or company in iPaaS.com by an existing cross-platform link. If the customer or company on the order has not yet been linked, the integration transfers that record first so the link can be established before the order is filed (see Additional Notes).
The child collections run only as part of a parent order transfer. They cannot be triggered independently from the Manual Sync page; transfer the parent order to move its line items, payment, addresses, and excise tax.
The line item Status mapping always sets the line status to Pending, regardless of the Shopware transaction state.
Subscribers or their MiSP should stagger large manual jobs and rely on the configured API throttle limits when transferring many orders at once.
Setup Requirements
Automatic transfer requires subscribers or their MiSP to subscribe to Shopware order events on the Inbound Data Flows (External Webhooks) page of the Shopware subscription in iPaaS.com. Webhooks do not activate automatically — the relevant events must be subscribed before automatic transfers occur. Subscribing creates a workflow in Shopware that sends a webhook to iPaaS.com after the corresponding event; clearing the Inbound Data Flow toggle removes that workflow. The supported order events are listed under Mapping Collection Status above.
On non-Enterprise editions of Shopware, where webhook workflow actions are unavailable, use Manual Sync instead by entering the Shopware order ID on the iPaaS.com Manual Sync page.
Integration Flow
A subscribed Shopware order event fires (for example, checkout.order.placed or an order-state change), or a subscriber enters a Shopware order ID on the iPaaS.com Manual Sync page.
iPaaS.com receives the webhook (or Manual Sync request) and retrieves the full order from Shopware.
The order is evaluated against the parent collection filter. Standard orders pass; deposit orders (order numbers ending in "-D") and order returns are skipped and handled by their separate collections.
The parent collection transforms the order's core values, resolves the iPaaS.com customer or company link, translates the order state into an iPaaS.com status, and computes the totals, taxes, discounts, and quantity.
If the customer or company on the order is not yet linked in iPaaS.com, the integration transfers that record first so the order can be attached to the correct customer or company.
The order's addresses, line items, payment, and excise tax are transferred through the child collections and attached to the iPaaS.com order created or updated by the parent transfer.
iPaaS.com retains the cross-platform link between the Shopware order and the iPaaS.com Transaction, and stores the Shopware order number as the Transaction number for reconciliation. Subsequent order-state events update the existing Transaction's status.
Mappings
Add/Update Shopware Order TO iPaaS.com
Mapping Filter
OrderNumber != null && !OrderNumber.EndsWith("-D") && Type != "order_return"Filter Description. This filter processes standard orders only. An order passes when its OrderNumber is not empty, the order number does not end in -D, and the order Type is not order_return. Deposit orders (whose order numbers end in -D) are skipped and transferred by the separate Add Shopware Order Deposit TO iPaaS.com collection, and order returns are skipped and transferred by the separate Add/Update Shopware Order Return TO iPaaS.com collection. Any order with an empty order number is also skipped.
Description: Transfers the order's core commercial values and links it to the correct iPaaS.com customer, company, and connected system.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Field | OrderNumber | TransactionNumber | recommended — the Shopware order number; the primary human-readable identifier used to find and reconcile the order and the value entered on the Manual Sync page. |
Field | PositionPrice | Subtotal | recommended — the order subtotal (sum of line-item prices before shipping and tax). |
Field | ShippingTotal | ShippingAmount | recommended — the order shipping total, so the order total reconciles correctly. |
Field | EmailAddress | recommended — the ordering customer's email address, for identifying the customer in iPaaS.com. | |
Dynamic Formula |
| SystemId | recommended — associates the order with the correct connected Shopware system; SpaceportSystemId resolves automatically at transfer time. Leave this mapping in place. |
Dynamic Formula |
| CustomerId | recommended — resolves the iPaaS.com customer identifier for the linked customer using GetSpaceportIdAsync; when no link exists, the customer is transferred first. |
Dynamic Formula |
| CompanyId | recommended — resolves the iPaaS.com company identifier for a business (B2B) customer using GetSpaceportIdAsync; empty for individual customers. |
Dynamic Formula | Order state to status (see formula below) | Status | recommended — translates the Shopware order state into an iPaaS.com status, matching both English and German state names. |
Dynamic Formula | Normalize order type (see formula below) | Type | recommended — normalizes the Shopware order type; the standard |
Dynamic Formula |
| Total | recommended — the order grand total (amount total plus calculated taxes). |
Dynamic Formula |
| TaxAmount | recommended — the order's calculated product taxes; shipping taxes can optionally be added (see formula below). |
Dynamic Formula |
| DiscountAmount | recommended — the total of all promotions on the order, summed by GetSumOfPromotions; 0 when there are no promotions. |
Dynamic Formula |
| TotalQty | recommended — the total item quantity across all line items, summed by GetQtyOfLines. |
Dynamic Formula |
| TransactionCreatedDateTime | recommended — the order date, converted to a date-time-with-offset value by DateTimeOffsetFromLocalDateTime. |
Dynamic Formula |
| Shopware Currency Name (custom field) | optional — resolves the order's Shopware currency ID to a readable currency name via GetCurrencyNameById; empty when no match is found. |
Field | SalesChannelId | Shopware Sales Channel (custom field) | optional — the Shopware sales channel ID the order was placed through, useful for sales-channel-specific downstream handling. |
// Status
var status = await TransactionStateNameFromId(StateId);
switch(status)
{
case "Abgebrochen":
case "Cancelled":
case "Order clearance denied":
return "Cancelled";
break;
case "Abgeschlossen":
case "Done":
return"Complete";
break;
default:
return "Pending";
break;
}// Type
if(Type=="order"){
return "Order";
}
return Type;// TaxAmount — remove the comment marker to also include shipping taxes Price_CalculatedTaxes // + ShippingCosts_CalculatedTaxes
Add/Update Shopware Order Line Item TO iPaaS.com
Mapping Filter
Type!=null && Type!="promotion_line_item"
Filter Description. This filter ensures only product line items are transferred. A line passes when its Type is not empty and is not promotion_line_item. Any line with an empty type, and any promotion line item, is skipped, so promotion lines on the Shopware order are not created as Transaction Lines on iPaaS.com.
Description: Transfers each qualifying product line item on the order as an iPaaS.com Transaction Line.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Field | UnitPrice | UnitPrice | optional — the line item unit price. |
Field | Quantity | Qty | optional — the line item quantity. |
Field | UnitPrice | OriginalUnitPrice | optional — the pre-discount unit price, preserved for reference. |
Field | Price_DiscountAmount | DiscountAmount | optional — the per-line discount amount; requires a customized Shopware API exposing a |
Static |
| Type | optional — sets the line type to the constant Product, identifying the row as a product line. |
Dynamic Formula | Line status (see formula below) | Status | optional — always returns Pending for every transferred line, regardless of the Shopware transaction state. |
Dynamic Formula | SKU from product number (see formula below) | Sku | optional — uses the product number as the SKU; falls back to the line item label when no product number is present. |
Dynamic Formula | Extended price (see formula below) | ExtendedPrice | optional — returns the line item total price; a commented-out proportional discount-distribution block can be enabled if needed. |
Dynamic Formula | Sum of line tax rates (see formula below) | TaxPercent | optional — sums all tax rates on the line item; 0 when the line has no tax rules. |
Field | Label | Description | optional — the line item label (its display name). |
// Status var status = await TransactionStateNameFromId(StateId); if(!string.IsNullOrEmpty(status)) return "Pending"; return "Pending";
// Sku
if(Payload_ProductNumber!=null && Payload_ProductNumber!="")
{
return Payload_ProductNumber;
}
return Label;// ExtendedPrice
//This will distribute the total header discount amount among line items based on line extended price and ticket subtotal
//var discount = await GetSumOfPromotions(Parent.Promotions);
//if (discount != null && discount > 0){
// var proportion = TotalPrice / (discount + Parent.PositionPrice);
// var lineAmount = proportion * discount;
// return TotalPrice-(Math.Round(lineAmount,2));
//}
return TotalPrice;// TaxPercent
double result = 0;
if(Price_TaxRules != null && Price_TaxRules.Count > 0){
foreach (var tax in Price_TaxRules){
if (tax.TaxRate != null) {
result = result + tax.TaxRate;
}
}
}
if (result == 0) {
//throw new Exception("Taxes are 0 for this order");
}
return result;Add/Update Shopware Order Payment TO iPaaS.com
Description: Transfers the order's payment as an iPaaS.com Transaction Payment.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Method | optional — the payment method name, resolved from the Shopware payment method ID via GetPaymentMethodNameById; empty when the ID is empty or the method is not found. |
Dynamic Formula |
| Description | optional — set to the same resolved payment method name as Method. |
Dynamic Formula |
| Status | optional — the payment status, resolved from the Shopware transaction state via TransactionStateNameFromId; empty when the state cannot be resolved. |
Dynamic Formula |
| Amount | optional — the gross payment amount (order total plus calculated taxes). |
Add/Update Shopware Order Excise Tax TO iPaaS.com
Mapping Filter
SumFieldFromCollection(Parent.Transaction_Line, "Payload_ExciseTaxAmount_Total") <> 0
Filter Description. This filter gates whether the excise tax row is created at all. The SumFieldFromCollection function sums the Payload_ExciseTaxAmount_Total value across all of the parent order's line items, and the row is created only when that total is not zero. Orders with no excise tax therefore produce no excise tax row on iPaaS.com.
Description: Derives a single excise tax row on the iPaaS.com order from the order's line item data.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Static |
| Authority | optional — labels the tax authority with the constant value Excise Tax. |
Dynamic Formula |
| Amount | optional — the total excise tax for the order, summed across all line items via SumFieldFromCollection. |
Add/Update Shopware Order Address TO iPaaS.com
Description: Transfers each of the order's addresses as an iPaaS.com Transaction Address and flags billing and shipping.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Field | FirstName | FirstName | optional — the recipient first name on the order address. |
Field | LastName | LastName | optional — the recipient last name on the order address. |
Field | Company | Company | optional — the company name on the address, typically populated for business addresses. |
Field | Street | Address1 | recommended — the primary street line. |
Field | AdditionalAddressLine1 | Address2 | optional — the second street line. |
Field | AdditionalAddressLine2 | Address3 | optional — the third street line. |
Field | City | City | recommended — the address city. |
Field | Zipcode | PostalCode | recommended — the address postal/ZIP code. |
Dynamic Formula |
| Country | recommended — the country name, resolved from the Shopware country ID via CountryNameFromId; empty when the ID cannot be resolved. |
Dynamic Formula |
| Region | optional — the state/region name, resolved from the country and country-state IDs via StateNameFromId; empty when either ID cannot be resolved. |
Dynamic Formula | Billing flag (see formula below) | IsPrimaryBilling | optional — true when this address matches the order's billing address ID, false otherwise. |
Dynamic Formula | Shipping flag (see formula below) | IsPrimaryShipping | optional — true when this address matches the shipping address on the order's first tracking record; false when the order has no tracking. |
Dynamic Formula | Shipping method (see formula below) | ShippingMethod | optional — the shipping method name for the order's shipping address, resolved via GetShippingMethodNameById; empty for non-shipping addresses or when there is no tracking. |
// IsPrimaryBilling
if (Id.StartsWith(Parent.BillingAddressId)){return true;}
return false;// IsPrimaryShipping
if (Parent.Transaction_Tracking != null && Parent.Transaction_Tracking.Count > 0){
var shippingAddressId = Parent.Transaction_Tracking[0].ShippingOrderAddressId;
if (Id.StartsWith(shippingAddressId)){return true;}
}
return false;// ShippingMethod
if (Parent.Transaction_Tracking != null && Parent.Transaction_Tracking.Count > 0){
var shippingAddressId = Parent.Transaction_Tracking[0].ShippingOrderAddressId;
if (Id.StartsWith(shippingAddressId)){
var methodId = Parent.Transaction_Tracking[0].ShippingMethodId;
return await GetShippingMethodNameById(methodId);
}
}
return null;Error Handling
Errors surface in Dashboard / Integration Monitoring / Error Logs.
Dependent customer or company cannot be created: When an order is transferred and its customer (or, for a business order, its company) is not yet linked in iPaaS.com, the integration transfers that record first. If the dependent customer or company cannot be created, the order transfer fails. Resolution: confirm the customer or company data is valid and transferable, or disable the customer and company transfer mapping collections to prevent dependent records from being created during order transfers.
Shopware API temporarily unavailable: If the Shopware API is unavailable when a transfer is triggered, the transfer fails. Resolution: retry the record by triggering a new webhook event or by using Manual Sync.
Order state in an unsupported language: Orders whose Shopware state name is not in English or German default to Pending rather than failing. Resolution: subscribers or their MiSP should extend the Status mapping so the store-language state names map to the correct iPaaS.com status.
Testing & Validation
Test Scenarios
Place a new standard order in Shopware (or subscribe to checkout.order.placed) and confirm a Transaction is created in iPaaS.com with the correct order number, totals, tax, discount, and quantity.
Move an order through its lifecycle states (open, in progress, completed, cancelled) and confirm the iPaaS.com Transaction status updates to Complete or Cancelled as expected, and to Pending for intermediate states.
Transfer an order via Manual Sync by entering its Shopware order ID and confirm the order and all child records (addresses, line items, payment, excise tax) are created together.
Place an order with promotions and confirm the discount amount is summed correctly and promotion lines are not created as Transaction Lines.
Place an order with multiple addresses and confirm the billing and shipping flags, country, region, and shipping method are resolved correctly.
Place an order that carries excise tax on its lines and confirm a single excise tax row is created; place an order with no excise tax and confirm no excise tax row appears.
Transfer a business (B2B) order and confirm it is linked to the correct iPaaS.com company.
Validation Checklist
The Transaction number matches the Shopware order number and the order is reconcilable in iPaaS.com.
The order is linked to the correct iPaaS.com customer or company; the dependent record was transferred first when no link existed.
The order total equals the amount total plus calculated taxes, and the subtotal, shipping amount, tax amount, discount amount, and total quantity are all populated.
The order status reflects the current Shopware order state.
Line items are present with the expected SKU, quantity, unit price, extended price, and tax percent, and the line status is Pending.
The payment record carries the resolved method, description, status, and gross amount.
The excise tax row is present only when the order's summed excise tax is non-zero.
Addresses carry the correct street lines, city, postal code, country, region, and billing/shipping flags.
Deposit orders (order numbers ending in "-D") and order returns are not transferred by this collection.
Additional Notes
When an order is transferred from Shopware to iPaaS.com, the integration automatically transfers the order's customer first if that customer is not already linked in iPaaS.com — even when customer webhooks are disabled. For a business (B2B) customer, the related company is transferred instead. To prevent customer or company records from being created or updated during order transfers, disable the customer and company transfer mapping collections.
Deposit orders (order numbers ending in "-D") and order returns are out of scope for this collection; they are transferred by the separate Add Shopware Order Deposit TO iPaaS.com and Add/Update Shopware Order Return TO iPaaS.com collections respectively.
The line item extended price is passed through as the line total. The proportional discount-distribution logic is present but inactive; enabling it requires a mapping change by the subscriber or their MiSP.
The payment method and the payment description are populated from the same resolved payment method name, so both fields carry the same value, and the payment amount is computed as the order total plus its calculated taxes rather than read from a separate payment transaction amount.
These limitations are inherent to the current design of the integration and the capabilities of the Shopware API, and they apply to all subscribers at the time this documentation was written.
