Point-to-point PHP module. Integration code lives in app/code and calls the ERP directly. Cheapest to start, and the pattern behind most Magento connectors written between 2016 and 2024. It has a hard ceiling: Adobe Commerce as a Cloud Service is multi-tenant SaaS and does not run in-process modules at all. Adobe's published release lifecycle adds a second clock, with 2.4.4 and 2.4.5 out of support entirely and 2.4.6 out of regular support since 11 August 2026.
Prebuilt connector. Covers the standard B2C objects: item master, price, stock, order, shipment. Coverage stops at B2B tier and contract pricing, multi-warehouse order routing and compliance fields, which is exactly where distributors operate.
Middleware or iPaaS. Field mapping, retry and monitoring in one place, at the cost of a second vendor, a per-message price curve and a second place to debug.
Adobe Commerce Integration Starter Kit. App Builder, I/O Events and API Mesh, with reference flows for Product, Customer, Customer Group, Stock, Order and Shipment. Runs out of process, so it survives the move to SaaS.
Custom API-led with a queue. Highest cost, and the only pattern that gives ordering guarantees and replay at high order volume.
Where they break:
Silent order loss. Posting to /async/bulk/V1/orders returns 202 and a bulk UUID, not a result. If consumers_runner is misconfigured in env.php, or the async.operations.all consumer is not supervised, Magento accepts every ERP payload and processes none of them. Nothing errors. Without a dead letter queue and a replay path, one ERP maintenance window turns into lost or corrupted orders.
Index growth under shared catalog. Shared catalog pricing creates price rows per customer group, so a 40,000 SKU catalog priced across 12 customer groups is not a 40,000 row price index, and reindex time grows with it. Full price pushes from the ERP during business hours are felt on the storefront.
ERP-side ceilings, which decide the architecture more than Magento does. Every ERP API meters requests, and the ceiling sits on the ERP account rather than on the storefront. NetSuite SuiteTalk concurrency, for example, is governed at account level and raised only by buying SuiteCloud Plus. The number to establish before sync design is fixed is how many requests per minute that specific account allows, measured rather than assumed. A full catalog pull that ignores it returns 429 in production.
Cadence. An hourly stock job means up to an hour of selling against stock that is already gone. Stock and price belong on events, not on cron.
Licensing. Adobe Commerce B2B is the separate magento/extension-b2b package. Company accounts and hierarchies, shared catalog and negotiable quote do not exist on Magento Open Source, which settles the platform question before the partner question is asked.