ml-connector
Oracle JD EdwardsPlaid

Oracle JD Edwards and Plaid integration

JD Edwards tracks accounts payable, GL accounts, and vendor ledgers. Plaid connects to your bank to read transactions and initiate payments. Connecting them means your bank transactions are automatically matched against open invoices in JD Edwards and settled without re-keying, and ACH and wire transfers initiated from Plaid post into the Accounts Payable Ledger with full audit. Reconciliation shifts from a manual three-day task to a one-click daily process.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is an on-premises ERP suite exposing financials, procurement, manufacturing, and distribution through REST APIs. The AIS Server runs at customer infrastructure on a customer-provided hostname and port. Authentication uses a session token obtained via POST /jderest/v2/tokenrequest with username and password, returned as an opaque token passed in the jde-AIS-Auth header on all subsequent requests. Key tables include F0401 (Supplier Master), F0411 (Accounts Payable Ledger), F0411Z1 (Batch Voucher Entry), F0901 (GL Account Master), and F0911 (GL Account Ledger). JD Edwards has no native outbound webhooks, so connectors poll the data service tables with a UPMJ date filter and track the last-polled timestamp.

How Plaid works

Plaid is a financial data network connecting applications to bank accounts and payment systems. It exposes account balances, transactions, and transfer capabilities through REST endpoints over HTTPS. Authentication uses client_id and secret as custom headers (PLAID-CLIENT-ID and PLAID-SECRET) or request body fields. Per-user access tokens are obtained through a three-step Plaid Link flow that returns an access_token after user consent. Plaid pushes transaction updates, account changes, and transfer status via webhooks with ES256 JWT signatures and body SHA-256 hashes. Webhook events carry types such as TRANSACTIONS (SYNC_UPDATES_AVAILABLE, INITIAL_UPDATE, TRANSACTIONS_REMOVED) and TRANSFER (TRANSFER_EVENTS_UPDATE), with retries for up to 24 hours on failure.

What moves between them

Bank transactions flow from Plaid into JD Edwards. When Plaid delivers a TRANSACTIONS webhook, ml-connector reads the new and updated transactions from Plaid, matches them against open invoices in the JD Edwards F0411 Accounts Payable Ledger by amount, date, and supplier, and posts a settlement record into F0411Z1 (Batch Voucher Entry) for each matched payment. ACH and wire transfers initiated through Plaid generate TRANSFER_EVENTS_UPDATE webhooks that ml-connector receives and logs into the GL Account Ledger (F0911) as cash application records. GL account reconciliation flows from the bank only; JD Edwards never writes back into Plaid.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the JD Edwards AIS Server URL, username, and password to obtain session tokens; and the Plaid client_id and secret used on every API call. Session tokens expire in 30 to 60 minutes and return HTTP 444 on re-use after expiry, triggering a fresh /jderest/v2/tokenrequest. Plaid webhooks arrive signed with ES256 JWT and a body SHA-256 hash; ml-connector validates the JWK signature and rejects events with alg != ES256 or iat claims older than 5 minutes. Transaction matching logic checks Plaid transaction amount against JD Edwards open invoice amounts (F0411 AMOUNTDUE), uses the transaction date to find invoices due within +/- 3 days, and optionally matches on supplier name if the bank memo carries vendor data. Matched payments generate a single batch voucher in F0411Z1 with SYCO (system code) and a batch number as a dedup key, so replaying the same transaction webhook does not double-post. Unmatched transactions are logged to audit and require manual review via a Plaid transaction dashboard view within the JD Edwards control plane. Plaid rate limits and JD Edwards AIS Server load are both handled with exponential backoff and jitter, with explicit retry logic on Plaid 429 (rate limit) and JD Edwards 500-series errors.

A real-world example

A mid-market wholesale distributor runs JD Edwards for procurement and finance, with Plaid connected to their primary operating account. The accounts payable team previously spent 2 to 3 hours daily matching bank deposits against open invoices and entering payment settlement records by hand. Many invoices were paid in lump-sum ACH transfers that required manual lookup against multiple supplier ledgers. With Plaid and JD Edwards connected, each day's bank transactions arrive automatically matched to open invoices, and the AP team reviews a single daily summary of matched and unmatched items. Matched payments post into the GL automatically, eliminating data entry, and the reconciliation closes same-day rather than rolling into the next morning.

What you can do

  • Match bank transactions from Plaid against open invoices in the JD Edwards Accounts Payable Ledger by amount, date, and supplier name.
  • Post matched payments into the JD Edwards Batch Voucher Entry table (F0411Z1) with dedup logic so replayed webhook events do not double-post.
  • Validate Plaid webhook signatures using ES256 JWT and body SHA-256, and reject events more than 5 minutes old.
  • Refresh JD Edwards session tokens automatically when they expire, and retry failed matches with exponential backoff on 429 and 500-series errors.
  • Log unmatched transactions and transfer events to audit with full traceability so the AP team can review gaps in the control plane dashboard.

Questions

How does ml-connector match bank transactions to JD Edwards invoices?
ml-connector compares the Plaid transaction amount against JD Edwards F0411 (Accounts Payable Ledger) open invoice amounts within a +/- 3 day date range. If the bank memo contains supplier data, it also matches on vendor name. A match generates a single settlement record in the Batch Voucher Entry table (F0411Z1) with a dedup key so re-delivering the same webhook does not create duplicate posts.
What happens to transactions that do not match any open invoice?
Unmatched transactions are logged to the audit trail with the Plaid transaction ID, amount, date, and memo. The AP team reviews them in a control plane dashboard, investigates (missing invoice, invoice number in memo, partial payment, etc.), and manually posts settlement if needed. This keeps the automated happy-path clean while surfacing exceptions.
Does JD Edwards session token expiry require special handling?
JD Edwards tokens expire in 30 to 60 minutes (configurable per customer) and return HTTP 444 on re-use. ml-connector automatically catches this response, refreshes the token by calling /jderest/v2/tokenrequest with the stored credentials, and retries the original call without manual intervention.

Related integrations

Connect Oracle JD Edwards and Plaid

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

Get started