RecruitmentTechnologies API
gettingStarted
applyAnywhere
jobBoardApply
apply
applyMB_OLD
recruitAnywhere
xui - ATS Plug-in
IntegratingXUI
SingleSignOn
DeleteJob
getXUI
loginServlet
ActiveJobSatus
MatchCriteria
XMLAPI
FeedIntegration
sourceAnyone
statEverything
 

 gettingStarted

Our easy to use API is segmented into solutions and entities.

SSL/TLS

All API calls have to be made using SSL/TLS.

Authentication

User can be authenticated with preemptive Basic Authentication using either a username / password combination or an temporary access token.

End point URLs

Development: https://apidev.recruitmenttechnologies.com/...

Production: https://api.recruitmenttechnologies.com/...

For example: https://apidev.recruitmenttechnologies.com/jobBoardApply/apply

 

 applyAnywhere

ApplyAnywhere

Allow candidates to apply using their online CV on your existing application form.

Once ApplyAnywhere has been setup for you in our systems all you need to do is the following:

As you can see ApplyAnywhere is easy to setup and changes nothing on your application form except the upload button. A button is added to allow the candidate to select an online CV or use the upload button.

Using ApplyAnywhere on open application forms

ApplyAnywhere loads your existing form everytime a candidate clicks your application link. This means that changes to your form will be reflected in real time, there is no need to redo or change the setup after you have made changes to you form.

Prefixing the application links on your website

The only thing you need to do is prefix the link under the 'Apply Now' button on your website. Do not (!) use an automatic redirect e.g. in your load balancer / firewall to redirect candidates: the original form still needs to be accessible from the outside.

Prefixing the application links on job boards

If you are already posting jobs using our RecruitAnywhere system, simply contact support to change the links on the job boards. Otherwise contact your current multiposter to do this for you.

Exact instructions on prefixing the application links

Prefixing your application links consists of two steps:

Using ApplyAnywhere behind login forms

You can have a candidate upload a CV using ApplyAnywhere in a setup process after they are logged in, but the step where ApplyAnywhere is used must be a seperate page and not secured by the login.

To make this process secure, you create a form with an upload button, optional contact fields and a hidden field with a session id / uid. This form is prefixed with https://apply.applyanywhere.com/ and thus gives the candidate the capability to use an online CV (or still use the upload button).

ApplyAnywhere not only retrieves the CV from a job board but also contact details. You can add contact details fields to the form which will be filled by ApplyAnywhere when the candidate selects a job board CV.

On submitting, your system receives the CV, optional contact fields and the hidden session id / uid to validate it is the same candidate. Your system returns a redirect to the next step in the setup process.

Steps to integrate for logged in candidate:

If you decide to add contact fields to the form, place them below the upload button (the upload button is the place where the ApplyAnywhere button is placed). A candidate will then first select a job board CV, which will also fill in the contact fields below.

 

 jobBoardApply

One API for all application forms

Integration

New clients setup

* We are working towards a scenario where job boards will be able to do the setup and field mapping themselves

 

 /jobBoardApply/apply/

Authentication Required

POST application/json

Example JSON (resume file data truncated):

{
  "configID": "ABC123", 
  "originalApplyURL": "https://example.com/jobs/100/apply", 
  "candidateID" : "ae2h80b3c47edd10ac6b7993f2e3ff",
  "contactDetails" : {
    "firstName" : "Candidate",
    "middleInitial" : "",
    "lastName" : "XYZ",
    "streetAddressName" : "Wall street",
    "streetAddressNo" : "1",
    "streetAddressNoExt" : "",
    "zipCode" : "10286",
    "city" : "New York",
    "state" : "NY",
    "countryISO" : "US",
    "phoneNumber" : "001-555-1234-5678",
    "mobilePhoneNumber" : "",
    "email" : "candidatexyz@hotmail.com"
  },
  "resume" : {
    "data" : "JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovVGl0bGUg...go=",
    "fileName" : "Candidate_Xyz.pdf",
    "contentType" : "application/pdf",
    "custom" : {
      "education" : ""
    }
  }
}

