Skip to content
SyncMyShop

Systems

Acumatica integration with your online store, inside your license limits

Acumatica sets three API limits in each license: API sessions, concurrent requests and requests per minute. Past half the per-minute limit it slows requests down, and it declines them once 20 are waiting. We build the integration to your license numbers and your endpoint, then host and run it.

What Acumatica is and who runs it

Acumatica is a cloud ERP sold with industry editions for distribution, manufacturing, construction and commerce on one shared core. It ships two releases a year, numbered 2026 R1 and 2026 R2, and runs on a public or a private cloud.

Acumatica does not price by user seat. Its pricing page names three factors: the applications you use, the resource level for the transaction volume you expect, and the license type. The API limits are part of that resource level. Two Acumatica customers on the same version can therefore have different ceilings for the same integration.

What connects to Acumatica

Acumatica usually owns items, stock, prices, customers and the financial side. The store sends orders and new customers.

Flow Direction Acumatica entity (Default endpoint)
Orders store to Acumatica SalesOrder with Details, order type SO
Customers both ways Customer, with locations
Items and variants Acumatica to store StockItem, NonStockItem, template and matrix items
Stock per warehouse Acumatica to store InventorySummaryInquiry, or a generic inquiry
Shipments and tracking Acumatica to store Shipment, action ConfirmShipment
Invoices Acumatica to store SalesInvoice, action PrepareInvoice on the shipment
Supplier stock and dates supplier to Acumatica and store custom or user-defined item fields

An order with its lines goes in as one call. In this example the store order number goes in CustomerOrder (Customer Order Nbr. on the form), and the integration searches on it before a retry, so a repeated call never creates a second order. Acumatica's own Shopify connector uses that field for a B2B purchase order number and puts the store number in External Reference, so which field carries what is settled per account.

PUT /entity/Default/26.200.001/SalesOrder?$expand=Details HTTP/1.1
Host: harborsupply.acumatica.com
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json

{
  "OrderType": { "value": "SO" },
  "CustomerID": { "value": "C10432" },
  "CustomerOrder": { "value": "SHOP-100482" },
  "Details": [
    { "InventoryID": { "value": "KB-2210" },
      "WarehouseID": { "value": "MAIN" },
      "OrderQty": { "value": 12 } }
  ]
}

The flows per subject are on order integration and multi-location inventory.

How Acumatica exposes data

Contract-based REST endpoints

The main interface is the contract-based REST API. Every endpoint has a name and a version in its URL: /entity/Default/26.200.001 is the system endpoint of 2026 R2. The version decides which entities, fields and actions exist. A system endpoint cannot be changed, and Acumatica keeps it working in later versions, so an integration on Default/26.200.001 survives the next upgrade. Acumatica also states that obsolete system endpoints may be removed in some version.

When the Default endpoint lacks a field, there are two routes. The $custom parameter returns fields that are not in the contract: a form element as ItemSettings.UsrRepairItemType, or a user-defined field as <view>.Attribute<AttributeID>. Or the endpoint is extended with new fields and entities, which then has to be maintained with each Acumatica version. Generic inquiries can also be exposed through OData, which is the route for bulk reads such as stock for a whole catalog.

Authentication

Acumatica supports a cookie-based sign-in at /entity/auth/login with name, password, tenant and branch, and OAuth 2.0 through a connected application registered on the Connected Applications form (SM303010). Acumatica's documentation says direct sign-in with a username and password will be discontinued in a future version and recommends OAuth 2.0. For an unattended integration the flows that issue a refresh token are Authorization Code and Resource Owner Password Credentials. A refresh token can be used within 30 days of its first issue; with sliding expiration switched on for the application, every use extends it, up to an absolute lifetime you set or without end. OAuth requires the Acumatica site to run on HTTPS.

The REST sign-in bypasses two-factor authentication, so the integration user is a separate user type with only the rights the flows need.

Three license limits

Limit Shown on SM604000 as What happens over it
API sessions Maximum Number of API Sessions sign-in refused with an error
Concurrent requests Maximum Number of Concurrent API Requests request waits in Acumatica's queue
Requests per minute Maximum Number of API Requests per Minute from 50% of the limit, each request is delayed

A request is declined when more than 20 requests are in the queue or when it has waited longer than 10 minutes. Acumatica does not say that a request is queued; the client stays connected and waits. A session that is never signed out keeps counting against the session limit and can lock other integrations out.

The delay is computed per request. Acumatica's example: a limit of 50 per minute, 25 requests processed in the past minute, and 20 seconds left in that minute. The remaining capacity is 50 minus 25, which is 25 requests, so each request waits 20 divided by 25, which is 0.8 seconds.

