ml-connector
Epicor KineticSquare

Epicor Kinetic and Square integration

Epicor Kinetic runs your manufacturing and distribution, while Square captures sales, payments, and inventory at your point-of-sale and locations. Connecting the two keeps your financial and operational records in one place. Square payment records and orders post into Epicor as accounts receivable transactions and customer records, inventory adjustments flow back into your stock ledger, and cash reconciliation happens automatically without manual re-entry.

How Epicor Kinetic works

Epicor Kinetic is a cloud and on-premises ERP exposing business objects through REST and OData v4 endpoints scoped to a company segment and tenant instance. The API supports authentication via Basic Auth, API Key (combined with bearer token), OAuth2 client credentials on cloud SaaS, or Token Resource Service on on-premises installations. Key entities include Customers, APInvoices, PurchaseOrders, GLAccounts, Parts, and custom Business Activity Queries. Epicor offers polling only; there are no native webhooks for outbound events, so integrations query with OData filters on date fields to retrieve changed records since the last sync. Bearer tokens expire in approximately one hour. Write operations for complex objects require a two-step pattern: GetNewXxx followed by UpdateMaster.

How Square works

Square exposes payments, invoices, orders, customers, vendors, inventory, and point-of-sale data through a versioned REST API with OAuth2 bearer tokens or Personal Access Token authentication. Access tokens expire in 30 days; refresh tokens obtained via the Authorization Code flow do not expire. Square provides native outbound webhooks for payment, order, customer, invoice, and inventory events with HMAC-SHA256 signature verification. Webhook events include payment.created, payment.updated, order.updated, customer.created, customer.updated, invoice.published, and inventory.count.updated. The Vendors API is in beta. Orders and inventory can be read and written; shifts and team members are read-only.

What moves between them

Square payment and order events flow into Epicor in real-time via webhooks. Each Square payment posts to Epicor as a customer payment applied to an accounts receivable transaction. Each Square order creates or updates a Customer record in Epicor and, if invoiced, posts as an AR invoice. Square inventory count changes trigger adjustments in Epicor's Parts ledger, mapped to the location-specific warehouse accounts. Conversely, ml-connector polls Epicor for new Customers and GLAccounts on a schedule to validate that Epicor's chart of accounts and customer dimension match what Square can write to. Refunds in Square map to AR credit memos in Epicor.

How ml-connector handles it

ml-connector listens for Square webhooks at a registered endpoint, verifies each webhook signature using HMAC-SHA256, and transforms the payment, order, and refund payloads into Epicor OData transactions. It maps Square Location IDs to Epicor company segments and sales territories, and Square Customer IDs to Epicor Customer records, creating new customers in Epicor if they do not exist. For inventory, each Square catalog item maps to an Epicor Part, and count adjustments are posted as GL transactions to location-specific stock accounts. ml-connector refreshes Square access tokens before expiry, retries failed postings with exponential backoff when Epicor rate limits are encountered, and tracks the full audit trail for every transaction so replays and reversals can be issued if a posting fails downstream. Because Epicor is company-scoped and on-premises instances may not share OAuth infrastructure, ml-connector validates the tenant URL and API Key per customer deployment.

A real-world example

A mid-sized food service distributor runs Epicor Kinetic at the head office to manage purchasing, inventory, and general ledger, and Square at three regional hubs as the point-of-sale system for customer cash sales. Before integration, the back-office team exported daily sales reports from Square each morning and entered the totals into Epicor by hand, then reconciled cash receipts at month-end, a process that took two days. Payments often sat in limbo between the two systems, and stock adjustments were entered late, making the inventory balance unreliable. With Square and Epicor connected, each payment posts automatically to AR, inventory adjustments sync in real-time, and cash reconciliation takes minutes. The sales data is always current, and the finance team can close the books two days earlier.

What you can do

  • Post Square payments and refunds into Epicor accounts receivable, mapped to the correct customer and GL account.
  • Sync Square orders into Epicor as customer records and AR invoices without manual re-entry.
  • Adjust inventory in Epicor when Square counts change, allocated to the location-specific warehouse account.
  • Handle Square OAuth2 token refresh and Epicor Basic Auth or OAuth2, plus API Key requirements on each request.
  • Verify Square webhook signatures and poll Epicor on a schedule for reconciliation and full audit trail on every transaction.

Questions

Which way does data flow between Epicor Kinetic and Square?
Primarily from Square into Epicor. Payments, orders, refunds, and inventory changes in Square trigger posts to Epicor as AR transactions, customer records, and stock adjustments. ml-connector polls Epicor for new customers and GL accounts to validate mappings and ensure Square writes land on accounts that exist.
How does ml-connector handle Epicor's polling-only model and Square's webhooks?
ml-connector listens for Square webhooks in real-time to capture payments and orders the moment they occur. For Epicor, it polls at a schedule to verify the receipt of postings and to reconcile new customers and GL accounts added outside the integration. This hybrid approach ensures immediate data flow from Square and eventual consistency with Epicor's slower poll window.
What happens if a Square payment fails to post to Epicor?
ml-connector retries the posting with exponential backoff when Epicor returns a rate limit or transient error. Each attempt is logged with full details so the finance team can see exactly which transactions were retried and when. If a posting continues to fail, ml-connector surfaces the error with enough context to diagnose the root cause, such as a missing customer record or GL account mismatch.

Related integrations

Connect Epicor Kinetic and Square

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started