* The 'resume.data' field should contain the base 64 encoded resume file (trucated in this example).

Returns:

Original apply link can also be the job spec. page: if setup for this, JobBoardApply will automatically follow the apply link on the job spec. page and only then submit the form.

OK result:

{
	"resultCode": 0,
	"message": "OK!"
}

Example JSON with missing mandatory field ('firstName' is empty):

{
  "configID": "ABC123", 
  "originalApplyURL": "https://example.com/jobs/100/apply", 
  "candidateID" : "ae2h80b3c47edd10ac6b7993f2e3ff",
  "contactDetails" : {
    "firstName" : "",
    "middleInitial" : "",
    "lastName" : "XYZ",
    "streetAddressName" : "Wall street",
    "streetAddressNo" : "1",
    "streetAddressNoExt" : "",
    "zipCode" : "10286",
    "city" : "New York",
    "state" : "NY",
    "countryISO" : "US",
    "phoneNumber" : "001-555-1234-5678",
    "mobilePhoneNumber" : "",
    "email" : "candidatexyz@hotmail.com"
  },
  "resume" : {
    "data" : "JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovVGl0bGUg...go=",
    "fileName" : "Candidate_Xyz.pdf",
    "contentType" : "application/pdf",
    "custom" : {
      "education" : ""
    }
  }
}

ERROR result with fallback URL (stripped and prefilled application form to be shown in popover):

{
	"resultCode": -1208, 
	"message": "ERROR: mandatory field empty!", 
	"fallbackApplyLink": "https://apply-p-ef917baa-c6db-4667-86bc-890d911fb803/jobs/100/apply"
}

OK/ERROR codes

0	OK
 -999	ERROR: Unknown
-1028	ERROR: Config ID invalid / empty
-1208	ERROR: mandatory field empty!
-1073	ERROR: Original apply URL empty / invalid

 

 /jobBoardApply/applyMB_OLD/

POST application/json

This variant uses the Monster.com POST2 format:

 

 recruitAnywhere

 

 xui - ATS Plug-in

Our XUI (eXternal User Interface) is a ready-made plug-in.
Because of the ready-made charactaristics, the easiest and preferred way to integrate RecruitAnywhere into your ATS is by using this XUI.
The plug-in presents the user with the list of jobboards/channels to post to. All outgoing communication of the API is handled by the XUI.

XUI Strenghts:

 

 IntegratingXUI

Necessary: Your ATS only needs to provide 3 things for the XUI plug-in:

Optional: To make the user experience even more seamless you can optionally go:

Web location Job Data

If it is not possible to retrieve job data via your ATS API, then the RecruitAnywhere system has to retrieve the XML data, via a standard single URL with only one variable per client: the JobID

For example: https://www.test.com/jobs?jobid=[JobID] (example)

IMPORTANT: the XUI can only be used if your ATS can provide all the mandatory fields for a job. Please discuss the setup with our support

Plug-in iframe

The following needs to be provided by your ATS in the iframe:

Your ATS needs to generate an iframe using this code:

<html>
	<head>
		<title>RecuitAnywhere</title>
	   	<script type="text/javascript">

            function loadXUI() {
                var xuiData = '{ ' + 
                    '"XUIUserID": "Manager TEST", ' + 
                    '"XUIVid": "123", ' + 
                    '"XUILocale": "nl_NL", ' + 
                    '"XUIAccessToken": "9ea1fb73-15e7-4ad5-a666-deb46934bc1a"' + 
                '}';

                var xuiIFrameSrc = 'https://appsdev.knollenstein.com/KnXUIPublish/swf/KnXUIPublish.html
#' + window.btoa(xuiData);

                document.getElementById('xuiIFrame').setAttribute("src", xuiIFrameSrc);
            }
            document.addEventListener("DOMContentLoaded", function(event) {
                loadXUI();
            });
     		</script>    
	</head>
	<body> 
		<iframe id="xuiIFrame" frameborder="0" style="border:0; :hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
	</body>
