← Back to blog

Oracle Fusion REST API JSON Examples: Copy-Paste Payload Cheat Sheet

By Mostafa Mansour 8 min read Oracle FusionREST APIOracle HCMOracle FSCMCheat SheetJSON Examples

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 '[email protected]:********' \
  -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 '[email protected]:********' \
  '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 '[email protected]:********' \
  -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 '[email protected]:********' \
  -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 '[email protected]:********' \
  -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 '[email protected]:********' \
  '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": "[email protected]", "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

HeaderWhen you need it
Content-Type: application/vnd.oracle.adf.resourceitem+jsonEvery POST/PATCH body
REST-Framework-Version: 8Pin 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

OperationMethodKey detail
Filter a collectionGET + q=See the q-parameter guide
Look up by known keyGET + finder=See the finders guide
CreatePOSTUnused fields need "#NULL", not blank
UpdatePATCHSend only changed fields; use real If-Match for safety
RemoveDELETENot all resources allow it
Pull child data inlineGET + expand=Has a nesting-depth cutoff
Multiple operations, one callBatch (multipart/mixed)See the batch guide
Attach a filePOST to child/attachmentsBase64-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.