ml-connector
SYSPROPlaid

SYSPRO and Plaid integration

SYSPRO runs manufacturing finance and procurement. Plaid connects to your bank and investment accounts. Linking the two closes the loop between the invoices and POs SYSPRO creates and the actual cash movements in your bank account. Bank transactions flow into SYSPRO so accounts payable and receivable teams match payments to invoices without manual reconciliation. ACH transfers initiated in Plaid can trigger matching GL postings in SYSPRO, keeping your cash account and general ledger in sync.

How SYSPRO works

SYSPRO Adaptive ERP exposes suppliers, purchase orders, supplier invoices, AR invoices, GL accounts, cash accounts, and inventory through e.net Business Objects (REST and SOAP) for read and write, and OData (REST) for read-only access. Authentication uses a session token obtained by logging in to Utilities/Logon and passing a UserId GUID on all calls, or HTTP Basic Auth with auto-generated SQL credentials for OData. SYSPRO publishes no shared cloud base URL, so the customer must supply their server address and port. The system has no outbound webhook capability, so finance records are read by polling OData tables with timestamp filters on PostDate and InvoiceDate at recommended intervals of 5 to 15 minutes.

How Plaid works

Plaid connects to bank accounts, credit cards, and investment accounts at thousands of financial institutions. It exposes account balances, transactions up to 24 months back, and transaction history through REST endpoints, with write capabilities for ACH and wire transfers. Authentication requires Plaid client credentials (client_id and secret) plus per-user access tokens obtained through the Plaid Link flow, a three-step OAuth-like process the user completes once per bank account. Plaid uses webhook notifications to alert applications to new transactions, account changes, and transfer events, and requires request signature verification via JWT with ES256 and SHA-256 body hash.

What moves between them

Bank transactions flow from Plaid into SYSPRO. When Plaid detects new transactions at a connected financial institution, it sends a webhook notification. ml-connector receives the notification, verifies its JWT signature, and fetches the full transaction details from Plaid. Each transaction is matched to an open invoice or payable in SYSPRO's AR and AP modules by amount, posting date, and reference data. If a match is found, the transaction is marked as paid or applied in SYSPRO and a GL posting updates the cash account. The flow is read-heavy from Plaid and write-capable to SYSPRO; GL accounts and cost centers are mapped during setup so payments land on valid SYSPRO dimensions. ACH transfers can be initiated in Plaid and recorded in SYSPRO's cash reconciliation log.

How ml-connector handles it

ml-connector stores SYSPRO session credentials and Plaid API keys encrypted. On startup it logs into SYSPRO using e.net Business Objects and caches the UserId session token until timeout, at which point it re-authenticates. Plaid connections are per-user, so ml-connector stores one Plaid item token per bank account the customer has authorized through Plaid Link. When a Plaid webhook arrives, ml-connector verifies the JWT signature by fetching Plaid's ES256 public key, checks the iat claim is fresh (within 5 minutes), and computes a SHA-256 hash of the raw body to compare against the request_body_sha256 claim. If verification succeeds, the transaction data is fetched from Plaid using pagination cursors to handle up to 24 months of history, then matched to SYSPRO payables using the vendor and amount. Write operations to SYSPRO use the e.net Business Objects API and respect the customer's URL and operator permissions. Plaid transfer descriptions are capped at 10-15 characters depending on the transfer type (ACH vs RTP), so ml-connector truncates longer ones and logs the full context in the audit trail. The integration respects both systems' rate limits and retries transient failures with exponential backoff.

A real-world example

A mid-sized wholesale distributor runs SYSPRO for procurement and finance across three regional warehouses. They use Plaid to aggregate bank accounts at two banks and a credit line in one dashboard. Before the integration, the accounting team spent two afternoons per week reconciling bank statements against SYSPRO's cash and payables accounts by hand, often missing cleared checks or transfers that took several days to settle. With SYSPRO and Plaid connected, bank transactions post into SYSPRO's cash reconciliation as soon as Plaid detects them, and open invoices are automatically matched to payments. The team now completes monthly reconciliation in one session, and outstanding exceptions are few enough to handle on demand rather than in a scheduled batch.

What you can do

  • Receive bank transactions from Plaid via webhooks and match them to open invoices and payables in SYSPRO.
  • Verify Plaid webhook signatures using JWT ES256 validation and SHA-256 body integrity checks.
  • Map Plaid transactions to SYSPRO GL accounts and cost centers so cash movements land on the correct ledger accounts.
  • Initiate ACH and wire transfers from Plaid and record the corresponding cash postings in SYSPRO.
  • Poll SYSPRO OData tables for financial data and maintain a full audit trail of every transaction and error.

Questions

Which direction does data move between SYSPRO and Plaid?
The primary flow is Plaid to SYSPRO. Bank transactions detected by Plaid flow into SYSPRO where they are matched to invoices and payables. ACH and wire transfers can be initiated in Plaid and recorded in SYSPRO's reconciliation log. Reference data such as GL accounts and cost centers is configured during setup but does not flow automatically.
Does ml-connector need to poll SYSPRO, or does SYSPRO push data?
SYSPRO does not support outbound webhooks, so ml-connector polls OData tables using timestamp filters on PostDate and InvoiceDate at intervals of 5 to 15 minutes. Plaid, in contrast, pushes transaction notifications via webhooks, so ml-connector receives updates as soon as transactions are available at the bank.
What happens if a Plaid webhook signature verification fails?
ml-connector rejects the webhook and returns an error, preventing invalid or tampered requests from entering SYSPRO. Verification checks the JWT alg (must be ES256), the iat claim (must be recent), and the SHA-256 body hash. If any check fails, the webhook is not processed and the failure is logged in the audit trail.

Related integrations

Connect SYSPRO and Plaid

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

Get started