</html>

 

 SingleSignOn

Authentication Required

GET 

To make sure our clients will be logged in automatically we provide a simple SSO procedure.

The token will be valid for 24 hours after receiving the token. For each user you can choose to either get a token once every 24 hours, or retrieve a token with every request.

Authentication

User can be authenticated with preemptive Basic Authentication using either a username / password combination or an temporary access token.

DEV: https://appsdev.knollenstein.com/servlet/KnGetAccessTokenServlet?permissions=xui

PROD: https://apps.knollenstein.com/servlet/KnGetAccessTokenServlet?permissions=xui

Response

HTTP Status 200

<Token id="1c26190a-b6fd-4c37-8715-e7cb375dc928" />

HTTP Status 400

Invalid authentication

 

 DeleteJob

Authentication Required

GET

Many ATS systems have customer website integrations. In order to keep the internal jobs synchronized with the jobs on external jobboards, use the Delete Job call when a job is unpublished/archive.

Authentication

User can be authenticated with preemptive Basic Authentication using either a username / password combination or an temporary access token.

End Point URLs

DEV: https://appsdev.knollenstein.com/servletngc/KnDeleteVacancyServlet?vid=123

PROD: https://apps.knollenstein.com/servletngc/KnDeleteVacancyServlet?vid=123

The parameter 'vid' is the specific Job ID you want to delete.

Note: The entire job will be deleted

Response

HTTP Status 200

<DeleteDocument vid="123" result="OK"></DeleteDocument>

or

<DeleteDocument vid="123" result="OK" info="Already deleted"/>

 

 getXUI

 

 loginServlet

 

 ActiveJobSatus

We can send real-time active job statuses of jobs to your system.

RecruitmentTechnologies needs to recieve the following data of the ATS

XML example A

The job was found in RecruitAnywhere and has been posted to NVB-NL (Nationalevacaturebank.nl) and IM-NL (Intermediair.nl). The has also been updated on Intermediair.nl:

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
   <JobPosition id="19733" status="active" review="" authorisation="">
      <Channel id="NVB-NL" contractID="2023410-D3" planned="12-09-2019 09:50:00 CEDT" duration="P3W" durationStartDate="A" posted="12-09-2019 10:01:18 CEDT" postedGMT="12-09-2019 08:01:18 GMT" updated="" updatedGMT="" advertURL=""/>
      <Channel id="IM-NL" contractID="4083000-E7" planned="08-09-2019 11:00:00 CEDT" duration="P4W" durationStartDate="A" posted="08-09-2019 11:09:49 CEDT" postedGMT="08-09-2019 09:09:49 GMT" updated="12-09-2019 10:01:30 CEDT" updatedGMT="12-09-2019 08:01:30 GMT" advertURL=""/>
   </JobPosition>
</Jobs>

XML example B

The job was not found in the VOM database.

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
   <JobPosition id="197334" status="inactive"/>
</Jobs>

XML example C

The job was found in the VOM database but there we errors posting it to both MB (Monsterboard) and VDAB.be (vdab.be).

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
   <JobPosition id="19022" status="active" review="" authorisation="">
      <Channel id="MB" contractID="8027410" posted="" postedGMT="" updated="" updatedGMT="" advertURL="">
         <MessagesMB_OUT advertid="44987">
            <Error id="-1004" datetime="18-07-2005 15:45:14 GMT"><![CDATA[No credits left in contract]]></Error>
         </MessagesMB_OUT>
      </Channel>
      <Channel id="VDAB-BE" contractID="410939" posted="" postedGMT="" updated="" updatedGMT="" advertURL="">
         <MessagesVDAB-BE_OUT advertid="44989">
            <Error id="-1004" datetime="18-07-2005 15:45:34 GMT"><![CDATA[No credits left in contract]]></Error>
         </MessagesVDAB-BE_OUT>
      </Channel>
   </JobPosition>
