ml-connector
QADJAGGAER

QAD and JAGGAER integration

QAD runs manufacturing, procurement, and finance. JAGGAER ONE runs Source-to-Pay procurement and invoice automation. Connecting the two lets purchase orders and supplier invoices recorded in QAD flow into JAGGAER for AP processing and approval, while payment status moves back so suppliers know when a bill is paid. Supplier master data and the chart of accounts used for invoice coding stay aligned across both systems. ml-connector handles the different APIs on each side and moves the data on a schedule you control.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, GL accounts, cost centers, items, and goods receipts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. QAD supplier invoices clear a three-way match against PO receipts, so receipts must post before the invoice. QAD has no public webhook system for cloud connectors, so finance records are read by polling.

How JAGGAER works

JAGGAER ONE exposes invoices, purchase orders, suppliers, GL accounts, and custom dimensions through the J1P Public API, a REST and JSON surface under the /j1p/api/public/ path on a tenant-specific hostname. Authentication is OAuth 2.0 client credentials against a Keycloak realm named J1p-integrations, returning a short-lived bearer token sent on every call. Invoices and POs and supplier records are read and written; GL accounts and payment status are imported and read-only on the JAGGAER side. JAGGAER also supports cXML for supplier-side PO delivery and invoice receipt. An event-driven push mode exists but is not publicly documented, so J1P is treated as pull-only until JAGGAER professional services configures it.

What moves between them

The main flow runs from QAD into JAGGAER. ml-connector reads supplier invoices that have cleared their three-way match in QAD, along with the related purchase orders, and imports them into JAGGAER for AP processing and approval. Supplier master data and GL coding accounts move from QAD into JAGGAER so invoices code to valid accounts and reference known vendors. Payment status flows back from QAD into JAGGAER once an invoice is paid, since payment confirmation is read-only on the JAGGAER side and the platform passes it on to the supplier. GL accounts are import-only in JAGGAER, so ml-connector never writes ledger structure back from procurement into QAD.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the JAGGAER side it requests an OAuth client-credentials token from the Keycloak realm J1p-integrations and refreshes it when a call returns 401, since the J1P token lives about an hour. On the QAD side it accepts the full tenant URL per customer, because QAD publishes no shared base address, and validates entity paths against that instance. Both systems are pull-only for ERP reads, so it polls QAD supplier invoices and POs on a schedule rather than waiting for a push. Suppliers and GL accounts are mapped first, so every imported invoice references a vendor and coding account that already exist in JAGGAER. Because QAD enforces a three-way match, only invoices that have matched PO receipts are sent, which keeps unverified bills out of JAGGAER. Invoice import has no idempotency-key header, so ml-connector keys on the supplier invoice number, which JAGGAER deduplicates internally, and the same number is never imported twice. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A public-sector agency with several hundred staff runs QAD Adaptive ERP for procurement and finance and uses JAGGAER ONE for sourcing, supplier management, and invoice automation. Before the integration, buyers raised purchase orders in QAD, then AP staff re-keyed matched supplier invoices and supplier details into JAGGAER for the approval workflow, and suppliers had no visibility into payment timing. With QAD and JAGGAER connected, matched invoices and their POs flow into JAGGAER for approval automatically, supplier and account data stays consistent, and payment status posts back so vendors see when they have been paid. The duplicate data entry between procurement and AP is gone.

What you can do

  • Import QAD supplier invoices that have cleared their three-way match into JAGGAER for AP processing and approval.
  • Sync purchase orders from QAD into JAGGAER so each invoice ties back to its order.
  • Keep supplier master data and GL coding accounts aligned between QAD and JAGGAER.
  • Write QAD payment status back into JAGGAER so suppliers see when a bill is paid.
  • Bridge the QAD tenant login and the JAGGAER OAuth client token, with polling, retries, and a full audit trail.

Questions

Which direction does data move between QAD and JAGGAER?
The main flow is QAD into JAGGAER. Matched supplier invoices, purchase orders, suppliers, and GL coding accounts move from QAD into JAGGAER, and payment status moves back from QAD so suppliers see when a bill is paid. GL accounts and payment confirmation are read-only on the JAGGAER side, so ml-connector does not write ledger structure back into QAD.
Does the integration use JAGGAER webhooks?
No. JAGGAER's J1P Public API mentions an event-driven push mode, but the event types, registration, and payloads are not publicly documented and are configured by JAGGAER professional services per customer. ml-connector treats J1P as pull-only and polls QAD on a schedule you control. Because QAD cloud has no webhooks either, the schedule is the trigger on both sides.
How are duplicate invoices avoided when importing into JAGGAER?
JAGGAER's invoice import path has no idempotency-key header, so ml-connector keys each import on the supplier invoice number. JAGGAER deduplicates internally by that number, so resubmitting the same invoice is treated as idempotent and is not created twice. ml-connector also sends only invoices that have already cleared QAD's three-way match, which keeps unverified bills out of JAGGAER.

Related integrations

Connect QAD and JAGGAER

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

Get started