Oracle JD Edwards and ServiceTitan integration
ServiceTitan manages field service operations, invoicing, and purchasing for HVAC, plumbing, and electrical businesses. Oracle JD Edwards EnterpriseOne runs the financial back office and GL. Connecting them keeps your JD Edwards GL accounts and supplier master aligned with the work and bills ServiceTitan generates. New invoices, purchase orders, and bills in ServiceTitan flow into JD Edwards without re-keying, and vendors are synchronized across both systems so accounting recognizes every supplier.
What moves between them
The main flow is ServiceTitan into JD Edwards. When a new invoice or inventory bill is created in ServiceTitan, ml-connector reads the event via webhook, maps ServiceTitan vendor and item references to JD Edwards Supplier Master and Item Master records, and posts the AP document into JD Edwards Account Ledger with the GL account and cost center matching the configuration for that bill type. Purchase orders created in ServiceTitan are also sent to JD Edwards Purchase Order Header and Detail. Vendor and item inventory changes flow bidirectionally so both systems maintain consistent supplier and stock reference data. Because ServiceTitan invoices and bills are the authoritative source of what work happened and what was purchased, all writes flow from ServiceTitan to JD Edwards. GL postings are read-only in ServiceTitan, so ml-connector does not write financial entries back to the field service system.
How ml-connector handles it
ml-connector stores JD Edwards AIS Server URL, username, and password encrypted and obtains a session token via POST to the /jderest/v2/tokenrequest endpoint. When the token expires (typically after 30-60 minutes) and a call returns HTTP 444, ml-connector re-authenticates automatically. For ServiceTitan, ml-connector caches the OAuth2 token and does not request a new token per call. It validates incoming webhook payloads using HMAC-SHA256 signature verification with the webhook secret configured in ServiceTitan. When an invoice.created or inventory bill event arrives via webhook, ml-connector extracts the vendor ID and item references from the ServiceTitan payload, queries the JD Edwards Supplier Master (F0401) and Item Master (F4101) for matching records using the mapped external identifiers or business name, and prepares an AP batch for import using the JD Edwards data service or a pre-built orchestration. If the vendor or item does not exist in JD Edwards, ml-connector logs the mismatch and queues the document for manual review. Because ServiceTitan sends webhooks with 10s, 30s, 60s, and 300s retry intervals if ml-connector fails to return HTTP 200, ml-connector returns success immediately and handles write failures asynchronously via a persistent queue. Every AP posting carries the original ServiceTitan invoice ID and bill number as an external reference for audit and reversal.
A real-world example
A regional HVAC contractor with five service trucks and a head office runs ServiceTitan to dispatch jobs, schedule appointments, and invoice customers. The controller uses JD Edwards EnterpriseOne for GL, AP, vendor reconciliation, and month-end close. Previously, the office manager exported invoices from ServiceTitan weekly, manually classified them to JD Edwards cost centers (by truck and service type), and created AP batches in JD Edwards by hand. Vendor records were maintained in both systems independently, creating reconciliation headaches when a supplier name changed. With ServiceTitan and JD Edwards connected, each invoice posts to JD Edwards automatically, classified to the cost center matching the work location, and vendors are synchronized so the contractor master always matches. The monthly close process shortens from two days to a few hours, and AP reconciliation is eliminated.
What you can do
- Post ServiceTitan invoices and inventory bills into JD Edwards Accounts Payable Ledger, classified to the correct GL accounts and cost centers.
- Synchronize ServiceTitan vendors with JD Edwards Supplier Master (F0401) so the supplier directory remains consistent across both systems.
- Map ServiceTitan purchase orders to JD Edwards Purchase Order Header and Detail documents on creation or update.
- Authenticate JD Edwards with session tokens, automatically re-authenticating when tokens expire, and authenticate ServiceTitan with OAuth2 and App Key validation.
- Validate ServiceTitan webhook signatures with HMAC-SHA256 and queue failed AP postings for manual review with full audit trail.
Questions
- Which direction do invoices flow between ServiceTitan and JD Edwards?
- Invoices and inventory bills flow from ServiceTitan into JD Edwards. When a bill is created in ServiceTitan, ml-connector reads the webhook event, maps the vendor and items to JD Edwards records, and posts the AP document into the Account Ledger. JD Edwards GL postings are read-only in ServiceTitan, so ml-connector never writes financial entries back to the field service system.
- How does ml-connector handle JD Edwards session token expiration?
- JD Edwards session tokens are typically valid for 30 to 60 minutes. When a call returns HTTP 444 (invalid token), ml-connector automatically re-authenticates by posting to /jderest/v2/tokenrequest with the stored username and password. The new token is used on the retry, so token expiration is transparent to the downstream flow.
- What happens if a ServiceTitan vendor or item does not exist in JD Edwards?
- ml-connector queries JD Edwards Supplier Master (F0401) and Item Master (F4101) using the mapped external identifiers or business name. If no match is found, the AP document is logged with the mismatch reason and queued for manual review. The operator can then create the missing vendor or item in JD Edwards and reprocess the document using the audit trail.
Related integrations
More Oracle JD Edwards integrations
Other systems that connect to ServiceTitan
Connect Oracle JD Edwards and ServiceTitan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started