Oracle Fusion REST API JSON Examples: Copy-Paste Payload Cheat Sheet
Oracle’s own REST API documentation is thorough on field lists and abstract syntax, but thin on one thing developers actually reach for mid-integration: a real, complete JSON body you can copy, adjust three field values in, and send. This page is that reference — one place with a working request/response shape for every common operation type, using real field names pulled from Oracle’s own Fusion REST catalog (Workers, Absences, and Payables Invoices), not placeholder "foo": "bar" filler.
Every example assumes the same base and auth pattern as our other guides — see the authentication guide if you haven’t set that up yet:
https://{your-pod}.fa.{region}.oraclecloud.com/hcmRestApi/resources/11.13.18.05/{resource}
https://{your-pod}.fa.{region}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/{resource}
1. GET with a q filter
Filter a collection server-side instead of pulling everything and filtering client-side. This example finds active workers hired after a given date:
curl -u 'integration.user@example.com:********' \
-H 'REST-Framework-Version: 8' \
'https://acme.fa.us2.oraclecloud.com/hcmRestApi/resources/11.13.18.05/workers?q=WorkerType=%27EMP%27;EffectiveStartDate>=%272026-01-01%27&limit=25'
Response shape (trimmed to the fields you’ll actually check first):
{
"items": [
{
"PersonId": 300100191134071,
"PersonNumber": "10404",
"WorkerType": "EMP",
"EffectiveStartDate": "2026-01-15",
"EffectiveEndDate": "4712-12-31",
"EmailAddressId": 300100191134099,
"AssignGradeStepId": null,
"CreatedBy": "HCM_INTEGRATION",
"CreationDate": "2026-01-15T09:02:11+00:00"
}
],
"count": 1,
"hasMore": false,
"limit": 25,
"offset": 0,
"links": [ { "rel": "self", "href": "..." } ]
}
Our q-parameter guide covers AND/OR grouping, dot-notation child-attribute filters, and the operators available per Version-2 vs Version-1 of the framework.
2. GET with a finder
Finders are the indexed, faster alternative to q when you’re looking up a specific record by a known business key rather than filtering a whole collection. Workers exposes an Employee finder keyed on person number:
curl -u 'integration.user@example.com:********' \
'https://acme.fa.us2.oraclecloud.com/hcmRestApi/resources/11.13.18.05/workers?finder=Employee;PersonNumber=10404'
The response envelope is identical in shape to the q example above — items/count/hasMore — just resolved via an index instead of a scan. See the finders guide for the full list of finder names and their bind variables per resource.
3. POST — create a record
Creating an absence record (a vacation request) against the absences resource:
curl -u 'integration.user@example.com:********' \
-H 'Content-Type: application/vnd.oracle.adf.resourceitem+json' \
-X POST \
'https://acme.fa.us2.oraclecloud.com/hcmRestApi/resources/11.13.18.05/absences' \
-d '{
"personNumber": "10404",
"absenceType": "Vacation",
"startDate": "2026-11-24",
"endDate": "2026-11-28",
"startDateDuration": "1",
"endDateDuration": "1",
"absenceReason": "#NULL",
"absenceStatusCd": "SUBMITTED"
}'
A successful 201 Created echoes back the full record, now with server-assigned fields:
{
"absenceCaseId": 300100191140233,
"personNumber": "10404",
"absenceType": "Vacation",
"absenceDispStatus": "SUBMITTED",
"absenceDispStatusMeaning": "Submitted",
"startDate": "2026-11-24",
"endDate": "2026-11-28",
"absenceEntryBasicFlag": "Y",
"ObjectVersionNumber": 1
}
Two things that trip people up on their first POST to any Fusion resource, not just absences: unused optional fields need the literal string "#NULL", not an empty string or omission, if the field has a default you need to explicitly clear; and the response’s ObjectVersionNumber (or an ETag/If-Match header, depending on the resource) is what you’ll need for the PATCH in the next section — save it.
4. PATCH — update a record
Updating an existing Payables invoice’s approval status. Note that PATCH only requires the fields you’re changing, not the full record:
curl -u 'integration.user@example.com:********' \
-H 'Content-Type: application/vnd.oracle.adf.resourceitem+json' \
-H 'If-Match: *' \
-X PATCH \
'https://acme.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices/300100191150042' \
-d '{
"ApprovalStatus": "REQUIRED",
"AccountingDate": "2026-09-30"
}'
Using a real If-Match value from a prior GET’s ETag response header (instead of the wildcard * shown above) is what makes this a safe conditional update rather than a blind overwrite — see the ETag / If-Match guide and the PATCH null-value guide if you need to explicitly blank out a field rather than just change it.
5. DELETE
Not every Fusion resource supports DELETE — most business objects block it by design (see the DELETE behavior guide for which resources allow it and why). absences does, for a submitted-but-not-yet-approved request:
curl -u 'integration.user@example.com:********' \
-X DELETE \
'https://acme.fa.us2.oraclecloud.com/hcmRestApi/resources/11.13.18.05/absences/300100191140233'
A successful delete returns 204 No Content — no body. A 405 Method Not Allowed or a business-rule 400 (for example, trying to delete an already-approved absence) is expected behavior on most resources, not a bug in your request.
6. expand — pull child resources in one call
Instead of a separate round-trip per child collection, expand inlines them into the parent response:
curl -u 'integration.user@example.com:********' \
'https://acme.fa.us2.oraclecloud.com/hcmRestApi/resources/11.13.18.05/workers/300100191134071?expand=emails,addresses'
{
"PersonId": 300100191134071,
"PersonNumber": "10404",
"emails": {
"items": [
{ "EmailAddressId": 300100191134099, "EmailAddress": "j.doe@acme.com", "EmailType": "W1" }
]
},
"addresses": {
"items": [
{ "AddressLine1": "500 Corporate Dr", "Country": "US", "PostalCode": "94105" }
]
}
}
See the child-resources / expand guide for the cutoff on how many levels deep expand chains and how it interacts with q and pagination.
7. Batch / parts payload
To send several operations against different resources in one HTTP round-trip, use a multipart batch request (Content-Type: multipart/mixed; boundary=...) rather than repeated single calls. Our batch operations guide has the full multipart envelope and boundary syntax — the shape of one part inside it looks like this:
--batch_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH /hcmRestApi/resources/11.13.18.05/absences/300100191140233 HTTP/1.1
Content-Type: application/vnd.oracle.adf.resourceitem+json
{"absenceStatusCd": "APPROVED"}
--batch_boundary--
8. Base64 file attachment
Attaching a file (a receipt, a signed form) to almost any Fusion resource follows the same child/attachments pattern — see the attachments guide for the full walkthrough:
{
"FileName": "receipt.pdf",
"FileContents": "JVBERi0xLjQKJcOkw7zDtsO...(base64-encoded bytes, truncated)",
"ContentRepositoryFileShared": "false",
"Title": "Vacation approval attachment"
}
Common headers, at a glance
| Header | When you need it |
|---|---|
Content-Type: application/vnd.oracle.adf.resourceitem+json | Every POST/PATCH body |
REST-Framework-Version: 8 | Pin behavior to a specific framework version — see the framework versions guide |
If-Match: <etag-value> | Conditional PATCH/DELETE — see the ETag guide |
Metadata-Context: sandbox="..." | Testing against a specific sandbox/prototype |
Exploring the real field list without a live instance
Every field name in these examples — EmailAddressId, AssignGradeStepId, absenceDispStatus, ApprovalStatus, BankAccount — comes from Oracle’s actual Fusion REST catalog, not invented for this page. Cross-checking your own payload’s field names against the real, current schema (which changes across framework versions and pods) is exactly what OPAL is for: it bundles the full Oracle Fusion Cloud OpenAPI specification (HCM, FSCM, and BPM) locally, so you can browse all 59,000+ endpoints, see every q-queryable and response field, and confirm a field exists on your target resource before you build the payload — no live instance, no waiting on a sandbox.
Summary
| Operation | Method | Key detail |
|---|---|---|
| Filter a collection | GET + q= | See the q-parameter guide |
| Look up by known key | GET + finder= | See the finders guide |
| Create | POST | Unused fields need "#NULL", not blank |
| Update | PATCH | Send only changed fields; use real If-Match for safety |
| Remove | DELETE | Not all resources allow it |
| Pull child data inline | GET + expand= | Has a nesting-depth cutoff |
| Multiple operations, one call | Batch (multipart/mixed) | See the batch guide |
| Attach a file | POST to child/attachments | Base64-encoded FileContents |
This post is part of our complete Oracle Fusion API guide — base URLs, authentication, the q parameter, finders, key endpoints, and common errors in one place.
Explore Oracle Fusion APIs offline
OPAL bundles 59,000+ Oracle Fusion REST endpoints, fully searchable offline, with a visual Q Builder and Finder Builder that only offer fields the endpoint actually accepts — so your filter can't 400.
Free, no account required. Pro adds live requests and multi-step Flows.