InTouch Hub · Blue Isle Software

Oracle Fusion Cloud HCM

Read Oracle Fusion Cloud HCM worker, assignment and organisation data over its REST API.

Licensed connector — not free. Oracle Fusion Cloud HCM requires a paid licence from Blue Isle. You may download and install it, but it will not execute until a valid licence is applied — the server checks at run time. Contact Blue Isle to licence it.

Supported by Blue Isle. This is a commercially licensed connector, maintained and supported by Blue Isle Software under the terms of your licence agreement. Talk to Blue Isle about licensing and support.

capitaldocumentfusionhcmhrhumanmanagement

Oracle Fusion Cloud HCM Tool

Reads HR data from Oracle Fusion Cloud HCM over its REST API.

Tool ID

fusion-hcm

Fusion is not PeopleSoft

Oracle owns both, and conflating them is the most common mistake in this space.

Oracle Fusion Cloud HCM Oracle PeopleSoft HCM
What it is SaaS suite, built by Oracle On-premise, acquired 2005
REST API Yes/hcmRestApi/resources/... None for worker/job reads
This connector fusion-hcm (REST) peoplesoft-hcm (JDBC)

Blog posts and vendors claiming "Oracle HCM has REST APIs" are describing Fusion. Those endpoints do not exist in PeopleSoft — everything Oracle ships pre-built there is asynchronous publish/subscribe, which is why the PeopleSoft connector reads the database directly.

Do not point this connector at a PeopleSoft install.

Three traps worth knowing

1. Departments are served by /organizations. Oracle's documentation page is titled "Departments REST Endpoints", but every operation on it is GET .../organizations. There is no /departments resource. This is the single most likely 404.

2. limit caps at 499, silently. Oracle: "If you specify a value more than 499, only the first 499 records are returned and the hasMore parameter is false." An over-large page size therefore truncates and tells you there is no more data. Page with limit ≤ 499 and follow hasMore; never trust one large request. Default page size is 25, so a caller who sets nothing reads 25 rows as the whole population.

3. Assignments are a grandchild. The path is /workers/{workerId}/child/workRelationships/{periodOfServiceId}/child/assignments — you need both ids. The /workers/{id}/child/assignments shape belongs to the deprecated emps resource.

Which people resource

Resource Use it for
workers HR-grade extracts. All worker records as of a date — employee, contingent, pending. Full child set, effective-dated, subject to HCM data-role security.
publicWorkers Directory lookups. Active only, current date only, public fields, GET-only, much lighter security friction. Keyed by plain PersonId.
emps Nothing. Oracle documents it as controlled-availability and slated for deprecation, directing new integrations to workers. Deliberately not implemented here.

Credential Required

Yes — a fusion-hcm credential. HTTP Basic over TLS with an integration user; the login and password come from the vault and never enter a task definition or the assistant's context.

Oracle's Multi Token Over SSL policy documents Basic, SAML 2.0 bearer and JWT. Basic is not deprecated and is Oracle's own example throughout the REST reference. OAuth2 via OCI IAM exists at the platform level, but its token endpoint is not documented in the HCM REST book, so it is not implemented here rather than guessed at.

Authorization is RBAC: the integration user needs the function/aggregate privileges for the resource and an HCM data role granting the person population. A correctly authenticated user with the wrong data role returns an empty collection, not an error.

Operations

Operation Path
list_workers /workers
get_worker /workers/{workerId}
list_public_workers /publicWorkers
get_public_worker /publicWorkers/{personId}
worker_names /workers/{workerId}/child/names
worker_emails /workers/{workerId}/child/emails
worker_phones /workers/{workerId}/child/phones
worker_addresses /workers/{workerId}/child/addresses
worker_work_relationships /workers/{workerId}/child/workRelationships
worker_assignments /workers/{workerId}/child/workRelationships/{periodOfServiceId}/child/assignments
list_departments /organizations
list_jobs /jobs
list_locations /locations
list_grades /grades
list_positions /positions
describe_workers /workers/describe
describe_organizations /organizations/describe

Inputs

Property Description
operation Required.
host Required. Pod host, e.g. servername.fa.us2.oraclecloud.com (no scheme)
apiVersion Required, defaults to 11.13.18.05 — Oracle's path version segment
workerId Worker UniqID — for get_worker and every worker_* operation
personId For get_public_workerpublicWorkers is keyed by plain PersonId
periodOfServiceId For worker_assignments, from worker_work_relationships
query Query params as a JSON object string (see below)

apiVersion is an input, not a constant: 11.13.18.05 has been stable since R13, but it is a version segment and it moved once already (R12 used 11.12.1.0 with per-pillar context roots).

Query parameters

Passed as a JSON object string, e.g. {"limit": 499, "totalResults": true, "effectiveDate": "2020-01-01"}

Key Notes
limit Default 25, max 499 — see trap 2
offset Page start
totalResults Send true or you get no count at all
q Filter. Requires framework version ≥ 2 — this tool always sends 4
fields Attribute projection; child syntax names:FirstName
expand Dot notation, e.g. workRelationships.assignments; all for everything
onlyData Strip links from the payload
orderBy field:asc,field2:desc
effectiveDate yyyy-MM-dd — rows in force on that date, past or future

Filter examples from Oracle: PersonNumber=1000, PersonNumber between 1000 and 1100, DateOfBirth > '1960-01-01', names.FirstName like '%Ki%', upper(FirstName) = 'KIM'.

Run describe_workers before writing a filter. Only attributes marked "queryable": true may appear in q; anything else returns 400.

Effective dating

A query parameter, not a header: {"effectiveDate": "2020-01-01"} returns the rows in force on that date. There is no separate history endpoint — the same call retrieves past or future rows depending on the date. (The Effective-Of header governs writes, which this read-only connector does not perform.)

REST-Framework-Version

Sent as 4 on every request. Versions differ in backward-incompatible ways and the default when the header is absent is 1 — under which the q syntax above is interpreted differently rather than rejected. Version 4 also returns structured errors (code, path, details).

Bulk extracts

Oracle explicitly steers away from REST for full-population work, on the resource pages themselves: "Use HCM Data Loader for bulk load operations and HCM Extracts for extract operations" and "Do not use REST APIs for detecting data changes; use Atom feeds instead."

A whole-workforce sync over workers with deep expand at 499/page is fighting the product. Use this connector for targeted reads, lookups and moderate extracts; use HCM Extracts for the full population and Atom feeds for change detection.

Errors and backoff

Oracle documents no rate limit and no 429 for this API. The pressure signals are 503 Service Unavailable (server overload) and 504 — back off on those. 413 means a bulk request exceeded the allowed operation count.

Build

./gradlew :intouchtools:tools:fusion-hcm:toolJar

Produces build/libs/fusion-hcm-1.0.0.jar, matching connector.json's jars[0].

Licensing

licenseRequired() returns true, matching the other ERP/HCM connectors.

Status

Untested against a live Fusion pod. The endpoint shapes, parameters and limits above are taken from Oracle's REST API reference for Oracle Fusion Cloud HCM (doc G29489-05), but nothing here has been exercised against a real tenant. Validate before relying on it.

Publishes

The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.

Fields not documented above

Generated from this tool's own schema and published outputs on 2026-09-03. A field the README omits is discoverable only by reading the source, and a published key nothing documents is a capability nobody can reference.

Field Type Description
body string Request body as a JSON object string. Unused — every operation here is a read.