Skip to content
SyncMyShop

Platforms

Magento integration with your ERP, warehouse and suppliers

Magento and Adobe Commerce give an integration a REST API with no general rate limit, an asynchronous bulk API and a stock model built on sources and reservations. We build the integration to your ERP around that model, your attribute sets and your version, then host and run it.

What Magento is and who runs it

Magento comes in two editions from Adobe: Magento Open Source, free to install, and Adobe Commerce, licensed, with the B2B modules. Both run as a PHP application on a server the merchant, an agency or a host controls. That makes Magento different from a hosted platform for an integration: the API limits are set by your hosting, extensions can change what an endpoint returns, and the version on your server is your decision.

Adobe ships minor versions on a fixed calendar. 2.4.9 came out on May 12, 2026. Regular support for 2.4.6 ended on August 11, 2026, for 2.4.7 it ends on May 31, 2027 and for 2.4.8 on May 31, 2028. A store several versions behind still has the REST API, but not the features added since, such as the event and webhook modules of 2.4.4.

What connects to Magento

Magento owns the order and the storefront. The ERP is the system of record for items, prices and stock, a PIM often for product content. These are the flows we build as part of an e-commerce ERP integration:

Flow Direction REST endpoint
Orders Magento to ERP GET /V1/orders
Customers both ways /V1/customers
Products and attributes ERP or PIM to Magento /V1/products
Stock per source ERP or WMS to Magento POST /V1/inventory/source-items
Tier prices per customer group ERP to Magento POST /V1/products/tier-prices
Shipments with tracking ERP or WMS to Magento POST /V1/order/{id}/ship
Credit memos both ways POST /V1/order/{id}/refund

An order has two numbers. entity_id is the internal key used in every endpoint, increment_id is the number the customer sees, such as 000100482. The ERP gets the increment_id as its reference and the integration keeps both. A shipment goes back with its tracks, carrier code and tracking number, and only then does Magento clear the reservation for that order.

How Magento exposes data

REST, GraphQL and the bulk API

Magento has a REST API and a GraphQL API. Adobe presents GraphQL as the base for headless storefronts and mobile apps; the integration works on REST, which covers the back-office side: orders, invoices, shipments, credit memos and source items. A list query takes searchCriteria. Without a pageSize, Magento returns every match in one response, so the integration always sets one:

GET /rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=updated_at
    &searchCriteria[filter_groups][0][filters][0][value]=2026-10-03 06:00:00
    &searchCriteria[filter_groups][0][filters][0][condition_type]=gt
    &searchCriteria[pageSize]=100&searchCriteria[currentPage]=1
Authorization: OAuth oauth_consumer_key="...", oauth_signature_method="HMAC-SHA256", ...

For large writes there is the asynchronous bulk API: the same endpoint under /async/bulk/, which returns a bulk_uuid at once and hands the work to the async.operations.all consumer through a message queue. The integration then reads the status of each operation from the bulk status endpoint, so a rejected row is reported with its SKU instead of disappearing.

Authentication

An integration created in the admin gets a consumer key, consumer secret, access token and access token secret, and signs each call with OAuth 1.0a and HMAC-SHA256. Since 2.4.4 that access token cannot be used as a standalone bearer token unless an administrator turns the option back on. An admin token is the alternative and lasts four hours by default. The integration gets its own integration with access to the resources its flows use, never an administrator account.

Input limits, not rate limits

Adobe documents no general request rate limit for the REST API. It has input limits, disabled by default. When a store switches them on:

Limit Default when enabled
Items per page, REST and GraphQL 300
Default page size, REST 20
Items in a list input, synchronous call 20
Items in a list input, asynchronous call 5,000

Worked through for a stock write of 20,000 source items on a store with input limits on: synchronous calls take 20,000 / 20 = 1,000 requests, the bulk endpoint 20,000 / 5,000 = 4. Reading 60,000 products at 300 per page is 200 pages. Without input limits the numbers come from your server: memory, PHP workers and the queue consumers. We measure them on your store, run the integration with fewer workers than the storefront needs to stay fast, and move large writes to the bulk API. Adobe's API security page describes the settings.

Where a Magento integration gets stuck

Sources, reservations and salable quantity

