ml-connector
Oracle JD EdwardsGusto

Oracle JD Edwards and Gusto integration

Oracle JD Edwards EnterpriseOne runs your financials and operations. Gusto handles payroll and HR. Connecting the two keeps employee records aligned and posts payroll labor costs into your JD Edwards general ledger automatically after each pay run. New hires in Gusto appear in the JD Edwards address book and HR tables, and payroll GL documents flow into your chart of accounts without re-keying. ml-connector bridges the very different authentication models and APIs on each side.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne exposes suppliers, purchase orders, accounts payable, GL accounts, cost centers, items, address book records, and journal entries through REST API via a customer-hosted Application Interface Services (AIS) Server. Authentication uses a session token obtained by POST to /jderest/v2/tokenrequest with username and password, returned as an opaque token passed in the jde-AIS-Auth header on all subsequent requests. HTTP Basic Auth per-request is also supported on Tools 9.2.5.2 and later. The AIS Server runs at a customer-specific URL with no shared public hostname. JD Edwards has no native outbound webhooks, so payroll and employee records are read by polling with a date filter on the UPMJ or DGJ timestamp fields. Session tokens expire in 30 to 60 minutes by default and are invalidated on AIS Server restart. Pagination uses maxPageSize parameters with a moreRecords flag for continuation. All writes to JD Edwards tables require orchestrations imported into Orchestrator Studio.

How Gusto works

Gusto exposes employees, jobs, compensations, payrolls, contractors, benefits, pay schedules, and terminations through REST API at https://api.gusto.com. Authentication uses OAuth2 Authorization Code flow with an access token valid for 2 hours and a refresh token that never expires but rotates on use. Each OAuth token is scoped to a single company. Gusto pushes payroll events (created, updated, calculated, submitted, processed, paid, failed, cancelled, reversed), employee events (created, updated, onboarded, terminated), contractor events, and bank account events to a registered webhook endpoint, with HMAC-SHA256 signature verification and up to 16 retries over 3 days if the endpoint does not return 2xx within 10 seconds. Rate limits are 200 requests per minute per OAuth grant. All dollar amounts are returned as string decimals. Pagination supports both page-based (page, per params) and cursor-based (starting_after_uuid, limit) styles. Gusto has no GL accounts, invoices, POs, or native accounting dimensions.

What moves between them

Employees and contractors flow from Gusto into JD Edwards address book (F0101) and HR tables. When Gusto processes payroll, ml-connector reads the calculated payroll records and posts labor cost journals into JD Edwards GL (F0911) with lines allocated to the matching cost centers and GL accounts. Pay-frequency metadata, pay dates, and earnings codes are mapped from Gusto to JD Edwards GL dimension tables so each payroll GL entry references a valid chart of accounts and cost center. Changes to employee status (onboarding, termination, rehire) in Gusto flow into JD Edwards through webhooks to keep headcount aligned. GL documents are read-only in Gusto, so ml-connector never writes financial transactions back to payroll.

How ml-connector handles it

ml-connector stores the AIS Server hostname, username, and password encrypted and obtains a session token by POST to /jderest/v2/tokenrequest before each polling cycle. It monitors for HTTP 444 responses signaling token expiration and re-authenticates transparently. On the Gusto side it refreshes OAuth tokens before expiration and subscribes to webhook events for payroll, employee, and contractor changes, verifying each webhook signature with HMAC-SHA256 using the registered subscription token. Payroll GL entries are mapped first to JD Edwards cost centers and GL accounts so that when labor journals post, they land on valid dimensions. ml-connector polls JD Edwards on a configurable cron schedule aligned to your payroll calendar and batches payroll journals using JDE orchestration services. Because Gusto's token refreshes happen once per 2-hour window and JD Edwards sessions last 30 to 60 minutes, ml-connector maintains separate cache keying for each auth boundary. Gusto's 200 req/min rate limit per company is tracked and backed off when 429 returns. AIS Server URL is customer-specific with no shared base URL, so ml-connector stores and validates against the full instance URL per customer. Every record carries a full audit trail.

A real-world example

A regional staffing and business services company runs Oracle JD Edwards on-premises to manage AP, projects, and GL. They use Gusto for payroll and benefits across three office locations. Before the integration, the finance team ran a manual extract from Gusto each week, mapped payroll GL entries to JD Edwards cost centers by location, and posted them as journal batches into the ledger, a task that took 4 to 6 hours and risked discrepancies when employees were hired or terminated. With the integration, each payroll run's GL documents flow into JD Edwards automatically, allocated to the correct cost center per location and employee. Employee onboarding in Gusto now creates the matching address book record in JD Edwards within hours, and terminations are reflected immediately. Finance staff can verify the journal totals against the payroll register and close month-end without manual re-keying or reconciliation lag.

What you can do

  • Sync employees and contractors from Gusto into Oracle JD Edwards address book and HR tables via orchestrations, keeping headcount aligned across both systems.
  • Post Gusto payroll GL entries into JD Edwards general ledger after each pay run, allocated to the correct cost centers and GL accounts.
  • Subscribe to Gusto webhook events for payroll, employee, and contractor changes so updates flow in near-real-time without polling gaps.
  • Authenticate Oracle JD Edwards via AIS Server session tokens and Gusto via OAuth2 refresh tokens, managing token expiration and re-authentication transparently.
  • Track and respect Gusto's 200 req/min rate limits and JD Edwards pagination windows, with retries and a full audit trail on every record.

Questions

How does the integration handle Oracle JD Edwards session tokens expiring every 30 to 60 minutes?
ml-connector obtains a token before each polling cycle by POST to /jderest/v2/tokenrequest and monitors for HTTP 444 responses signaling expiration. When 444 is returned, it re-authenticates transparently on the next request. Because JD Edwards has no persistent webhook mechanism, polling cycles are aligned to your payroll calendar and token refresh is handled automatically as part of each cycle.
Which direction do employee and payroll records move between Gusto and Oracle JD Edwards?
Employees and contractors flow from Gusto into JD Edwards address book and HR tables via orchestrations. Payroll GL documents calculated by Gusto are read and posted into JD Edwards GL with cost center and GL account mapping. JD Edwards data does not write back into Gusto payroll. This read-mostly architecture protects payroll integrity while keeping headcount and GL coding aligned.
Does the integration work across multiple Gusto companies or JD Edwards cost centers?
Yes. Each Gusto OAuth token is scoped to one company, so multi-company payroll setups require separate tokens and configurations per company. ml-connector maps Gusto employees to JD Edwards cost centers by a configured business unit or location dimension, so payroll GL entries land on the correct JD Edwards GL account and cost center combination for each office or plant location.

Related integrations

Connect Oracle JD Edwards and Gusto

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

Get started