</Jobs>

OK/ERROR codes

Jobs Top-level tag of the xml document

@id Vacancy (job) ID
@status "active"=the job was found Knollenstein "inactive"=the job was not found in Knollenstein
@review "pending"=the vacancy needs to be reviewed before posting. ""=no need to review
@authorisation "pending"=the vacancy cost needs to be authorised by approving the proforma invoice. ""=no need to authorise cost

Channel Start tag for a channel status for this vacancy

@id ID of the channel
@contractID Contract ID used to post job. Use getContractsServlet to get a list of possible contract IDs
@planned Date/time the job was planned to be posted
@plannedGMT GMT Date/time the job was planned to be posted
@duration Planned duration using e.g. 'P14D' for 14 days, 'P2W' for 2 weeks and 'P1M' for 1 Month. Duration can never be longer than the maximum duration for a channel
@durationStartDateToUse 'A' = from posted date/time 'P' = from planned date/time
The actual posted date can be later than the planned date. Setting @durationStartDateToUse to 'P' will ensure a fixed end date, even if the posting date lies days after the planned date (e.g. because of errors)

@posted Date/time the job was posted, empty if not posted
@postedGMT GMT Date/time the job was posted, empty if not posted
@updated Date/time the job was updated, empty if the job has not been updated yet
@updatedGMT GMT Date/time the job was updated, empty if the job has not been updated yet
@advertURL Direct link to the advert on the job board. Not available for all channels (empty if not available)
Messages_OUT Error messages for this channel, if any
@advertid AdvertID as sent by external system, or empty if non was sent

Error An error message for this channel

@id Error message ID
@datetime Date/time the error occurred (in local time, not available in GMT)

 

 MatchCriteria

Authentication Required

GET 

You can retrieve these lists and present your user with these choices, thus ensuring that correct values are sent to RecruitmentTechnologies.

Possible field values:

JobBranch, JobCategory, JobLevel, JobContractType, JobEducation, JobEducationDir, JobRegion, JobTitle, JobDrivingLicence, JobLanguageProficiencyLevel, JobShift, JobCompetency

