
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:
- prefix your application links with https://apply.applyanywhere.com/
- add applyanywhere.com to your analytics package and reCaptcha
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:
- change the beginning of the link from 'https://' to 'https/'
- prefix this result with 'https://apply.applyanywhere.com/'
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:
- create a unique URL for a form
- add an upload button
- optional: add contact fields like first name, last name, address, phone etc.
- add a session id / uid or any other hidden field for security
- on submit, redirect the candidate to their profile or next step in the setup
- prefix the link as described above
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
- One API to post to a wide range of application forms
- No need to integrate with an ATS (but also possible)
- Easy setup per form / client
- Supports multi-forms
- Fallback scenario for forms with custom mandatory fields
Integration
- Create a 'one click apply' button for logged in candidates on your job board
- Have the 'one click apply' button trigger a HTTP POST to /JobBoardApply/apply, using your credentials
- If you receive an 'OK' then no further actions is required: the candidate has applied using their stored details and resume
- If you recieve an 'ERROR' then use the 'fallbackApplyURL' to display a trimmed and prefilled application form for the candidate to complete
- You can also use the trimmed application form for candidates who are not logged in: use a HTTP GET to /JobBoardApply/generateFallbackApplyURL
New clients setup
- Provide an example application form and client ID to RecruitmentTechnologies
- Once setup and field mapping is done by RecruitmentTechnologies, you will receive a 'JobBoardApply configID' for this client's setup
- Store the configID with your client record
* 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:
- 'OK': application form submitted (in real-time)
- 'ERROR': e.g. missing mandatory fields
- the URL of the stripped version of the application form is returned, to be used as a fallback for the candidate, prefilled with the candidates data
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:
- the configID is constructed using the AwMApiKey header
- the original application form URL is constructed using the applFormURLScript in the config
- the resume file name is constructed using the resumeValue and the fileExt
- fields are mapped to their JobBoardApply counter parts

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:
- Most seamless integration with RecruitmentTechnologies;
- Easy to set up;
- Handles all the API calls to RecruitAnywhere;
- Provided a Single Sign on solution;
- Plug-in maintained by RecruitmentTechnologies.

IntegratingXUI
Necessary: Your ATS only needs to provide 3 things for the XUI plug-in:
- A web location to retrieve the Job Data in XML format or an ATS API to retrieve a single job
- An iframe to load the XUI plug-in
Retrieve token for SSO (see)
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)
- [JobID] is the variable job number which refers to the specific job within the ATS;
- This JobID must be unique per client/database;
- This url must contain all the xml data for the specific job, i.e. all the mandatory fields must be available within this xml;
- The job XML must be in RecruitAnywhere XML format.
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:
- XUIUserID: RecruitmentTechnologies Username;
- XUIVid: Job ID of the job the user is working on and which corresponds with the XML Job ID;
- XUILocale: The country/language locale code. for example "nl_NL";
- XUIAccessToken: the RecruitmentTechnologies access token which is retrieved.
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
- URL to post the status to;
- Username for basic auth;
- Password for basic auth.
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:
- The system will return the names in the requested language or will return the default otherwise
- 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 to get the channels and accounts for this organisational unit / recruiter
- KTXMLGetDocumentStatusServlet to get the current job status, if any, on the channels
- KTXMLValidateAndSaveDocumentServlet to post the job with the selected channels
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=
- 'companybranch' is the organisational unit, either the code, id or name
- 'consultant' is the recruiter, either the id or name
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:
- which job boards were selected for this vacancy
- date/time this vacancy was planned
- date/time this vacancy was posted
- date/time this vacancy was updated
- the url linking directly to the advert on the job board (if available)
- error messages in case the vacancy was not posted or updated correctly
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