50 API requests in one second against a license with 16 concurrent requests Acumatica's own example: 50 requests arrive in the same second and each takes one second. 16 go straight to the API processing cores, 20 wait in the internal queue, and 14 are declined because the queue holds no more than 20. When the integration keeps its own queue and sends 8 at a time, all 50 are processed. 50 requests sent at once, license limit of 16 concurrent requests 50 Processed at once 16 Wait in Acumatica's queue 20 Declined 14 Requests declined 14 The same 50 requests from an integration that sends 8 at a time 50 Processed 50 Requests declined 0
Acumatica queues up to 20 requests and declines the rest. An integration that keeps its own queue never reaches that point.

The arithmetic for stock on a license with that limit of 50 per minute: reading 15,000 items one inquiry call at a time is at least 15,000 divided by 50, which is 300 minutes, five hours, before any order gets a slot. That is why we read stock in bulk through a generic inquiry or a filtered query, and keep single-item calls for orders. The pattern is on integration throughput and API throttling and backoff.

Push notifications

Acumatica can push changes in a generic inquiry or a built-in query to a webhook URL, a message queue or a SignalR hub. A notification that fails to send is listed on Process Push Notifications (SM502000) and can be resent for two days, after which it is deleted. We use push notifications as a trigger and run a reconciliation pass next to them, so a notification that was never resent does not leave a gap.

Where an Acumatica integration gets stuck

Template items and matrix items. With the Matrix Items feature on, a product with sizes and colors is a template item with matrix items generated from attributes of the Variant category. The template item cannot be on a sales order, only the matrix items can. The store's product with variants maps to the template, each variant to one matrix item, and stock is tracked per matrix item. See variant mapping.

"Available" depends on the item class. Each item class has an availability calculation rule (IN201500) with switches such as Deduct Qty. on Sales Prepared and Deduct Qty. on Sales Orders. Two items in different classes can show a different Available figure for the same physical stock. The integration reads the quantity your rules define and the store shows that number, which is the subject of which stock counts.

Item codes that are not unique. Cross-references carry barcodes, GTINs and customer part numbers, and Acumatica does not check alternate IDs for uniqueness. Entering a new alternate ID on a sales order line creates or replaces a customer-specific one. The integration matches on InventoryID and treats a cross-reference hit on two items as an exception.

Custom fields per customization project. Fields added by a partner are named Usr... and live in a customization project. They are reachable through $custom or an endpoint extension, and the extension has to move with every upgrade.

Platforms we integrate with Acumatica

The Shopify combination is on Shopify Acumatica integration. The store side is described per platform on Shopify, BigCommerce and Magento. EDI with retailers and distributors is on Acumatica EDI integration.

We build the integration to your license numbers, endpoint and custom fields, then host, run and monitor it for a monthly fee. Before go-live it runs as a dry run that writes nothing to Acumatica, so you see every order and stock change it would make. All integrations come with a dashboard, logs and a per-run diff. Tell us what runs on your Acumatica.

Frequently asked questions

What are the API limits of my Acumatica license?

They are on the License and Constraints tab of the License Monitoring Console (SM604000): Maximum Number of API Sessions, Maximum Number of Concurrent API Requests and Maximum Number of API Requests per Minute. Acumatica does not publish one table for all licenses, because the limits follow the resource level you buy. A trial license allows 2 API sessions and sets no other limits.

What happens when the integration sends too many requests?

Acumatica queues them. Once the requests of the past minute reach 50% of the per-minute limit, each new request is delayed. A request is declined when more than 20 requests are waiting or when it has waited more than 10 minutes. Our integrations keep their own queue and send fewer requests at a time than the license allows, so Acumatica never has to decline one.

Does the integration need its own Acumatica user?

Yes. It runs under a user with only the access rights its flows need. Acumatica lets you limit the number of API sessions per user type, so one integration cannot take all the sessions of the license from the others. Two-factor authentication is bypassed by the REST sign-in method, which is one more reason to keep that user separate.

Will the integration survive an Acumatica upgrade?

Acumatica keeps system endpoints such as Default/26.200.001 working in later versions, so an integration on a system endpoint keeps running after an upgrade. A custom endpoint or an endpoint extension has to be maintained with each version, and Acumatica states that obsolete system endpoints may be removed. We test the integration against the new version in a sandbox before your production upgrade.

Does Acumatica have its own Shopify connector?

Yes. Acumatica's Commerce Edition includes connectors for Shopify and BigCommerce that synchronize items, template items and orders. A custom integration is built for the rules that a configured connector does not cover, such as supplier stock, a different order flow or a store platform it does not support. See Shopify Acumatica integration.

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