Summary
iPaaS.com transactions can be captured from Zoho Commerce sales orders through an automatic inbound flow or on-demand Manual Sync. Each transfer creates or updates a single iPaaS.com transaction representing one Zoho Commerce sales order, carrying the order number, order status, customer email address and the order's financial summary, together with seven kinds of related detail captured in the same sequence: the order's line items, its billing and shipping addresses, its tax, its payment, any order-level discount, and a payment-method guard that stops an order paid by a method that has not yet been mapped. Order data moves in one direction only, from Zoho Commerce into iPaaS.com.
ID Format
Manual Sync ID Format
On the iPaaS.com Manual Sync page, enter the Zoho Commerce sales order ID — the identifier Zoho Commerce holds for the order you want to capture. Example: 4159044000000107041.
Manual Sync applies to the sales order only. None of the seven child collections has a Manual Sync entry point or an ID of its own; each is captured as part of the order's transfer. Opening Manual Sync from one of the child collections selects the parent Add/Update Zoho Commerce Sales Order TO iPaaS.com collection automatically, because the order is what transfers — the child records come with it.
External ID Format
After an order transfers successfully, iPaaS.com saves the Zoho Commerce sales order ID as the external ID on a dedicated, platform-managed external-ID record for that order. Example: 4159044000000107041. That external-ID record is the primary match used to route every later transfer of the same order to the transaction already captured for it, rather than creating a second one.
Separately, the default template maps the Zoho Commerce order number into TransactionNumber. This gives the order number visibility directly on the transaction, and it serves as the platform's fallback collision-detection key for an incoming order that has no external-ID record yet. These are two distinct mechanisms: the external-ID record is the primary match, and the primary-identifier field on the transaction is the fallback the platform consults when that record is absent. Neither is a record-matching feature configured on this integration — see Duplicate or Conflicting Mappings.
Remapping TransactionNumber to a different source is supported, but it removes the fallback match for any transaction that pre-dates its external-ID record, so those orders may be captured as new transactions rather than linked to the existing ones. Leave the default mapping in place unless you have a specific reason to change it.
Deleted Record Support
Delete is not implemented for this collection or for any of its children. Removing a sales order in Zoho Commerce does not remove or archive the transaction captured from it in iPaaS.com, removing a line from an order is not propagated as a deletion, and delete mappings are not included in the default templates. Transactions that are no longer wanted must be handled in iPaaS.com directly.
Mapping Collection Status
Status: Enabled. This collection is active as configured and processes every sales order it receives. All seven child collections are Enabled as well.
Trigger Events: Zoho Commerce sales order events — an order being placed, and the events the store raises afterwards as the order progresses: confirmed, cancelled, declined, shipped and delivered. These are subscribed by enabling the Zoho Commerce sales order subscription under Inbound Data Flows in the subscription configuration. No orders transfer automatically until that subscription is enabled, and Manual Sync is available whether or not it is.
Sales orders are the only Zoho Commerce records that raise an automatic inbound transfer into iPaaS.com through this integration. Product and category changes made in Zoho Commerce do not trigger an inbound transfer; products and categories move in the outbound direction through their own FROM iPaaS.com collections, which are driven separately. Subscribers or their MiSP should confirm end to end in a staging environment that enabling the sales order subscription results in orders being captured, before switching off any manual process that depends on them.
Duplicate or Conflicting Mappings
No other mapping collection in this integration captures the Zoho Commerce Sales Order entity, so there is no competing source of truth to reconcile at the order level.
Configurable collision handling is not implemented anywhere in this integration, and there are no collision-resolution methods to choose on this collection. Duplicate prevention relies instead on the iPaaS.com platform's external-ID link described under ID Format: once an order has been captured, the stored Zoho Commerce sales order ID routes every later transfer of that order to the existing transaction instead of creating a new one, with the transaction's TransactionNumber acting as the platform's fallback key only where no external-ID record yet exists.
There is no unmapped-field overwrite risk to describe for this family of collections: they only capture orders into iPaaS.com and never write back to Zoho Commerce, so there is no destination field in the store for a transfer to overwrite.
Three of the values captured from an order deliberately appear in more than one place, and it is worth deciding which one each downstream process reads so that nothing is counted twice:
Tax: the order-level total is captured onto the transaction by this collection, the combined per-order tax detail by the Sales Order Tax collection, and the per-line estimate by the Sales Order Line collection.
Discount: the order-level figure is captured onto the transaction by this collection, order-level discounts again as detail by the Sales Order Header Discount collection, and item-level discounts on each captured line by the Sales Order Line collection.
Payment: the Sales Order Payment collection captures the payment detail, while the Sales Order Unmapped Payment collection acts on the same payment data for the opposite purpose — stopping orders paid by a method that has not been mapped. Keep the two in step: every method the payment collection is set up to capture must also appear on the Unmapped Payment allowlist, and vice versa.
Supported Child Collections
The following child collections are captured as part of the Sales Order transfer. None is independently triggerable and none has a Manual Sync entry point of its own: each is captured together with the parent order and linked to the transaction created from it, so re-capturing any of this detail means re-transferring the order through the parent collection.
Add/Update Zoho Commerce Sales Order Line TO iPaaS.com: captures each item on the order, with its SKU, item name, quantity, unit and extended pricing, line discount, and line tax.
Add/Update Zoho Commerce Sales Order Billing Address TO iPaaS.com: captures the order's billing address and the billing contact name.
Add/Update Zoho Commerce Sales Order Shipping Address TO iPaaS.com: captures the order's shipping address and contact name, along with the shipping method and delivery detail carried on the order.
Add/Update Zoho Commerce Sales Order Tax TO iPaaS.com: captures the order's tax detail, including the tax authority name, the tax percentage and the summed tax amount. It produces a record only when the order carries at least one tax entry.
Add/Update Zoho Commerce Sales Order Payment TO iPaaS.com: captures the payment recorded against the order, including the payment method, description and amount.
Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com: holds the allowlist of payment methods you have mapped and stops any order paid with a method that is not on it, so the order is not captured as a partial record needing manual repair. This collection carries no field mappings; its filter is its entire function.
Add/Update Zoho Commerce Sales Order Header Discount TO iPaaS.com: captures a discount applied to the order as a whole. It produces a record only when the order's discount was applied at the order level rather than to individual items.
Zoho Commerce Caveats
Authentication is tied to the United States Zoho accounts domain: the integration signs in through Zoho's US accounts service, and there is no setting that changes which regional service is used. A store whose Zoho organization is hosted on a data center outside the United States cannot currently connect, so no collection in this integration can transfer for that store.
Orders are captured, never written back: this family of collections reads sales orders from Zoho Commerce into iPaaS.com. The integration does not create, update or delete orders, lines, addresses, tax, payments or discounts in Zoho Commerce, and it does not take, authorize, capture or refund money.
Order content varies by order: what an individual order carries differs, so tax entries, discounts, shipping detail, secondary street lines and additional contacts are present on some orders and absent on others. Validate against a representative set of real orders in a staging environment that the values your processes depend on are populated.
Tax is calculated in Zoho Commerce: the captured values are what the store charged at checkout. This integration does not calculate, re-calculate or validate tax. Changing tax rules in Zoho Commerce changes what is captured on orders placed afterwards.
Payment and shipping method names are defined in the store: the captured method names are whatever those methods are called in Zoho Commerce, and they are not always identical to the labels shown in the storefront or in the gateway's own settings. Take the exact values from a real order. Renaming a method changes the value captured on orders placed afterwards, and adding a payment method requires a matching update to the allowlist.
How an order is discounted is decided at checkout: whether a given order carries an order-level or an item-level discount is determined by how the promotion is configured in Zoho Commerce, not by this integration. Storefronts that use both kinds of promotion produce captured orders of both shapes.
Call volume matters on large runs: Zoho does not publish a call quota for the Zoho Commerce store API, and a store may still refuse calls made too quickly. Capturing a large number of orders in a short window concentrates a great deal of traffic on one store. Stagger large catch-up runs rather than sending everything at once, and validate throughput in a staging environment before relying on high-volume automatic capture in production.
iPaaS.com Caveats
The payment-method allowlist must be current before the first transfer: an order paid with a method that has not been added to the allowlist on Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com is stopped and raised as an error rather than captured. As delivered, that list holds only a demonstration entry and a literal placeholder entry, so it must be updated before any real order can transfer. Errors appear under Dashboard / Integration Monitoring / Error Logs.
Child detail is refreshed only with the order: lines, addresses, tax, payment and header discount are captured as part of the order's transfer. There is no way to capture or refresh any of them independently; to refresh any of them, re-transfer the order through the parent collection.
A stopped order is not partially captured: when the allowlist guard stops an order, nothing is written for that order, so there is no partial transaction and no line, address, tax, payment or discount detail to clean up. That is the outcome the guard exists to produce.
Automatic capture depends on the inbound subscription: no order transfers automatically until the Zoho Commerce sales order subscription is enabled under Inbound Data Flows.
Values set on the transaction outside this integration: these collections capture a defined set of order fields onto the iPaaS.com transaction and its detail records. Subscribers or their MiSP who populate other transaction or line fields from another source should validate in a staging environment how those values behave when the same order is captured again, before relying on them in production.
Errors show the store's own wording: when Zoho Commerce rejects or fails a request during a transfer, the text shown in the iPaaS.com error log is the response the store returned, carrying Zoho Commerce's own phrasing rather than an iPaaS.com-authored message.
Setup Requirements
Zoho Commerce Configuration
No order-specific setup is required in Zoho Commerce beyond a connected store with an administrator-level account and orders in it. The connection credentials and the Organization ID are configured once for the subscription — see the Zoho Commerce Connections and Settings article and the Zoho Commerce Installation Instructions article rather than repeating that walkthrough here.
Before the first transfer, list the exact names of every payment method your storefront accepts, as the store records them on a real order. Those names are what the allowlist is compared against.
iPaaS.com Configuration
Three steps, in this order:
Update the payment-method allowlist. Open Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com and edit its mapping filter so that it lists every payment method your storefront accepts, spelled exactly as Zoho Commerce records it. This is a hard prerequisite, not an optional refinement — see the Unmapped Payment subsection under Mappings.
Review the Order Status translation. Confirm that every order status your storefront produces has a pair in the Order Status translation, and that the iPaaS.com value on the right of each pair is the one your downstream process expects.
Enable automatic capture, if you want it. Open Inbound Data Flows in the subscription configuration, select the Add/Update Zoho Commerce Sales Order TO iPaaS.com mapping collection, and enable its salesorder.All scope. Until this is done, orders transfer only through Manual Sync.
Integration Flow
Zoho Commerce raises a sales order event for an order that has been placed or has progressed, or a subscriber runs a Manual Sync for a specific Zoho Commerce sales order ID.
The full sales order is retrieved from Zoho Commerce, including its line items, addresses, tax entries, payment and discount detail.
The order's payment method is checked against the allowlist held on Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com. An order paid with a method that is not on that list is stopped at this point and raised as an error, and nothing is captured for it.
The integration checks whether the order already carries an external-ID record linking it to an iPaaS.com transaction. If none exists, a transaction is created and the Zoho Commerce sales order ID is saved as its external ID; if one exists, the transaction it points to is updated in place. Where no external-ID record yet exists, the order number captured into TransactionNumber is the platform's fallback collision-detection key for matching the order to a transaction already held.
The order header is captured onto that transaction: order number, type, status, customer email address and the financial totals.
The order's child records are captured against the same transaction — line items, billing address, shipping address, tax, payment and header discount. A child whose conditions are not met simply produces no record, which is why a tax-free order carries no tax record and an order with no order-level discount carries no header discount record.
None of the child collections can be transferred on its own; each is captured as part of this sequence.
Mappings
Add/Update Zoho Commerce Sales Order TO iPaaS.com
iPaaS.com data type: Transaction
Description: Captures a Zoho Commerce sales order into iPaaS.com as a transaction, carrying the order number, status, customer email address and the order's financial summary.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Field |
| TransactionNumber | Recommended. Captures the Zoho Commerce order number onto the transaction so it can be identified by the same number the merchant sees in the store. It also carries the platform's fallback collision-detection role described under ID Format. Remapping it is supported but removes that fallback for transactions that pre-date their external-ID record. |
Lookup | Lookup Translation: Order Status | Status | Recommended. Converts the Zoho Commerce order status into an iPaaS.com transaction status. The six delivered pairs are listed under Lookup Translation Tables below; an order whose status has no matching pair is captured without a status value. |
Field |
| Subtotal | Recommended. Records the merchandise total before tax, shipping and discounts. If the source value is empty, no subtotal is written. |
Field |
| Total | Recommended. Records the grand total the customer was charged, and is the figure most often used to reconcile a captured transaction against the original order. |
Field |
| TotalQty | Recommended. Records the total number of units across all of the order's lines, giving order-level quantity reporting without adding up the captured lines. |
Field |
| ShippingAmount | Recommended. Records the shipping charge applied to the order. An order that carries no shipping charge writes no shipping amount. |
Field |
| TaxAmount | Recommended. Records the order-level tax total as a single figure, and is the value to use for order-level tax reporting. |
Dynamic Formula | Calculated from | DiscountAmount | Recommended for accurate order financials. Records the order's discount, selecting the figure that matches the level at which the discount was applied. All three branches are set out under Order discount calculation below. |
Dynamic Formula |
| EmailAddress | Recommended. Captures the customer's email address from the first contact person on the order. Because this integration does not transfer individual customer records, it is the main way a captured transaction identifies who placed the order. |
Static |
| Type | Structural mapping — leave in place. Classifies every record this collection captures as an order, which is what distinguishes a captured sales order from other transaction types held in iPaaS.com. It is a designed constant, not an environment-specific placeholder. |
Dynamic Formula |
| SystemId | Structural mapping — leave in place. Stamps the captured transaction with the identifier of the connected system the order came from, which matters when a subscription captures orders from more than one selling channel. It is supplied by iPaaS.com from the transfer's own context and there is nothing to configure. |
Order discount calculation
Zoho Commerce records a discount differently depending on whether it was applied to the whole order or to individual items, so the DiscountAmount mapping inspects how the discount was recorded and selects the matching figure:
if (discount_type == "entity_level") return discount_amount; else if (discount_type == "item_level") return discount_total; else return 0;
A discount applied to the order as a whole contributes the order's own discount amount.
A discount applied to individual items contributes the combined discount across the order's lines instead.
An order with no discount at either level records an explicit zero rather than an empty value, so every captured order carries a discount figure.
Because the branches read different figures, an order only ever contributes one of them and a discount is never double-counted. Subscribers or their MiSP who edit this formula should keep all three branches, including the zero fallback.
Lookup Translation Tables
The Order Status translation ships with the following six pairs:
Source Value | Destination Value | Notes |
confirmed | Complete | The order has been confirmed in Zoho Commerce. |
shipped | Complete | The order has been shipped. |
delivered | Complete | The order has been delivered. |
fulfilled | Complete | The order has been fulfilled. |
draft | Pending | The order has not yet been placed or confirmed. |
pending | Pending | The order is awaiting confirmation. |
An order whose Zoho Commerce status has no matching pair is captured without a status value. Subscribers or their MiSP should review the statuses their storefront actually produces, add a pair for each one that is not already covered, and may change the iPaaS.com value on the right of any existing pair where a downstream process expects a different status.
Add/Update Zoho Commerce Sales Order Line TO iPaaS.com
iPaaS.com data type: Transaction Line
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. Lines are captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Description: Captures each item on a Zoho Commerce sales order as a line on the captured transaction, with its SKU, item name, quantity, list and effective pricing, line discount, and line tax.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Field |
| Sku | Recommended, and in practice the most important field on a line. It identifies the product the line refers to once the order reaches iPaaS.com; without a SKU a captured line cannot be matched to a product, so map it for every line. |
Field |
| Description | Recommended. Carries the item name shown on the Zoho Commerce order line, which is what makes a captured line legible where a SKU alone is not self-explanatory. If the source value is empty, no description is written for that line. |
Field |
| Qty | Recommended. Records the number of units ordered on the line. It is also read by the UnitPrice calculation, so an unmapped or empty quantity affects captured pricing as well as captured quantity. |
Dynamic Formula | Calculated from | UnitPrice | Recommended. Records what each unit on the line actually cost after any discount applied to that line, which is usually the figure a downstream process wants rather than the list price. Both branches, including the zero-quantity guard, are set out under Line pricing and tax calculations below. |
Field |
| OriginalUnitPrice | Recommended. Records the line's list rate, the per-unit price before any line discount. Paired with UnitPrice, it lets a captured line show both what the item normally sells for and what it actually sold for; on a line with no discount the two values are the same. |
Field |
| DiscountAmount | Recommended wherever item-level discounting matters to your reporting. It records the discount applied to this specific line, and is the same value the UnitPrice and ExtendedPrice calculations read. Discounts applied to the order as a whole are captured by the Header Discount collection instead. |
Field |
| TaxPercent | Recommended where per-line tax detail matters. It records the tax rate applied to the line; the corresponding monetary amount is captured by EstimatedTaxAmount. If the line carries no tax percentage, no value is written. |
Static |
| Status | Recommended mapping to leave in place. Sets the starting status of every captured line, because lines arrive from Zoho Commerce as newly placed order detail. Subscribers or their MiSP whose downstream process expects a different starting status can change the fixed value, and it then applies to every captured line. |
Dynamic Formula | Calculated from | ExtendedPrice | Recommended for accurate order financials. Records the line's total value after any discount applied to it, which is the line's contribution to the order total. Both branches are set out under Line pricing and tax calculations below. |
Dynamic Formula | Calculated from | EstimatedTaxAmount | Recommended where per-line tax detail matters. Adds together every tax entry recorded against the line into one figure, and returns zero when the line carries no tax entries, so captured lines can be totalled without gaps. |
Static |
| Type | Structural mapping — leave in place. Classifies every captured line as a product line, distinguishing merchandise lines from other kinds of line a transaction can hold in iPaaS.com. It is a designed constant, not an environment-specific placeholder. |
Line pricing and tax calculations
Three of the captured line values are calculated rather than read straight from the order, because Zoho Commerce records a line discount and line taxes separately from the line's price.
UnitPrice works out the effective price of a single unit:
double? discount = discount_amount; if (discount != null && quantity != 0) return ConvertToDouble((item_sub_total - discount) / quantity); else return rate;
The line carries a discount amount and its quantity is not zero: the line's discount is subtracted from the line sub-total and the result is divided by the quantity, producing the effective, discounted price of a single unit.
The line carries no discount amount, or its quantity is zero: the line's own rate is captured unchanged, with no calculation applied.
The quantity check in the first branch is a deliberate guard. Without it, a line with a quantity of zero would cause a division by zero; instead the formula falls back to the line rate and the transfer completes. Subscribers or their MiSP who edit this formula should keep that guard in place.
ExtendedPrice works out the line's total value:
double? discount = discount_amount; if (discount != null) return item_sub_total - discount; else return item_sub_total;
The line carries a discount amount: the discount is subtracted from the line sub-total and the discounted total is captured.
The line carries no discount amount: the line sub-total is captured unchanged.
Unlike UnitPrice, this calculation does not divide by quantity, so it is unaffected by a line quantity of zero.
EstimatedTaxAmount totals the line's tax entries:
double taxAmount = 0;
if (line_item_taxes != null){
foreach(var tax in line_item_taxes){
taxAmount += tax.tax_amount;
}
}
return taxAmount;The line carries one or more tax entries: each entry's tax amount is added to a running total and the combined figure is captured. A single line can carry more than one tax entry, for example where separate state and local taxes apply.
The line carries no tax entries: the running total stays at zero and zero is captured, so every captured line holds an explicit tax amount.
Subscribers or their MiSP should confirm in a staging environment that the captured line values add up to the order subtotal captured on the transaction before relying on them for reconciliation.
Add/Update Zoho Commerce Sales Order Billing Address TO iPaaS.com
iPaaS.com data type: Transaction Address
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. The billing address is captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Mapping Filter
SourceTypeName == "ParentOnly"
Filter Description. The filter restricts this collection to running as part of a sales order's transfer. It is evaluated only while the order it belongs to is being captured, so the collection can never be triggered on its own or run against anything other than an order. It has a single branch and applies no further record-level conditions: every transferred order contributes its billing address, no row is rejected, and this filter produces no error message. Subscribers or their MiSP can edit the filter, but leaving it in place is recommended — it is what keeps billing address capture tied to the order the address belongs to.
Description: Captures the billing address recorded on a Zoho Commerce sales order, together with the order's contact name, and marks it as the transaction's primary billing address.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Address1 | Recommended. Captures the street address from the order's billing address. Zoho Commerce holds it as a single value that can contain more than one line, and this mapping flattens it to a comma separator — see Address capture and formatting below. |
Dynamic Formula |
| Address2 | Recommended. Captures the secondary street line, which Zoho Commerce stores apart from the main street address and which is therefore not affected by the flattening above. Many billing addresses have no secondary line; when the order's does not, Address2 is left empty, which is expected. |
Dynamic Formula |
| City | Recommended. Captures the city from the order's billing address. It is read by most invoicing and reporting processes that consume a billing address. |
Dynamic Formula |
| Region | Recommended. Captures the state or province. The value taken is the abbreviated code Zoho Commerce records on the order rather than the full state name; subscribers whose downstream processes expect the full name can remap this to the order's full state value. |
Dynamic Formula |
| PostalCode | Recommended. Captures the postal or ZIP code from the order's billing address. Map it where postal code is used for tax determination, shipping cost or reporting in iPaaS.com. |
Dynamic Formula |
| Country | Recommended, particularly where orders are billed across more than one country. The value is the country as Zoho Commerce records it on the order; confirm in a staging environment that the format matches what your downstream processes expect. |
Dynamic Formula |
| FirstName | Recommended. Captures the contact first name from the first contact person recorded on the order. Additional contacts on the same order are not captured, and an order with no contact person leaves the field empty. |
Dynamic Formula |
| LastName | Recommended. Captures the contact last name, behaving the same way as FirstName: the name comes from the first contact person on the order, additional contacts are not captured, and an order with no contact person leaves the field empty. |
Static |
| IsPrimaryBilling | Recommended mapping to leave in place. Marks the captured address as the transaction's primary billing address, so downstream processes that look for a single bill-to address select this one. It is a designed constant, not an environment-specific placeholder; removing it leaves the captured address without that marker. |
Address capture and formatting
Multi-line street addresses are flattened. Zoho Commerce holds the street address as a single value that can contain more than one line, and this mapping replaces each line break with a comma and a space. A billing address entered as two lines is therefore captured as one comma-separated Address1 value, and the original line breaks are not preserved. Downstream processes that parse the street address should account for that separator.
The contact name comes from the order, not the address. Both name fields read the first contact person on the order rather than any name held on the billing address itself.
Billing and shipping addresses are read from different parts of the order. Zoho Commerce keeps the order's billing address and the order's shipping address in two separate parts of the order record, and each address collection reads the part that belongs to it. That asymmetry is by design and both collections capture with the same order transfer; it does not indicate a problem with either one.
Whether any given field is populated depends on what the Zoho Commerce order payload carries for that order, so subscribers or their MiSP should review a captured order in a staging environment and confirm each address field populates in the form their downstream processes expect before relying on this collection in production.
Add/Update Zoho Commerce Sales Order Shipping Address TO iPaaS.com
iPaaS.com data type: Transaction Address
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. The shipping address is captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Mapping Filter
SourceTypeName == "ParentOnly"
Filter Description. The filter restricts this collection to running as part of a sales order's transfer, exactly as the billing address collection's filter does. It is evaluated only while the order it belongs to is being captured, so the collection can never be triggered on its own. It has a single branch and applies no further record-level conditions: every transferred order contributes its shipping address, no row is rejected, and this filter produces no error message. Subscribers or their MiSP can edit the filter, but leaving it in place is recommended.
Description: Captures the shipping address recorded on a Zoho Commerce sales order, together with the order's contact name and the chosen delivery method, and marks it as the transaction's primary shipping address.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Address1 | Recommended. Captures the street address the order ships to. Zoho Commerce holds it as a single value that can contain more than one line, and this mapping flattens it to a comma separator — see Address and delivery capture below. |
Dynamic Formula |
| Address2 | Recommended. Captures the secondary street line, which Zoho Commerce stores apart from the main street address and which is therefore not affected by the flattening above. When the order's shipping address has no secondary line, Address2 is left empty, which is expected. |
Dynamic Formula |
| City | Recommended. Captures the city the order ships to. Fulfillment and carrier processes generally require it. |
Dynamic Formula |
| Region | Recommended. Captures the state or province. The value taken is the abbreviated code Zoho Commerce records on the order rather than the full state name; subscribers whose downstream processes expect the full name can remap this to the order's full state value. |
Dynamic Formula |
| PostalCode | Recommended. Captures the postal or ZIP code the order ships to. It is commonly used for shipping rate selection and tax determination. |
Dynamic Formula |
| Country | Recommended, and required in practice by any process that ships internationally. The value is the country as Zoho Commerce records it on the order. |
Dynamic Formula |
| ShippingMethod | Recommended. Captures the name of the shipping method selected on the order, so the captured transaction records how the shopper chose to have it delivered. Orders with no shipping detail, such as digital-only orders or orders collected in person, leave it empty. |
Dynamic Formula |
| ShippingMethodDescription | Recommended where the delivery wording shown to the shopper is useful downstream. It carries the descriptive delivery title presented alongside the shorter method name, and is likewise empty on orders with no shipping detail. |
Dynamic Formula |
| FirstName | Recommended. Captures the contact first name from the first contact person recorded on the order rather than from the shipping address itself, so an order shipped to someone other than the ordering contact carries the ordering contact's name. |
Dynamic Formula |
| LastName | Recommended. Captures the contact last name, behaving the same way as FirstName: the first contact on the order is used, additional contacts are not captured, and an order with no contact person leaves the field empty. |
Static |
| IsPrimaryShipping | Recommended mapping to leave in place. Marks the captured address as the transaction's primary shipping address, so downstream processes that look for a single ship-to address select this one. It is a designed constant, not an environment-specific placeholder. |
Address and delivery capture
Multi-line street addresses are flattened. As on the billing address, each line break in the street value is replaced with a comma and a space, so a two-line street address is captured as one comma-separated Address1 value. Because shipping labels and carrier processes are sensitive to address formatting, confirm in a staging environment that the flattened value is acceptable to your fulfillment process.
The captured contact may not be the recipient. Both name fields read the order's contact detail rather than the shipping address, so gift orders and orders shipped to a third party carry the ordering contact's name on the captured shipping address.
Billing and shipping addresses are read from different parts of the order. The billing collection reads the order's billing address block and this collection reads the order's address detail. The two collections therefore draw on different source detail while capturing with the same order transfer. That asymmetry is by design and does not indicate a problem with either one; a subscriber comparing the two captured addresses should simply not assume they behave identically.
Shipping method names come from the store. The captured text is whatever the method is called in Zoho Commerce. Subscribers whose downstream processes match on specific shipping method names should confirm those names in a staging environment first.
Add/Update Zoho Commerce Sales Order Tax TO iPaaS.com
iPaaS.com data type: Transaction Tax
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. Tax detail is captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Mapping Filter
SourceTypeName == "ParentOnly" && Parent.Taxes.count > 0
Filter Description. The filter applies two conditions, and both must hold. First, this collection is evaluated only while the order it belongs to is being captured, so it can never be triggered on its own. Second, the order must carry at least one tax entry (Parent.Taxes). An order that meets both conditions produces one captured tax record. A tax-free order fails the second condition and produces no captured tax record at all, rather than a captured record showing zero — it is not rejected with an error, and this filter produces no error message. Subscribers or their MiSP can edit the filter, but leaving it in place is recommended: it is what keeps tax capture tied to its order and prevents empty tax records being created for tax-free orders.
Description: Captures the tax charged on a Zoho Commerce sales order as tax detail on the captured transaction, recording the combined tax amount, the original amount, the tax name and the tax rate.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Dynamic Formula | Calculated from | Amount | Recommended. Records the tax charged on the order, and is the value most downstream accounting processes read. It is calculated by totalling every tax entry on the order rather than read from a single field — see Tax calculation below. |
Dynamic Formula | Calculated from | OriginalAmount | Recommended. Records the tax value at the point of capture, so any later adjustment made in iPaaS.com can be compared against what Zoho Commerce originally charged. It uses the same calculation as Amount, so as shipped both fields receive an identical figure; that is intended. |
Dynamic Formula |
| Authority | Recommended. Records the name of the tax applied to the order, identifying which taxing authority the captured tax belongs to. The value is the tax name held on the order as a whole rather than one entry per authority. |
Dynamic Formula |
| TaxPercent | Recommended where the rate, and not only the amount, matters to reporting. The value is the tax percentage held on the order as a whole, so on an order with more than one rate it should be treated as the order's primary rate rather than a per-entry rate. |
Tax calculation
Both Amount and OriginalAmount use the same calculation, which starts from zero, works through every tax entry Zoho Commerce recorded on the order, adds each entry's tax amount to a running total, and returns that total:
double amount = 0;
if (Parent.Taxes != null){
foreach (var tax in Parent.Taxes){
amount += tax.tax_amount
}
}
return amount;An order that carries several tax entries therefore produces one combined figure rather than a separate captured amount per entry, and the captured Authority and TaxPercent describe the order as a whole rather than each contributing entry. Subscribers who need a per-authority breakdown for tax reporting should confirm on a multi-tax order in a staging environment that the captured combination meets their reporting requirement, and reconcile the captured amount against the order-level tax total on the transaction before relying on this collection in production.
Add/Update Zoho Commerce Sales Order Payment TO iPaaS.com
iPaaS.com data type: Transaction Payment
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. Payment detail is captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Description: Captures the payment recorded on a Zoho Commerce sales order — the method used, the amount, any descriptive text, and a fixed status — against the captured transaction. Which orders reach this collection is decided by the Unmapped Payment collection described below.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Field |
| Method | Recommended. Records how the shopper paid, and is the value reconciliation processes use to route a payment to the right processor or ledger account. The captured text is the payment method name exactly as Zoho Commerce records it, which is also the name that must appear on the Unmapped Payment allowlist. |
Field |
| Amount | Recommended for any meaningful payment capture. Without it, the captured payment records that a method was used but gives downstream processes nothing to reconcile against the order total. |
Field |
| Description | Recommended where the payment carries a reference or note that helps staff match the captured payment to the processor's own record. Not every payment carries descriptive text; when the order's payment has none, Description is captured empty, which is expected. |
Static |
| Status | Recommended mapping to leave in place. Applies a fixed status to every captured payment so payments enter iPaaS.com in a known, consistent state regardless of method. It is a designed constant, not an environment-specific placeholder. Subscribers whose downstream processes expect a different starting status can change the value or derive it from the order instead. |
The payment configuration shipped with this integration demonstrates the shape of a payment capture against a test payment method, not against the payment methods a live storefront actually accepts. Confirm that these mappings cover the methods you accept as part of the same implementation step that updates the allowlist below.
Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com
iPaaS.com data type: Transaction Payment
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. This collection is evaluated as part of that order's transfer. It is never triggered on its own and has no Manual Sync entry point.
Mapping Filter
List<string> mappedMethods = new List<string>(){
"Test Gateway",
"Add new types here"
};
if (mappedMethods.Contains(payment_mode)){
return false;
}
else
return true;The same list is held a second time, inverted, as the collection's error filter — this is the half that raises the error:
List<string> mappedMethods = new List<string>(){
"Test Gateway",
"Add new types here"
};
if (!mappedMethods.Contains(payment_mode)){
return true;
}
else
return false;Filter Description. The list in both formulas is the allowlist of payment methods you have mapped, and the order's payment method (payment_mode) is compared against it. There are two outcomes:
The order's payment method is on the list. The first formula returns
false, so this collection takes no action and the order continues through the normal capture process. Its payment detail is captured by the Sales Order Payment collection.The order's payment method is not on the list. The first formula returns
trueand the inverted error formula also returnstrue, so the order is caught here and raised as an error. The order is stopped rather than captured, so no transaction is created for it and there is no partial record — no line, address, tax, payment or discount detail — for anyone to repair by hand. The error appears under Dashboard / Integration Monitoring / Error Logs.
The two formulas must be kept in step. Editing one list without editing the other breaks the guard, because the condition that lets an order through and the condition that raises the error would no longer be opposites.
Placeholder value — replace during implementation: the list as delivered contains only Test Gateway, a demonstration payment method, and the literal entry Add new types here. Neither matches a payment method a live storefront produces. Both lists MUST be updated before the first transfer so that they name every payment method your storefront actually accepts, spelled exactly as Zoho Commerce records it on a real order. Until they are replaced, every real order is stopped and raised as an error, and no orders are captured at all.
Description: This collection has zero field mappings, by design rather than by omission — its mapping filter is its entire function. It captures nothing and writes nothing. It exists solely to decide whether an order carrying a given payment method is allowed through, so that an order paid by a method you have not mapped is stopped up front instead of landing in iPaaS.com as a partial record that someone has to repair by hand. There is no field mapping table for this collection because there are no fields to map; keeping its list current is what keeps captured orders complete and payment data trustworthy.
Maintaining the payment-method allowlist
The list is a manual allowlist and it does not learn new payment methods on its own. Treat it as a standing configuration item:
At implementation: replace the delivered entries with every payment method your storefront accepts. Confirm the exact spelling from a real order in Zoho Commerce rather than from the storefront's own settings labels, and make the same change to both the filter and the error filter.
When you add a payment gateway or method in Zoho Commerce: add it to the list before the first order using it is placed. Orders paid with the new method are stopped until it is listed.
When you retire a method: leaving it on the list is harmless for historical orders; removing it means any late-arriving order using it is stopped.
After any change: re-transfer the affected orders through the parent collection using Manual Sync, because correcting the list does not re-capture past orders on its own.
A growing count of stopped orders in the error log is the signal that the list needs a new entry.
Add/Update Zoho Commerce Sales Order Header Discount TO iPaaS.com
iPaaS.com data type: Transaction Discount
Parent Collection: Add/Update Zoho Commerce Sales Order TO iPaaS.com. The order-level discount is captured as part of that order's transfer and linked to the transaction created from it. This collection is never triggered on its own and has no Manual Sync entry point.
Mapping Filter
SourceTypeName == "ParentOnly" && Parent.discount_type == "entity_level"
Filter Description. The filter applies two conditions, and both must hold. First, this collection is evaluated only while the order it belongs to is being captured, so it can never be triggered on its own. Second, the order must record its discount at the order level (Parent.discount_type). An order that meets both conditions produces one captured header discount record. An order whose discount was applied to individual line items fails the second condition and produces no header discount record — those discounts are captured with the lines they belong to by the Sales Order Line collection. An order with no discount at all likewise produces no record. Neither case is rejected with an error, and this filter produces no error message. Subscribers or their MiSP can edit the filter, but leaving it in place is recommended: it is what keeps order-level and line-level discounts from being captured twice for the same order.
Description: Captures a discount applied to a Zoho Commerce sales order as a whole — a promotion, coupon or manual reduction applied to the order rather than to an individual item — as discount detail on the captured transaction. This collection carries two mappings by design, and together they are the complete set needed to record an order-level discount.
Mapping Type | Source Field (Zoho Commerce) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| DiscountAmount | Recommended. Records the value of the discount applied to the order as a whole, and is the figure reporting processes read. Map it wherever order-level discounting matters to your reporting. |
Static |
| DiscountMethod | Recommended mapping to leave in place. Applies a fixed value identifying the captured discount as an order-level one, which is how downstream processes tell it apart from the line-level discounts captured alongside the order lines. It is a designed constant, not an environment-specific placeholder; removing it leaves the captured discount without that marker. |
Because a storefront can discount either way, subscribers or their MiSP should validate in a staging environment on both an order-level-discounted order and an item-level-discounted order that the captured amounts land where they expect before relying on this collection in production.
Error Handling
Subscriber-visible errors raised during a sales order transfer appear in the iPaaS.com Dashboard / Integration Monitoring / Error Logs, recorded against the order that was being captured.
An order paid with a payment method that is not on the allowlist is stopped and raised as an error — the Unmapped Payment collection caught the order because its payment method is absent from the mapped-methods list. Nothing is captured for that order: there is no transaction, and no partial line, address, tax, payment or discount detail. As delivered, the list holds only a demonstration entry and a literal placeholder entry, so every real order produces this error until the list is replaced. Resolution: open Add/Update Zoho Commerce Sales Order Unmapped Payment TO iPaaS.com, add the exact payment method name as Zoho Commerce records it on the order to both the filter and the error filter, then re-transfer the affected orders through Add/Update Zoho Commerce Sales Order TO iPaaS.com using Manual Sync.
A message returned by Zoho Commerce — when the store rejects or fails a request during a transfer, the text shown in the error log is the response Zoho Commerce returned, carrying the store's own wording rather than an iPaaS.com-authored message. Resolution: read the message to identify what the store objected to, correct the order or the connection settings accordingly, and re-run the transfer.
Two conditions on this flow deliberately produce no error and should not be looked for in the error log:
An order that carries no tax, and an order with no order-level discount, simply produce no tax record and no header discount record. Downstream processes should treat a missing detail record as "none charged" rather than as a failure.
An order whose Zoho Commerce status has no pair in the Order Status translation is captured without a status value rather than being rejected. Add the missing pair and re-transfer the order.
Validation Rules
The record-level rules enforced on this flow are carried by the collection filters documented under Mappings:
The order's payment method must appear on the mapped-methods allowlist. This is the only rule that stops an order. An order failing it is raised as an error and nothing is captured for it.
Tax detail is produced only for an order carrying at least one tax entry. A tax-free order produces no tax record rather than a zero one.
A header discount record is produced only for an order discounted at the order level. An item-level discount, or no discount at all, produces no header discount record.
Every child collection is evaluated only as part of an order's transfer. None can be triggered independently, and none has an ID of its own to enter on Manual Sync.
Testing & Validation
Test Scenarios
Place a new order in Zoho Commerce paid with an allowlisted payment method and confirm a transaction is captured in iPaaS.com carrying the order number, status, customer email address and financial totals.
Run a Manual Sync using the documented Zoho Commerce sales order ID and confirm the transfer succeeds and the captured transaction matches the order.
Re-transfer an order that has already been captured and confirm the external-ID link routes it to the existing transaction — the totals refresh and no second transaction is created. Confirm as part of the same check that the captured TransactionNumber still holds the Zoho Commerce order number, since it is the platform's fallback collision-detection key where no external-ID record exists.
Transfer a multi-line order and confirm each line is captured with its SKU, item name and quantity, and that the captured line values add up to the order subtotal on the transaction.
Transfer an order with a line discount and confirm the captured UnitPrice is the discounted per-unit figure while OriginalUnitPrice carries the undiscounted rate.
Transfer an order discounted at the order level and confirm a header discount record is captured; transfer an order discounted per line item and confirm no header discount record is produced and the discount appears on the lines instead.
Transfer a taxed order and confirm a tax record is captured with the combined amount, tax name and rate; transfer a tax-free order and confirm no tax record is produced and no error is raised.
Transfer an order with distinct billing and shipping addresses and confirm both are captured, each carrying its primary-address marker, with the multi-line street value flattened to a comma-separated Address1.
Attempt to transfer an order paid with a payment method that is not on the allowlist and confirm the order is stopped, an error is raised in the error log, and no partial transaction is created. Then add the method to both the filter and the error filter, re-transfer the order, and confirm it is captured in full.
Transfer an order whose status has no pair in the Order Status translation and confirm the order is captured without a status value; add the pair, re-transfer, and confirm the status is captured.
Enable the sales order subscription under Inbound Data Flows, place a new order in the storefront, and confirm it is captured automatically without a Manual Sync.
Validation Checklist
The captured transaction carries the Zoho Commerce order number, status, customer email address, subtotal, tax, shipping, discount, total and total quantity.
A second transfer of the same order updates the existing transaction; no duplicate transaction is created.
The external-ID record is written against the order after the first successful transfer.
Every line on the order is captured, each with a SKU, and the captured line values reconcile to the order subtotal.
The billing address and the shipping address are both captured, each marked as the transaction's primary address of its kind, with the contact name taken from the order's first contact person.
A taxed order carries a tax record whose combined amount reconciles against the order-level tax total; a tax-free order carries none.
An order-level discount produces a header discount record marked as an order-level discount; an item-level discount does not.
The payment is captured with the method name exactly as Zoho Commerce records it, and that name appears on the allowlist.
No order is stopped for an unmapped payment method once the allowlist has been updated for every method the storefront accepts.
Automatic capture produces the same result as Manual Sync for an equivalent order.
Additional Notes
Out of scope
Writing orders to Zoho Commerce: every collection in this family moves data in one direction only, from Zoho Commerce into iPaaS.com. Orders, lines, addresses, tax, payments and discounts are never created or updated in Zoho Commerce by this integration, and no money is taken, authorized, captured or refunded.
Deleting orders: removing an order in Zoho Commerce does not remove the transaction captured from it, and removing a line from an order is not propagated as a deletion. See Deleted Record Support.
Independent triggering of child collections: none of the seven children can be transferred on its own; each is captured as part of the parent order's transfer.
Automatic capture from product and category events: Zoho Commerce product and category events do not trigger inbound capture into iPaaS.com. Products and categories move outbound through their own collections, which are driven separately.
Customer address books and promotion detail: only the addresses recorded on the order itself are captured, not customer address records held in Zoho Commerce; and the captured discount carries its amount and order-level marker but not the promotion or coupon that produced it.
Known Limitations
The following describe behavior at the time this documentation was written.
Individual customer records cannot transfer in either direction. Zoho Commerce provides neither API access nor customer webhooks for the customer data held in its Member Portal, so customer records cannot be transferred by this integration in either direction. The customer's email address captured on the order is the identifying detail available, and downstream systems should be built around it rather than around a separately linked customer record.
As delivered, every real order is blocked. The payment-method allowlist ships holding only a demonstration entry and a literal placeholder entry. Until it is replaced with the methods your storefront accepts, every real order is stopped and raised as an error and no orders are captured. This is the single most important configuration step before the first transfer, and orders stopped for this reason transfer successfully when they are retried afterwards.
Automatic inbound capture must be verified as actually running before it is relied on. Enabling the sales order subscription is not by itself confirmation that Zoho Commerce is notifying iPaaS.com, because the subscription is not confirmed to register reliably with the store. Place a real order in the storefront and confirm it arrives in iPaaS.com without a Manual Sync before switching off any manual process that depends on automatic capture, and re-confirm after any change to the subscription. Where automatic capture is not arriving, Manual Sync remains available and captures the same order in full.
A payment method added later stops orders until it is listed. Introducing or renaming a payment method in the storefront without updating the allowlist stops every order paid with it from the moment the method goes live.
Order statuses outside the translation are not captured. An order whose Zoho Commerce status has no pair in the Order Status translation is captured without a status value until a pair is added.
Only the first contact person on an order is read. Orders carrying several contacts contribute only the first one to the captured email address and to the contact names on both captured addresses.
Original street line breaks are not preserved. Because a multi-line street address is captured as one comma-separated value, the original line breaks cannot be recovered downstream.
No per-authority tax breakdown. An order taxed by more than one authority is captured as a single combined amount with the order's tax name and rate, so the individual authorities cannot be separated out of the captured record.
A line with a quantity of zero records its list rate as the unit price. The quantity guard on the UnitPrice calculation means a zero-quantity line falls back to the line rate rather than a calculated per-unit figure. The transfer still completes.
One status for all captured payments. Because the payment status is applied as a fixed value, the captured payment does not reflect the payment's actual state with the payment processor. Subscribers who need a true payment state should remap that field or derive it downstream.
One status for all captured lines, regardless of the order's own status. The order header's status is translated through the Order Status translation and can be captured as either of the delivered values, but every captured line carries the same fixed starting status. A completed order therefore captures lines that all read as pending, and line status does not follow the order forward. Subscribers who need line status to reflect the order should change the fixed value or derive line status downstream from the captured order status.
Captured detail refreshes only with the order. Every captured value reflects the order at the time it was transferred. Changes made in Zoho Commerce afterwards appear in iPaaS.com only when that order is transferred again.