With multi-source inventory, stock lives per source: a warehouse, a store, a supplier. The ERP writes quantity and status per sku and source_code. Magento does not sell that number. It adds the sources of a stock, subtracts the out-of-stock threshold, and subtracts reservations: an order creates a reservation, and the reservation clears when the shipment is created in Magento.

Magento salable quantity from two different ERP numbers Magento computes salable quantity as source quantity minus the out-of-stock threshold minus open reservations. When the ERP sends physical stock of 20, with a threshold of 2 and 3 units reserved, 15 can be sold. When the ERP sends free stock of 17, which already excludes the 3 ordered units, Magento subtracts them again and shows 12. ERP sends physical stock: source quantity 20 20 Reserved 3 Salable 15 Threshold 2 Salable quantity in Magento 15 ERP sends free stock, already minus the 3 ordered: source quantity 17 17 Reserved 3 Salable 12 Threshold 2 Salable quantity: 3 units subtracted twice 12
Magento subtracts its own reservations from the source quantity. An ERP number that already excludes open orders counts them twice.

The trap is the ERP number. Most ERPs report free stock, which already excludes orders they have received. If the integration writes that number to the source, an order that is in the ERP but not yet shipped in Magento is subtracted twice: 17 - 3 - 2 = 12 where 15 can be sold. The integration writes the quantity that matches Magento's formula, physical stock minus the ERP's commitments for orders that did not come from this store. Bundle and grouped products have to stay on the default source. See which stock counts.

Attribute sets, option IDs and configurable products

A product belongs to an attribute set, and an option such as color "Black" is stored as an option ID that differs per installation: 58 on one store, 169 on its staging copy. The integration resolves options by label per store and keeps the mapping, instead of carrying IDs from one environment to another. A configurable product needs its options defined per attribute and its children linked one childSku per call, so a new size range is a series of calls in a fixed order.

Prices per customer group and B2B

A tier price has sku, price, price_type (fixed or discount), website_id, customer_group and quantity. Price scope is global by default, so a price per website needs the scope switched to website first. ERP price groups map to customer groups. On Adobe Commerce a shared catalog adds its own customer group, and a company has a credit limit in credit_limit. An ERP with more price groups than you want customer groups needs a decision per group; customer-specific pricing describes the options.

Systems we integrate with Magento

Each ERP stores items, stock and prices in its own way, so each pair has its own page:

Magento EDI integration covers orders from retail trading partners. The system side is on NetSuite, Business Central and SAP Business One.

We build the integration for a fixed price, then host it, monitor it and adjust it when you upgrade Magento or an extension changes an endpoint, for a monthly fee. Before go-live it runs as a dry run that writes nothing: you see per product which source quantity and price it would set. Every integration comes with a dashboard, logs and a per-run diff. Tell us which version and edition you run.

Frequently asked questions

Does the integration work with Magento Open Source and with Adobe Commerce?

Yes. Both have the same REST API for products, stock, orders and shipments. The differences are in the modules: B2B companies, shared catalogs and company credit exist only in Adobe Commerce, and so do Adobe I/O Events and Adobe Commerce Webhooks, which need version 2.4.4 or higher. On Open Source the integration polls on updated_at.

Which Magento versions are still supported?

Adobe released 2.4.9 on May 12, 2026. Regular support for 2.4.6 ended on August 11, 2026; for 2.4.7 it ends on May 31, 2027 and for 2.4.8 on May 31, 2028. The integration works on older versions too, but a store on an unsupported version receives no security patches, and we tell you which upgrade affects the API.

Does Magento limit the number of API requests?

Adobe documents no general request rate limit for the REST API. What it has are input limits, disabled by default: when switched on, a page holds at most 300 items and a list input 20 items in a synchronous call or 5,000 in an asynchronous one. Your server and hosting set the real ceiling, so we measure it on your store before we set the number of workers.

Can we keep using an integration token?

Since 2.4.4 an integration's access token can no longer be used on its own as a bearer token unless an administrator switches that back on, which Adobe does not recommend. The integration signs each call with OAuth 1.0a and the four credentials of the integration. An admin token is the other route; it expires after four hours by default.

How do configurable products map to ERP items?

A configurable product is a parent with simple products as children, each with its own SKU, linked by the options of one or more attributes. Most ERPs keep each color and size as an item. The integration creates the simple products from the ERP items and links them to the parent one childSku at a time. See variant mapping.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com