ml-connector
AcumaticaWorkday HCM

Acumatica and Workday HCM integration

Acumatica runs finance, procurement, and the general ledger. Workday HCM runs HR, payroll, and workforce accounting. Connecting the two keeps the ledger and the workforce in agreement. The labor and payroll accounting journals Workday produces after each pay run post into Acumatica's general ledger without re-keying, and new hires and terminations in Workday line up with Acumatica employee records and cost centers. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How Acumatica works

Acumatica Cloud ERP exposes vendors, AP bills, purchase orders, payments, GL accounts, journal transactions, employees, and subaccounts through its Contract-Based REST API, with JSON over HTTPS and an OpenAPI spec served from each instance. It authenticates with OAuth 2.0 through the built-in identity server or a legacy session cookie, against a tenant-specific instance URL whose endpoint version in the path must exactly match the running ERP release or the call returns 404. All field values are wrapped in value objects. Acumatica can push change notifications by HTTP POST secured with a shared-secret header, but those deliveries are not guaranteed, so records are most reliably read by polling on LastModifiedDateTime.

How Workday HCM works

Workday HCM is a single-tenant cloud platform with three integration surfaces. Its REST API covers workers, positions, and organizations and authenticates with OAuth 2.0 using a refresh-token grant whose access tokens expire in 60 minutes. Its SOAP Web Services cover Financial Management, including accounting journals, ledger accounts, cost centers, and payments, and authenticate with WS-Security using an Integration System User username and password. Every URL is tenant-specific, so the customer must supply their host and tenant name. Workday has no native webhooks, so all data is read by scheduled polling, and SOAP Submit operations create duplicates if re-sent.

What moves between them

The main flow runs from Workday HCM into Acumatica. After each pay run, ml-connector reads Workday accounting journals through the Financial Management SOAP service and posts the labor cost lines into Acumatica as journal transactions, mapped to the matching Acumatica GL accounts and subaccounts. Worker records flow the same direction so Acumatica employee records reflect Workday hires, terminations, and rehires. Reference data such as cost centers and departments is aligned so payroll allocations resolve to valid Acumatica dimensions. Acumatica is the general ledger of record, so ml-connector reads journals out of Workday and never writes financial entries back into Workday.

How ml-connector handles it

ml-connector stores both credential sets encrypted and bridges two auth models on the Workday side: an OAuth 2.0 refresh-token bearer for REST worker reads, refreshed before its 60-minute expiry, and a WS-Security UsernameToken built from the Integration System User for the SOAP Financial Management calls that carry the journals. On the Acumatica side it accepts the full tenant instance URL per customer and pins the endpoint version in the path to the customer's ERP release, since a mismatch returns 404, and it wraps every field value in the required value object so writes are not rejected. Because both systems are pull-only, it polls Workday journals and worker data on a schedule tied to your payroll calendar and polls Acumatica on LastModifiedDateTime rather than relying on a push. Cost centers and accounts are mapped first, so every journal line references an Acumatica GL account and subaccount that already exists. Workday SOAP Submit calls are not idempotent and Acumatica has no idempotency header, so ml-connector dedupes on the Workday journal reference and a BullMQ jobId before posting, which prevents double-booking a re-read journal. It backs off on the HTTP 429 each side returns and tracks the Workday token and refresh-token state so an expiry does not turn into a silent outage.

A real-world example

A mid-sized professional services firm with roughly 500 employees runs Acumatica Cloud ERP for finance and project accounting and runs Workday HCM for HR and payroll across several offices. Before the integration, the finance team exported the payroll journal from Workday each pay period and re-keyed the labor totals into Acumatica by hand, then spent the start of month-end close chasing differences between HR headcount and the salary and wage accounts in the ledger. With Acumatica and Workday HCM connected, each pay run's accounting journal flows into Acumatica automatically, allocated to the right cost center and subaccount, and worker changes keep the two systems aligned. Month-end close starts with the labor accounts already reconciled, and the manual re-keying step is gone.

What you can do

  • Post Workday HCM payroll accounting journals into Acumatica as journal transactions after every pay run, allocated to the correct GL accounts and subaccounts.
  • Keep Acumatica employee records aligned with Workday hires, terminations, and rehires.
  • Map Workday cost centers and departments to Acumatica subaccounts so payroll lands on valid dimensions.
  • Bridge Workday OAuth 2.0 refresh-token REST and WS-Security SOAP to Acumatica's tenant instance login and version-locked endpoints.
  • Poll on a schedule tied to your payroll calendar, with 429 backoff, journal-reference dedup, and a full audit trail on every record.

Questions

Which direction does data move between Acumatica and Workday HCM?
The main flow is Workday HCM into Acumatica. Payroll accounting journals and worker records move from Workday into Acumatica, while cost centers and departments are aligned so postings land on valid dimensions. Acumatica is the general ledger of record, so ml-connector reads journals out of Workday and does not write financial entries back into Workday.
Why does the integration use both REST and SOAP on the Workday side?
Workday's REST API covers workers and staffing but does not cover Financial Management, so the payroll accounting journals, ledger accounts, and cost centers are only available through the SOAP Web Services. ml-connector uses the OAuth 2.0 refresh-token REST surface for worker reads and the WS-Security SOAP surface for the financial journals. It maintains both auth paths so a single connection covers headcount and the labor ledger.
How does the integration avoid duplicate journals given neither system has webhooks?
Both Acumatica and Workday are pull-only, so ml-connector polls Workday journals on your payroll calendar and polls Acumatica on LastModifiedDateTime. Because Workday SOAP Submit calls are not idempotent and Acumatica has no idempotency header, it deduplicates on the Workday journal reference and a BullMQ jobId before posting. That prevents a re-read journal from being booked twice in Acumatica.

Related integrations

Connect Acumatica and Workday HCM

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

Get started