Synchronous, and where it belongs
A synchronous call asks the ERP a question and waits for the answer inside the shopper's request. It belongs in exactly the places where the answer must be current now and cheap to fetch: available stock at add-to-cart, a credit check at checkout, a contract price for one line. scandiweb's BK-Group case shows the pattern used that way, with stock checked by a direct API call to the ERP while prices are held in Pimcore and refreshed every few minutes. It does not belong anywhere that runs in bulk, because every ERP meters requests and the ceiling sits on the ERP account rather than the storefront.
Asynchronous, and why the queue needs an owner
Everything in bulk goes on a queue: catalog, price files, stock snapshots, order export, status callbacks. Adobe's documentation describes the Commerce side of that: bulk endpoints under /async/bulk/V1/ on PaaS (and /V1/async/bulk/ on SaaS) that accept a batch and return a bulk_uuid rather than a result, with the async.operations.all consumer processing the queued messages. The failure is silent. If the consumer is not running, Magento accepts every payload and processes none, and nothing errors. A queue therefore needs three things a buyer should see in writing: supervision of the consumer, a retry policy, and a dead-letter path with a replay tool. iWeb's ERP hub states all three in one sentence, traffic handled asynchronously through monitored queues with retries and dead-letter handling; scandiweb's services page states a retry queue and monitored integration; Creatuity's P21 page states batch processing and queuing. The rest of the agencies on this site publish nothing on the point.
Rate limits and the number to measure first
The ERP's limit decides the sync design. Oracle's NetSuite documentation states that web services and RESTlet concurrency has been governed at the account level since the 2017.2 release, and that the limit is the service tier's base plus 10 per SuiteCloud Plus license; on the tier tables Oracle publishes, a standard tier with one license allows 15 concurrent requests. Bemeir's Business Central article notes a cap of 200 webhook subscriptions per environment. Neither number is visible from Magento. The agency's first deliverable should be that measured number for your account, and the cadence table should be sized to it. A full catalog pull that ignores it fails in production, and no Magento setting raises it.
Cadence per object, as published
| Object | Bemeir's SAP article | Bemeir's Business Central article | Shown in a case |
|---|---|---|---|
| Inventory | 1 to 5 minutes for high-velocity SKUs; 15 to 30 minutes for slower items; daily full refresh off-peak | Every 5 to 15 minutes, or event-driven | scandiweb's BK-Group: direct API call to the ERP at the moment of need |
| Price | Delta-based, event-driven | Nightly batch plus on-demand | scandiweb's BK-Group: per-customer prices pushed to Pimcore every few minutes |
| Orders | Event-driven, bidirectional | Near real time, queued | Wagento's LAPP Tannehill: orders pushed into Prelude for invoicing and fulfillment; Creatuity's P21 page: automatic order transfer to P21 |
| Customers and companies | Not given | Near real time on create; nightly reconcile | Wagento's LAPP Tannehill: 300+ company accounts created through the API; scandiweb's BK-Group: registration and approval synced with the ERP |
| Credit | Not given | Every 15 to 60 minutes, or at checkout | None on this site |
| Catalog and content | Batch | Every 1 to 6 hours | scandiweb's Wainbee: over 600,000 products made accessible through an API connection |
The connectors and interfaces agencies name
- Creatuity: a pre-built, customizable Prophet 21 connector on a proprietary toolkit, syncing products and customer-specific pricing, inventory, orders, bidirectional customer data, and shipment tracking, per its P21 page
- Human Element: its own integration module for Epicor P21 and Adobe Commerce, a starter integration for B2B and B2C, and two iPaaS routes, per its integrations page
- Wagento: an Epicor Prelude integration for LAPP Tannehill built with a third-party integration platform plus custom API calls, with customer and company data synced from Prelude and orders pushed into it, per its case study
- iWeb: per-ERP pages for Prophet 21, BisTrack, Eclipse, Kinetic, SAP Business One and S/4HANA, NetSuite, Sage 200, Business Central, Kerridge, Intact iQ, and others, under iPaaS, point-to-point, or message-bus patterns, per its ERP hub
- Bemeir: SAP ECC and S/4HANA over OData or RFC, and Business Central API v2.0 over OData v4 with OAuth 2.0 through Entra ID, per its articles
- scandiweb: an Infor ERP connector overhauled in the IONTO case; SAP with Pimcore in the Macron and BK-Group cases; NetSuite, SAP, Dynamics, Navision, Infor SyteLine, Pimcore, and Akeneo named on its service pages with REST and GraphQL, a retry queue, and event-based syncing
- Adobe: the integration starter kit on App Builder and I/O Events, with product, customer, customer group, stock, order, and shipment flows, bidirectional by default, per its repository; no agency on this site publishes a shipped integration on it
In-process or out of process
Adobe's out-of-process documentation defines the term as custom code running in separate processes, often on different servers or services, and names App Builder, I/O Events, and webhooks as the tools. Adobe's feature comparison states that the SaaS edition supports out-of-process extensibility only while the PaaS edition supports both. For a store on PaaS today the practical rule is that anything written as an app/code module is the part that will be rewritten on the move to SaaS, so new integration work should run outside the process where it can. Adobe's lifecycle page adds the second clock: 2.4.6 left regular support on 11 August 2026, so a store on it carries an upgrade before any new connector goes live.
A design checklist to hand to any agency
- ERP product, edition, release, and interface, with the authentication method
- The measured concurrency or rate limit on our account, and who measured it
- The ownership table: one writer per object, with the cadence beside it
- Which calls are synchronous, and the timeout and fallback for each
- Which flows are queued, who supervises the consumer, the retry policy, and the dead-letter path with its replay tool
- Which B2B features need the Adobe Commerce B2B package, and which ERP object each maps to
- Where the code runs, in-process or out of process, and what changes on the SaaS edition
- Who is on call for the queue during the ERP's month-end close, and the response commitment in writing