Skip to content

Oracle Recruiting Cloud integration · Fusion HCM REST API

Screen Oracle Recruiting Cloud applications with HireLayer

Oracle Recruiting Cloud exposes each job application and its resume through the Fusion HCM REST API. A small service you run polls new applications, sends the resume to HireLayer to parse and score it against the requisition, and attaches the result to the candidate.

Oracle API
Fusion HCM REST, 11.13.18.05
Trigger
Scheduled poll on CreationDate
Write-back
Candidate attachment, profile child resources
Cost
2 credits per application, +1 per job
Oracle Recruiting Cloud + HireLayer
  1. 1Poll new applicationsOracle Recruiting CloudYour service lists recruitingJobApplications created since its last run, with expand=attachments.
  2. 2Parse the resumeHireLayerIt downloads the resume through the attachment’s FileContents link and sends it to HireLayer CV Extract.
  3. 3Score against the requisitionHireLayerHireLayer Match compares the resume with criteria extracted once from the job description and returns a score and an explanation per criterion.
  4. 4Attach the resultOracle Recruiting CloudThe score and explanation go to the candidate as an attachment. Parsed skills can fill the skills child resource of the profile.

Use cases

What recruiting teams do with HireLayer and Oracle

  • Triage high-volume requisitions

    Every application gets a score from 0 to 1 and the list of mandatory criteria it meets. Recruiters open the strongest matches first instead of workng in arrival order.

  • Explain the shortlist

    The attached report lists each criterion with its status and the evidence found in the resume, so hiring managers see why a candidate is ahead.

  • Complete candidate profiles

    For candidates you create from a CV, write experience, education, skills and languages through the child resources of recruitingCandidates.

  • Normalized skills

    Map free-text skills to the HireLayer taxonomy before writing them to the Skill field, so the same skill has one name accross candidates.

Setup

Connect Oracle Recruiting Cloud to HireLayer

This is a small service you run, or a scheduled flow in Oracle Integration if you already use it. Your Fusion security administrator sets it up; no Oracle partner program is needed for your own instance.

  1. 1

    Create an integration user

    Your security administrator creates a user with the recruiting roles and privileges for the recruitingJobApplications and recruitingCandidates resources. The service authenticates with Basic over SSL, OAuth 2.0, JWT or a SAML bearer token.

  2. 2

    Extract criteria once per requisition

    When a requisition opens, send its description to HireLayer Job Extract and store the criteria with the requisition number. Every applicant is then scored on the same list.

  3. 3

    Poll new applications

    Every few minutes, GET recruitingJobApplications with q=CreationDate>'…' and expand=attachments, paging with limit and offset while hasMore is true. To check one candidate’s application, use the findByRequisitionNumberAndEmailAddress finder.

  4. 4

    Parse, score and write back

    Download the resume’s FileContents, parse and score it, find the candidate with the findByPersonId finder on recruitingCandidates, then POST the report to its attachments child resource.

Field mapping

Where HireLayer results go in Oracle Recruiting Cloud

In the REST catalog, job application attachments have no create operation, so the report goes on the candidate. The profile’s child resources each have their own create and update operations: read the current rows first to avoid duplicates.

HireLayer fieldOracle Fusion HCM RESTNote
score + summary + evaluated_criteriarecruitingCandidates/{CandidateNumber}/child/attachments (FileContents, Title)Use a category your instance allows
score, custom datarecruitingCandidateExtraInformationExtensible flexfields; the schema is yours
work_experiences[]child/experience (EmployerName, JobTitle, StartDate, EndDate, CurrentJobFlag, Responsibilities)
educations[]child/education (DegreeName, EducationalEstablishment, StartDate, EndDate)
skills[].skill_titlechild/skills (Skill)
languages[].languagechild/languages (Language)
info_candidate.first_name, last_name, emailPOST recruitingCandidates (FirstName, LastName, Email)For candidates you create from a CV

Example

A polling job in TypeScript

A minimal Node.js job: it lists new applications, downloads each resume, parses and scores it, and attaches the result to the candidate. ORACLE_RESUME_CATEGORY is the resume attachment category of your instance; loadCriteria stands for your criteria storage.

oracle-recruiting-screening.tstypescript
const HIRELAYER = 'https://hirelayer.co'
const ORACLE = `https://${process.env.ORACLE_HOST}/hcmRestApi/resources/11.13.18.05`
const CANDIDATES = `${ORACLE}/recruitingCandidates`
const apiKey = { 'X-API-Key': process.env.HIRELAYER_API_KEY! }
// Basic auth over SSL here; an OAuth 2.0 bearer token works the same way
const login = `${process.env.ORACLE_USER}:${process.env.ORACLE_PASSWORD}`
const auth = { Authorization: `Basic ${Buffer.from(login).toString('base64')}` }
const get = (url: string) => fetch(url, { headers: auth }).then((r) => r.json())
type Link = { rel: string; name: string; href: string }

