ml-connector
Oracle JD EdwardsBILL

Oracle JD Edwards and BILL integration

This connection links Oracle JD Edwards EnterpriseOne, the system of record for vendors and purchasing, with BILL, the platform that runs the actual bill approval and payment. Approved purchase orders and supplier records flow out of JD Edwards and become vendors and bills in BILL, so the AP team works from one queue instead of re-keying invoices. When BILL pays a bill, the payment lands back in JD Edwards as a voucher or journal entry against the right GL account and business unit. BILL has no purchase orders of its own, so JD Edwards stays the source for what was ordered while BILL owns the payment workflow. ml-connector reconciles the two different session-token APIs and moves the records on a cadence you set.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is on-premises, so each customer runs its own Application Interface Services Server with no shared public hostname; the connector takes the full AIS base URL and port per site. It authenticates by posting a JDE username and password to the tokenrequest endpoint, then sends the returned opaque token in the jde-AIS-Auth header on every call, re-authenticating on HTTP 444. Reads come from the data service against F-tables such as F0401 for suppliers, F0411 for the AP ledger, F4311 for purchase order detail, and F0901 for accounts, while writes go through named orchestrations like JDE_ORCH_04_Add_Supplier_Invoice rather than direct table writes. JD Edwards has no native outbound webhooks, so changes are found by polling on the date-updated field with offset pagination.

How BILL works

BILL is a cloud AP and AR platform reached over its v3 REST API at gateway.prod.bill.com. Authentication is a session login: the connector posts a developer key plus the org email, password, and organization ID to the login endpoint and receives a sessionId that expires after 35 minutes of inactivity. The API exposes vendors, bills, payments, customers, invoices, and chart of accounts, with line items tagged to GL accounts and departments. BILL pushes real-time webhooks for events such as bill.created, bill.updated, and payment.updated, signed with HMAC-SHA256 in the x-bill-sha-signature header. BILL has no purchase order entity, so purchase orders stay in the ERP and arrive in BILL as bills.

What moves between them

The main flow runs from Oracle JD Edwards EnterpriseOne into BILL. Supplier records from F0401 become BILL vendors, and approved purchase orders and supplier invoices become BILL bills with line items mapped to GL accounts. Once BILL processes a payment, the confirmation flows back into JD Edwards, where ml-connector posts an AP voucher or GL journal entry through an orchestration so the ledger reflects what was paid. JD Edwards is polled on the schedule you set, since it cannot push events, while BILL bill and payment changes arrive in near real time through webhooks. Chart of accounts and business units are aligned so every BILL line references a GL account that already exists in JD Edwards.

How ml-connector handles it

ml-connector stores both credential sets encrypted and runs two different session logins. On the JD Edwards side it accepts the full AIS Server URL per customer, posts the username and password to get a session token, sends that token in the jde-AIS-Auth header, and re-authenticates automatically on HTTP 444 after an AIS Server restart; the customer CNC admin must also add the connector egress IPs to the AIS allowedHosts list or calls return HTTP 405. On the BILL side it logs in with the devKey and org credentials, caches the sessionId, and re-logs in on a 401 because session expiry is silent, while keeping no more than three calls in flight per org to respect the concurrent limit. Vendors map by name and tax ID, purchase order and invoice lines map to BILL bill line items, and each line is tagged to a GL account and department that exist on both sides. Because JD Edwards writes only through orchestrations, the customer imports the AP orchestration into Orchestrator Studio so payment confirmations can post as vouchers. Neither system offers an idempotency header, so ml-connector dedupes on JD Edwards document numbers and BILL entity IDs before creating records, and retries with backoff when BILL returns a rate-limit error or JD Edwards returns a 500.

A real-world example

A mid-sized industrial distributor with about 300 staff runs Oracle JD Edwards EnterpriseOne on its own infrastructure for procurement and finance, and adopts BILL to modernize how it approves and pays supplier invoices. Before the integration, buyers raised purchase orders in JD Edwards while AP clerks re-typed each supplier and invoice into BILL, then manually entered every payment back into the JD Edwards AP ledger, which left the two systems out of step at month-end. With the connection in place, approved purchase orders and suppliers flow from JD Edwards into BILL automatically, the AP team approves and pays in BILL, and each payment posts back to JD Edwards as a voucher against the correct account. The double entry disappears and the ledger matches what BILL actually paid.

What you can do

  • Create BILL vendors and bills from Oracle JD Edwards EnterpriseOne suppliers and approved purchase orders.
  • Post each BILL payment confirmation back into JD Edwards as an AP voucher or GL journal entry through an orchestration.
  • Bridge the JD Edwards session token in the jde-AIS-Auth header to the BILL devKey and sessionId login.
  • Map BILL bill line items to valid JD Edwards GL accounts and business units before any record is written.
  • Poll JD Edwards on your schedule while receiving signed BILL bill and payment webhooks in near real time.

Questions

Which direction does data move between Oracle JD Edwards EnterpriseOne and BILL?
The main flow is JD Edwards into BILL: suppliers and approved purchase orders become BILL vendors and bills. After BILL processes a payment, the confirmation flows back into JD Edwards as an AP voucher or journal entry. Purchase orders stay in JD Edwards because BILL has no purchase order entity of its own.
How does ml-connector write payments back into JD Edwards when it has no public write endpoint?
JD Edwards does not allow direct table writes over REST, so all writes go through named orchestrations. The customer imports the AP orchestration into Orchestrator Studio, and ml-connector calls it to create the voucher or journal entry. Reads still use the data service against the F-tables.
How are the two session-token logins kept alive?
Both systems use short-lived session tokens rather than OAuth2. ml-connector re-authenticates with JD Edwards on an HTTP 444 invalid-token response after an AIS Server restart, and re-logs in to BILL on a 401 because BILL session expiry is silent. It also keeps no more than three BILL calls in flight per org to respect the concurrent limit.

Related integrations

Connect Oracle JD Edwards and BILL

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

Get started