Note: default lists are provided by RecruitmentTechnologies but these are customisable (i.e. if you already have your own value sets in your system you could enter these in RecruitmentTechnologies.

DEV: https://appsdev.knollenstein.com/servletngc/KnGetLookupValuesServlet?type=JobCategory&lang=nl

PROD: https://apps.knollenstein.com/servletngc/KnGetLookupValuesServlet?type=JobCategory&lang=nl

Notes:

  1. The system will return the names in the requested language or will return the default otherwise
  2. The above URLs are not to be used for real-time requests, only for updating tables in your system

This is an example of the returned name/value pairs ('label/importKey') when using the top URL:

<entries>
    <entry label="Administratief/Financieel" importKey="KT00006342"/>
    <entry label="Advies/staf/beleid" importKey="KT000063AE"/>
    <entry label="Arbeidsbemiddeling" importKey="KT000064A6"/>
    <entry label="Automatisering/internet" importKey="KT0000647A"/>
    <entry label="Banking" importKey="KT0000647B"/>
    <entry label="Beveiliging/defensie/politie" importKey="KT00006502"/>
    <entry label="Call centre/receptie" importKey="KT00006506"/>
    <entry label="Commercieel/verkoop" importKey="KT00006462"/>
    <entry label="Communicatie" importKey="KT00002D02"/>
    <entry label="Directie/management" importKey="KT00006372"/>
    <entry label="Engineering & Design" importKey="B7F5D0AF-1E87-E211-9042-3A32F12A2200"/>
    <entry label="Financieel-economisch" importKey="KT00006402"/>
    <entry label="Financiele dienstverlening" importKey="KT000064FA"/>
    <entry label="Horeca/Toerisme" importKey="KT00007AFA"/>
    <entry label="Inkoop" importKey="KT00007AFE"/>
    <entry label="Juridisch/bestuurlijk" importKey="KT000064E2"/>
    <entry label="Laboratorium" importKey="6181"/>
    <entry label="Logistiek" importKey="KT00007B02"/>
    <entry label="Marketing/pr/reclame" importKey="KT0000634E"/>
    <entry label="Medisch/zorg/ontspanning" importKey="KT0000648A"/>
    <entry label="Onderwijs/onderzoek" importKey="KT00006406"/>
    <entry label="Overig" importKey="KT00007B2A"/>
    <entry label="Productie/uitvoerend" importKey="KT00006E26"/>
    <entry label="P&O" importKey="KT00006442"/>
    <entry label="Techniek" importKey="KT000064F6"/>
    <entry label="Transport en logistiek" importKey="KT0000647E"/>
    <entry label="Transport" importKey="KT0000642E"/>
    <entry label="Verzekeringen" importKey="KT0000647C"/>
    <entry label="Verzorging Verpleging" importKey="KT0000647D"/>
</entries>

 

 XMLAPI

Even though the XUI Plugin is by far the easiest and preferred way of integration RecruitAnywhere into your ATS, RecruitmentTechnologies also provides an API only option.

The RecruitAnywhere API allows you to get the allowed channels, get the current job status and post a job.

Make sure the following API calls are made:

KTXMLGetContractsServlet

Each organisational unit (company branch) and consultant can have different accounts on a channel / job board. To retrieve the channels a company branch / consultant is allowed to post jobs to use the KTXMLGetContractsServlet.

The KTXMLGetContractsServlet is called using a HTTP GET with basic authentication.

This is the URL: http://<server>/servlet/KTXMLGetContractsServlet?companybranch=123&consultant=

Below is an example of the returned XML. In this case the recruiter is allowed to post jobs to the channels 'DUMMY' and 'DUMMY2'.

Note: this recruiter has a choice on DUMMY2 of two accounts. Please make sure your UI allows a selection of accounts for a channel.

<?xml version="1.0" encoding="UTF-8"?>
<Contracts preselectChannels="" status="ok">
  <Channel id="DUMMY">
    <Contract label=" Test Dummy-2-3-3-3-3-5-5 (DEMO0212B41)" data="DEMO0212B41" manualrepostenabled="1" autorepostenabled="1" autorepostdays="10" type="C" limit="12301" periodunit="M" periodcount="2" periodlimit="5" used="84" unitpricedispl="EUR 0" unitprice="0.0" chname="Dummy Test Channel" churl="www.dummytestchannel.nl" chlogourl="/__C1256C6D007D64E1.nsf/0/1225C6FAEE39B5D1C12573790043B46C/$file/DUMMY.jpg" chdescription="" maxPublishDuration="P60D" mandatoryFieldsVacancy="" mandatoryFieldsProduct=""/>
  </Channel>
  <Channel id="DUMMY2">
    <Contract label=" DEMOV5001007C27-2A" data="DEMOV5001007C27-2A" manualrepostenabled="1" autorepostenabled="1" autorepostdays="11" type="C" limit="99999" periodunit="U" periodcount="1" periodlimit="1" used="31" unitpricedispl="EUR 0" unitprice="0.0" chname="Dummy2 Test Channel" churl="www.dummy2testchannel.nl" chlogourl="/__C1256C6D007D64E1.nsf/0/1A5C79CC4C943FE5C1257378002DFD43/$file/DUMMY2.jpg" chdescription="" maxPublishDuration="P80D" mandatoryFieldsVacancy="JobTitle,JobCompanyProfilePlainHTML,JobDescriptionPlainHTML,JobRequirementsPlainHTML,JobOfferPlainHTML,JobBranch,JobCategory_1,JobContractType,JobLevel,JobEducation_1,JobEducationDir_1,JobHours,JobRegion_1,JobOfficeCity_1,JobOfficeZipCode" mandatoryFieldsProduct=""/>
    <Contract label=" FeedPackage DUMMY (KTDEVDUMMYFEEDPACK)" data="KTDEVDUMMYFEEDPACK" manualrepostenabled="1" autorepostenabled="1" autorepostdays="7" type="C" limit="99999" periodunit="M" periodcount="1" periodlimit="2" used="2" unitpricedispl="EUR 0" unitprice="0.0" chname="Dummy2 Test Channel" churl="www.dummy2testchannel.nl" chlogourl="/__C1256C6D007D64E1.nsf/0/1A5C79CC4C943FE5C1257378002DFD43/$file/DUMMY2.jpg" chdescription="" maxPublishDuration="P58D" mandatoryFieldsVacancy="JobTitle,JobCompanyProfilePlainHTML,JobDescriptionPlainHTML,JobRequirementsPlainHTML,JobOfferPlainHTML,JobBranch,JobCategory_1,JobContractType,JobLevel,JobEducation_1,JobEducationDir_1,JobHours,JobRegion_1,JobOfficeCity_1,JobOfficeZipCode" mandatoryFieldsProduct=""/>
  </Channel>
</Contracts>

KTXMLGetDocumentStatusServlet

Using the KTXMLGetDocumentStatusServlet your application can retrieve:

This interface can not be used for batch requesting the status of all jobs. The preferred way of using it is only when your user requests the status of a job it is fetched in real time from the KTXMLGetDocumentStatusServlet.

The KTXMLGetDocumentStatusServlet is called using a HTTP GET with basic authentication.

This is the URL: http://<server>/servlet/KTXMLGetDocumentStatusServlet?vid=123

('vid' is the job ID)

Below is an example of the returned XML. In this case the job was already posted on the channel 'DUMMY'.

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
  <JobPosition id="110814-7A6" status="active">
    <Channel id="DUMMY" contractID="DEMO0212B41" planned="2019/11/10 19:00" plannedGMT="2019/11/10 18:00" posted="2019/11/10 19:00" postedGMT="2019/11/10 18:00" updated="" updatedGMT="2019/11/13 14:41" duration="P10D" durationStartDate="A" postedDays="003" expireDays="007" expires="2019/11/20 19:00" expiresGMT="2019/11/20 18:00" creditUnitPrice="0" creditUnitPriceCurrency="" creditUnitPriceDispl="" repostnow="" autoRepostCount="996" onPosterQueue="" advertURL=""/>
  </JobPosition>
</Jobs>

KTXMLValidateAndSaveDocumentServlet

This allows you to HTTP POST an XML JobPosition with all the job details and channel selections. The response will contain any validation errors like accounts not in use or no more credits available.

You can post the job specifications in the RecruitAnywhere format or in your own format (some additional integration costs will apply).

These are the RecruitAnywere API end points to post to:

Development: http://dev1.knollenstein.nl/servlet/KTXMLValidateAndSaveDocumentServlet

Production: http://app.knollenstein.nl/servlet/KTXMLValidateAndSaveDocumentServlet

Below is the structure of the JobPosition XML.

The mapping values are values from the various lists in RecruitAnywhere like job categories, regions etc. These lists are copied from the ATS to RecruitAnywhere and mapped to the values on the job boards / channels on setup.

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
    <JobPosition id="AB100" status="active" docsource="<your ATS>">
        <JobDetails>
                <!-- Mapping value from RecruitAnywhere -->
            <JobTitle/>
            <JobTitleDescription reviewfield=""> </JobTitleDescription>
                <!-- Mapping value from RecruitAnywhere -->
            <JobCategory/>
            <JobCategory/>
            <JobCategory/>
                <!-- Mapping value from RecruitAnywhere -->
            <JobLevel/>
                <!-- Mapping value from RecruitAnywhere -->
            <JobBranch/>
            <JobCompanyProfile reviewfield=""> </JobCompanyProfile>
                <!-- Mapping value from RecruitAnywhere -->
            <JobContractType/>
            <JobParttime/>
            <JobHours/>
            <JobDescription reviewfield=""> </JobDescription>
            <JobRequirements>
                <JobRequirementsDescription reviewfield=""> </JobRequirementsDescription>
                <Experience/>
                <!-- Mapping value from RecruitAnywhere -->
                <Education/>
                <Education/>
                <Education/>
                <!-- Mapping value from RecruitAnywhere -->
                <EducationDirection/>
                <EducationDirection/>
                <EducationDirection/>
                <!-- Mapping value from RecruitAnywhere -->
                <JobLanguageProficiencyLevel lang=""> </JobLanguageProficiencyLevel>
                <JobLanguageProficiencyLevel lang=""> </JobLanguageProficiencyLevel>
                <JobLanguageProficiencyLevel lang=""> </JobLanguageProficiencyLevel>
            </JobRequirements>
            <JobOffer>
                <JobOfferDescription reviewfield=""> </JobOfferDescription>
                <Salary>
                    <SalaryValueFrom/>
                    <SalaryValueTo/>
                </Salary>
            </JobOffer>
            <JobSummary reviewfield=""> </JobSummary>
            <JobLocation>
                <!-- Mapping value from RecruitAnywhere -->
                <LocationRegion/>
                <LocationRegion/>
                <LocationRegion/>
                <LocationZipCode/>
                <LocationCity/>
            </JobLocation>
        </JobDetails>
        <Contact>
            <BranchName/>
            <Name/>
            <FirstName/>
            <MiddleInitial/>
            <LastName/>
            <Sex> </Sex>
            <Email> </Email>
            <Website> </Website>
            <Phone> </Phone>
            <AddressName> </AddressName>
            <AddressNo> </AddressNo>
            <AddressNoExt> </AddressNoExt>
            <ZipCode> </ZipCode>
            <City> </City>
            <Country> </Country>
        </Contact>
        <!-- All channels this job needs to posted / updated to -->
        <!-- Leave out a channel to remove the job from that channel (if it was posted) -->
        <Channels>
            <Channel autorepost="n" repostnow="n">NVB-NL</Channel>
            <Channel autorepost="n" repostnow="n">MB</Channel>
            <Channel autorepost="n" repostnow="n">INDEED</Channel>
        </Channels>
    </JobPosition>
</Jobs>

The response is exactly the same as what is returned by the KTXMLGetDocumentStatusServlet above.

Note: To remove a job completely from RecruitAnywhere and the job boards, send the XML above with JobPosition/@status set to 'inactive'.

 

 FeedIntegration

You can also setup a feed on your end which RecruitAnywhere will read in a couple of times a day.

New jobs will be inserted into RecruitAnywhere and posted to the selected job boards, changed jobs will be updated on the job boards and jobs no longer in the feed will be deleted from RecruitAnywhere and the job boards.

The <Channels> tag determines where a job should be posted to. You can also leave out the <Channels> tag and let RecruitAnywhere select the job boards automatically. This could be a fixed set of job boards or could be based on e.g. the sector ('JobBranch').

Below is an example of a feed using our XML format.

The list values are values from the various lists in RecruitAnywhere like job categories, regions etc. These lists are copied from the ATS to RecruitAnywhere and mapped to the values on the job boards / channels on setup.

Mandatory fields: JobTitle or JobTitleDescription, JobCategory, JobLevel, JobBranch, JobContractType, JobDescription, JobRequirementsDescription, Education, JobOfferDescription, LocationRegion, LocationZipCode, LocationCity, BranchName (or code).

<?xml version="1.0" encoding="UTF-8"?>
<Jobs>
    <JobPosition id="AB100" status="active" docsource="<your ATS>">
        <JobDetails>
            <!-- List value JobTitle (provide ID not name) -->
            <JobTitle/>
            <JobTitleDescription><![CDATA[...]]></JobTitleDescription>
            <!-- List value JobCategory (provide ID not name, max 3 values) -->
            <JobCategory/>
            <JobCategory/>
            <JobCategory/>
            <!-- List value Job level (provide ID not name) -->
            <JobLevel/>
            <!-- List value Job level  / sector (provide ID not name) -->
            <JobBranch/>
            <JobCompanyProfile><![CDATA[...]]></JobCompanyProfile>
            <!-- List value Job contract type (provide ID not name) -->
            <JobContractType/>
            <JobParttime/>
            <JobHours/>
            <JobDescription><![CDATA[...]]></JobDescription>
            <JobRequirements>
                <JobRequirementsDescription><![CDATA[...]]></JobRequirementsDescription>
                <Experience/>
                <!-- List value Education level (provide ID not name, max 3 values) -->
                <Education/>
                <Education/>
                <Education/>
                <!-- List value Education direction / discipline (provide ID not name, max 3 values) -->
                <EducationDirection/>
                <EducationDirection/>
                <EducationDirection/>
                <!-- List value Language proficiency level (provide ID not name, max 3 values) -->
                <JobLanguageProficiencyLevel lang="nl"> </JobLanguageProficiencyLevel>
                <JobLanguageProficiencyLevel lang="en"> </JobLanguageProficiencyLevel>
                <JobLanguageProficiencyLevel lang="..."> </JobLanguageProficiencyLevel>
            </JobRequirements>
            <JobOffer>
                <JobOfferDescription><![CDATA[...]]></JobOfferDescription>
                <Salary>
                    <SalaryValueFrom/>
                    <SalaryValueTo/>
                </Salary>
            </JobOffer>
            <JobSummary><![CDATA[...]]></JobSummary>
            <JobLocation>
                <!-- List value Region / province (provide ID not name, max 3 values) -->
                <LocationRegion/>
                <LocationRegion/>
                <LocationRegion/>
                <LocationZipCode/>
                <LocationCity><![CDATA[...]]></LocationCity>
            </JobLocation>
        </JobDetails>
        <Contact>
            <!-- Provide organisation ID not name -->
            <BranchName><![CDATA[...]]></BranchName>
            <FirstName><![CDATA[...]]></FirstName>
            <MiddleInitial><![CDATA[...]]></MiddleInitial>
            <LastName><![CDATA[...]]></LastName>
            <Sex></Sex>
            <Email></Email>
            <Website></Website>
            <Phone></Phone>
            <AddressName><![CDATA[...]]></AddressName>
            <AddressNo><![CDATA[...]]></AddressNo>
            <AddressNoExt><![CDATA[...]]></AddressNoExt>
            <ZipCode></ZipCode>
            <City><![CDATA[...]]></City>
            <Country><![CDATA[...]]></Country>
        </Contact>
        <!-- All channels this job needs to posted / updated to -->
        <!-- Leave out a channel to remove the job from that channel (if it was posted) -->
        <!-- Channels can also be automatically selected by RecruitmentTechnologies using business rules -->
        <Channels>
            <Channel autorepost="n" repostnow="n">NVB-NL</Channel>
            <Channel autorepost="n" repostnow="n">MB</Channel>
            <Channel autorepost="n" repostnow="n">INDEED</Channel>
        </Channels>
    </JobPosition>
    <JobPosition id="AB101" status="active" docsource="<your ATS>">
       ...
    </JobPosition>
    <JobPosition id="AB102" status="active" docsource="<your ATS>">
       ...
    </JobPosition>
</Jobs>

Note: To remove a job completely from RecruitAnywhere and the job boards, leave out the job from the feed XML.

 

 sourceAnyone

 

 statEverything