export async function screenNewApplications(since: string) {
  // 1. Applications created since the last run (page with offset while hasMore)
  const q = encodeURIComponent(`CreationDate>'${since}'`)
  const { items } = await get(
    `${ORACLE}/recruitingJobApplications?q=${q}&expand=attachments&limit=50`
  )

  for (const app of items) {
    const resume = app.attachments.find(
      (a: { CategoryName: string }) => a.CategoryName === process.env.ORACLE_RESUME_CATEGORY
    )
    if (!resume) continue
    const link = resume.links.find(
      (l: Link) => l.rel === 'enclosure' && l.name === 'FileContents'
    )
    const file = await fetch(link.href, { headers: auth }).then((r) => r.blob())

    // 2. Parse, then score with the criteria saved for the requisition
    const form = new FormData()
    form.append('file', file, resume.FileName)
    const parsed = await fetch(`${HIRELAYER}/api/v3/parser`, {
      method: 'POST', headers: apiKey, body: form, signal: AbortSignal.timeout(150_000),
    }).then((r) => r.json())
    const criteria = await loadCriteria(app.RequisitionNumber)
    const match = await fetch(`${HIRELAYER}/api/v1/matching/job-candidate`, {
      method: 'POST',
      headers: { ...apiKey, 'Content-Type': 'application/json' },
      body: JSON.stringify({
        job_text: criteria.jobText,
        candidate_text: parsed.info_resume.text,
        matching_criteria: criteria.items,
      }),
    }).then((r) => r.json())

    // 3. Attach the result to the candidate profile
    const finder = `findByPersonId;personId=${app.CandidatePersonId}`
    const { items: [candidate] } = await get(`${CANDIDATES}?finder=${finder}`)
    await fetch(`${CANDIDATES}/${candidate.CandidateNumber}/child/attachments`, {
      method: 'POST',
      headers: { ...auth, 'Content-Type': 'application/json' },
      body: JSON.stringify({
        DatatypeCode: 'FILE',
        CategoryName: 'MISC',
        FileName: `hirelayer-${app.JobApplicationId}.txt`,
        Title: `HireLayer score ${match.score}`,
        FileContents: Buffer.from(`${match.score}\n${match.summary}`).toString('base64'),
      }),
    })
  }
}

Limits

Good to know

  • Not an Oracle Cloud Marketplace app

    HireLayer is not listed on Oracle Cloud Marketplace and is not one of Oracle’s recruiting partner integrations. You connect it with your own integration user, or ask us to build the connector with your integration team.

  • No webhook for new applications

    Oracle documents no customer-configurable webhook for recruiting, so this recipie polls. The REST guide documents no rate limits for these resources: keep the interval reasonable and page through results.

  • No recruiter notes through REST

    Oracle marks its recruiting interactions resource as internal use only. Write the result as an attachment or an extra information field instead of a note.

  • Results written in French

    Criteria labels, match summaries and rationales are in French; scores and field names are not. HireLayer processes data in the EU, and do_not_store_data keeps no copy of the file.

FAQ

HireLayer and Oracle Recruiting Cloud: questions

Does HireLayer integrate with Oracle Recruiting Cloud?

Yes, through the Fusion HCM REST API: your service polls new applications, calls HireLayer and attaches the score to the candidate. HireLayer has no Oracle Cloud Marketplace listing; we can build the connector with your integration team on request.

Does Oracle Recruiting Cloud send a webhook for new applications?

Not one you can configure for recruiting, according to Oracle’s documentation. Poll recruitingJobApplications with a q filter on CreationDate, from your own service or a scheduled Oracle Integration flow.

Doesn’t Oracle Recruiting already parse resumes?

Yes, through a profile import service or with Recruiting Booster. HireLayer does not replace it: it scores each application against the requisition, explains the score per criterion and returns normalized skills.

Which Oracle access does the integration need?

An integration user with the recruiting roles for recruitingJobApplications and recruitingCandidates, created by your Fusion security administrator. Oracle Support document 2651505.1 lists the roles per REST resource.

Can I build this in Make instead of code?

Yes, on Make’s Enterprise plan: Make’s Oracle Fusion Cloud HCM app can watch and search records and make any HCM REST call, and Make’s HTTP module calls HireLayer.

Connect Oracle Recruiting Cloud to HireLayer today

The Free plan includes 50 credits a month, no card required. One successful call is one credit, on every API.