ml-connector
Oracle Fusion Cloud ERPServiceTitan

Oracle Fusion Cloud ERP and ServiceTitan integration

Oracle Fusion Cloud ERP runs your finance and procurement. ServiceTitan runs your field-service dispatch and customer invoicing. Connecting the two keeps your vendor master and procurement status current in ServiceTitan while pulling completed job invoices from the field back into Fusion's accounts receivable and general ledger. New vendors created in Fusion appear in ServiceTitan for purchasing, purchase order receipts flow back to Fusion for invoice matching, and customer job invoices from ServiceTitan post to Fusion without manual re-entry.

How Oracle Fusion Cloud ERP works

Oracle Fusion Cloud ERP is a multi-tenant SaaS platform exposing invoices, payments, suppliers, purchase orders, customers, receivables invoices, journal batches, journal lines, and GL accounts through REST APIs at a tenant-specific pod URL in the format https://{pod}.fa.{region}.oraclecloud.com/fscmRestApi/resources/{version}/. Authentication uses OAuth 2.0 client credentials or authorization code grant against an OCI Identity Domain, with JWTs valid approximately one hour as Bearer tokens. OData-style query parameters allow filtering by last update date and creation date for incremental reads. Fusion has no native outbound webhooks for standalone connectors, so data is read by polling the REST API, typically every 5 to 15 minutes with a timestamp filter.

How ServiceTitan works

ServiceTitan is a cloud-based field-service-management platform providing REST APIs at https://api.servicetitan.io/{namespace}/v2/tenant/{tenantId}/ or the integration sandbox at https://api-integration.servicetitan.io/{namespace}/v2/tenant/{tenantId}/. Authentication uses OAuth 2.0 client credentials with a 15-minute token lifetime and requires an App Key header on every call. ServiceTitan supports outbound webhooks with HMAC-SHA256 signature verification for events such as job creation, job updates, invoice creation, invoice updates, payment creation, and customer updates, with automatic retries at 10 second, 30 second, 60 second, and 5 minute intervals. The platform exposes vendors, inventory bills (purchase orders), invoices, payments, customers, items, employees, business units, jobs, and appointments, though inventory bills (AP Bills) are read-only and generated when a purchase order is marked received.

What moves between them

The primary flow runs from Oracle Fusion to ServiceTitan. Supplier master records and purchase order data sync from Fusion to ServiceTitan every 5 to 15 minutes so ServiceTitan's vendor list and purchase order status stay current. The secondary flow runs from ServiceTitan to Fusion. Job invoices and customer payments created in ServiceTitan flow to Fusion's accounts receivable module and general ledger on a daily or twice-daily schedule, matched against Fusion customer records and posted to the appropriate GL accounts for revenue recognition. GL accounts are managed in Fusion; ServiceTitan does not expose GL mapping.

How ml-connector handles it

ml-connector stores both credential sets encrypted and uses OAuth 2.0 client credentials to refresh tokens separately on each side every 13 minutes, well before their 1-hour and 15-minute expiries. On the Fusion side, ml-connector polls the supplier and purchase order REST endpoints with a timestamp filter (LastUpdateDate >= {previous-run-timestamp}) to capture only changed records, then maps Fusion supplier attributes to ServiceTitan vendor fields and purchase order quantities to ServiceTitan purchase order items. On the ServiceTitan side, ml-connector listens for webhook events (job invoices and payment receipts) with signature verification using the HMAC-SHA256 key, falls back to polling if webhooks are not enabled, and maps ServiceTitan customer and job identifiers to Fusion customer accounts so invoices post to the correct AR account and cost center. Fusion's PATCH operations on invoices only update header attributes and do not cascade defaults, so customer and GL dimensions are validated before posting. Every record carries a full audit trail with the source transaction ID, timestamp, and any mapping or transformation applied, allowing a downstream call failure to trigger replay.

A real-world example

A mid-sized HVAC contractor runs Oracle Fusion Cloud ERP for accounting, procurement, and fixed assets, and uses ServiceTitan for dispatch, scheduling, and job invoicing across 15 service locations. Before the integration, procurement staff updated the vendor list in ServiceTitan manually every month by exporting Fusion's supplier master, and the accounts team spent two days at month-end reconciling job invoices created in ServiceTitan with the AR aging report in Fusion. With the integration, new vendors created in Fusion for parts purchasing appear in ServiceTitan within minutes, purchase orders flow back automatically to track invoicing progress, and job invoices created in ServiceTitan post to Fusion's AR module the next morning, so month-end close starts with AR already reconciled and purchase-to-invoice matching ready to verify.

What you can do

  • Sync supplier master data and purchase order status from Oracle Fusion to ServiceTitan on a 5 to 15 minute polling schedule.
  • Push job invoices and customer payments from ServiceTitan to Oracle Fusion's accounts receivable and general ledger daily.
  • Bridge OAuth 2.0 authentication and token refresh on both sides, with automatic retry on 401 responses.
  • Validate customer and GL dimensions in Fusion before posting invoices so invalid account combinations do not fail silently.
  • Maintain a full audit trail of every record, source transaction ID, timestamp, and mapping decision for downstream replay and reconciliation.

Questions

Which direction does data move between Oracle Fusion and ServiceTitan?
Supplier master data and purchase orders flow from Fusion to ServiceTitan every 5 to 15 minutes so your vendor and PO list stays current. Job invoices and customer payments flow from ServiceTitan to Fusion daily so revenue is recognized in the correct AR account and GL. GL accounts remain managed in Fusion only; ServiceTitan does not expose GL mapping.
How does ml-connector handle OAuth 2.0 on both sides, given their different token lifetimes?
ml-connector caches OAuth 2.0 credentials separately for each system and refreshes them proactively at 13 minutes, well before Fusion's 1-hour expiry and ServiceTitan's 15-minute expiry. If a call returns 401 (token expired), ml-connector refreshes immediately and retries, so a token renewal never causes an outage.
Does ServiceTitan's webhook push require special setup, or does ml-connector fall back to polling?
If ServiceTitan webhooks are enabled for your tenant, ml-connector listens for job invoice and payment events with HMAC-SHA256 signature verification for real-time push. If webhooks are not enabled, ml-connector falls back to polling the ServiceTitan API on a schedule you control, so the integration works either way without additional configuration.

Related integrations

Connect Oracle Fusion Cloud ERP and ServiceTitan

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

Get started