Total jobs/caterer [UK]

Introduction

Scope: This XML integration guide applies to both Totaljobs and Caterer. The XML format, posting behaviour and integration rules are the same for both platforms. Only the test URLs and test credentials in Appendix II are platform-specific.

The purpose of this document is to explain how to produce an XML job feed for posting large numbers of jobs to the totaljobs.com web site. XML feeds allow job posters to add, delete and update jobs.

The document will explain the data structure of an XML feed together with definitions of the data types required to process jobs.

Once an XML job feed is created by the job poster it can be submitted to totaljobs.com in several ways. The method of submission of an XML job feed will depend upon the technology available to the job poster and their preference for file transmission across the internet. This document will describe how an XML job feed can be submitted to totaljobs.com.

Data Structure

Data must be sent in Extensible Markup Language (XML) and in a format that is recognised by the Bulk Job Loading system. The latter is the application that processes job feeds and maintains large volumes of jobs on the totaljobs.com web site.

The following example is an XML job feed containing a single job advert:

<FILE>
<ADVERT>
<ROOT LOADTYPE= "A">
<JOB FEEDID="TEST"
LIVEDAYS="28"
UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Senior Auditor required for City practice."
TITLE="Senior Auditor"
REGION="North West"
TOWN="Manchester"
POSTCODE="M1 3BN"
RATEUNIT="a"
SALARYMIN="25000"
SALARYMAX="30000"
SALARYDESC="30k plus benefits"
INTERNALJOBREF="REF20050202TEST01"
RESPONSEURL="http://www.totaljobs.com/"
HIDEFULLPOSTCODE="False"
JOBTEMPLATENAME="Standard Job" />
<POSTINGCOMPANY USERNAME="totaljobstestsite"
PASSWORD="FUM7aYT8" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Permanent" />
</ROOT>
</ADVERT>
</FILE>

Please note the following important points about an XML job feed:

  • An XML job feed consists of nodes (e.g. JOB), attributes(e.g. FEEDID) and values(e.g. TEST)
  • Nodes must be closed. For example <FILE>…</FILE> or <JOB FEEDID=”TEST“…/>
  • XML is case sensitive. For example the <FILE> node cannot be closed with </file>.
  • A feed must contain only one <FILE>node.
  • A <FILE> node must contain one or more <ADVERT> nodes.
  • Each <ADVERT> node must contain a single <ROOT> node.
  • The <ROOT> node must be assigned a correct loadtype value.
  • The <ROOT> node must contain a <JOB>, <POSTINGCOMPANY> and <CONTACT> node. The <ADDITIONALJOBTYPE> node is optional but should be included to allow jobseekers to refine their job searches. The <SCREENINGQUESTIONS> node is optional, if added additional questions will be displayed to the candidate and it will be obligatory for them to answer.
  • Where a node contains an attribute, the attribute must be assigned a correct value.
  • The structure of an XML job feed must conform to the format detailed in the following section titled XML Format.

XML Format

The following table contains a detailed description all the nodes and attributes that are used in the totaljobs.com XML format.

XMLData Field NameExample ValueRequiredSizeDescription
<FILE>YOpens a job feed.
<ADVERT>YOpens an advert.
<ROOTYSet the action to be performed on the job:
LOADTYPE"A"Y1A to load a job, D to delete, U to update.
>
<JOBY
FEEDID"TEST"Y10The Data Feed Identifier is unique and will be assigned to you by feed support.
LIVEDAYS"28"

Y

Ignored on the new platform

(see Appendix III)

Set the number of days that the job will appear on the site. The maximum duration for an advert is specified in your contract.
UNIQUEJOBNO"20050202TEST01"Y40The UNIQUEJOBNO must be unique and is your reference to identify a job. Avoid formulations that other users may use (e.g. tj1, tj2, 1234, johnsmith etc.).
DESCRIPTION"Senior Auditor required for City practice"YN/AThe job description can be as long as necessary. HTML tags can be used to format the description – see Appendix V.
TITLE"Senior Auditor"Y255The job will be advertised under this heading.
RATEUNIT"a"YSalary rate unit – See Appendix III for valid rate units
SALARYMIN"10000"YSee Appendix III for valid min salary values.
SALARYMAX"11999"YSee Appendix III for valid max salary values.
SALARYDESC"30K plus benefits"Y70A description of the salary, which can include both text and figures. If no value is provided, this field will default to “Competitive”.
INTERNALJOBREF"REF20050202TEST01"Y70We recommend that you always assign internal job references. They allow you to track your job on the site and help to identify it should you need to delete it.
RESPONSEURL" https://www.totaljobs.com/"NRedirects users to an external URL to complete their application.
REGION"North West"YSee Appendix III for values. All valid REGION and TOWN values can be found in the accompanying Location List.
TOWN"Manchester"NIf you are unable to specify a postcode, you can use the free text town field instead; the town will be assigned to the job as its location. If you are using the town field a region or county location MUST be specified in the region field. This will be used to resolve any ambiguous town locations.
POSTCODE"M1 3BN"N

In addition to the Region and Town, you can also specify a full UK postcode, and the postal district of that postcode will be assigned to the job as its location.

For example, specifying the postcode “M1 3BN” will advertise the job as in “City Centre, Manchester (M1), M1 3BN”.

HIDEFULLPOSTCODE"False"

N

Ignored on the new platform

(see Appendix III)

In addition to the specifying the postcode, which makes the job more likely to be found on our site, you can choose to Hide the full postcode.

For example, specifying the HideFullPostcode as “True” will advertise the job as in “City Centre, Manchester (M1)”, “False” will advertise the job to the full postcode “City Centre, Manchester (M1), M1 3BN”.

JOBTEMPLATENAME"ProPlus; Standard Job"Y100Specifies the name of a job template. The template determines branding, and for clients migrated to our new platform it also determines the product. See Appendix III for details.
EUONLY"True"N10Specifies whether the job can be viewed by candidates outside the EU.
/>
<POSTINGCOMPANY
USERNAME"totaljobstestsite"YThis is will be assigned to you by our feed support team.
PASSWORD"FUM7aYT8"YThis is will be assigned to you by our feed support team.
/>
<CONTACT
FAX"020 5678 9999"N20The fax number for the job contact
PHONE"020 1234 9999"N20The telephone number for the job contact
EMAIL"ben@test.com"Y60Candidate applications will be delivered here
FIRSTNAME"Recruitment Team"Y30The name of the job contact.
NOTIFICATIONEMAIL"andy@test.com"N60The email address used for job related notifications, include if it needs to be different from the Applications e-mail address specified in “EMAIL” field above
/>
<ADDITIONALJOBTYPENSet this node if you want the job to be searchable under a particular search category. Please see the next section for more information on setting additional job types.
GROUP"Permanent"YSee Appendix III for valid job types.
/>
<SCREENINGQUESTIONS>N1Set this node if you want the job to have a set of screening questions that the candidate will answer. Please see the Screening Questions section for more information.
<QUESTION
LABEL"Do you have a driver’s license?"Y140
ID"1"N140This ID is optional and should be defined if applications will be processed in an external applicant tracking system. QUESTION ID from the ATS should be provided here to benefit from this functionality.
TYPE"YES_NO"Y1Defines type of question from the 4 available types. Please see the Screening Questions section for more information.
>
<ANSWERSN1For TEXT question type ANSWERS node must not be defined.
ID"1"N140This ID is optional and should be defined if applications will be processed in an external applicant tracking system. ANSWERS ID from the ATS should be provided here to benefit from this functionality.
>
<ANSWERN
LABEL"YES"Y140
DESIRED"DESIRED"Y / N“DESIRED”Indicates a desired answer. It has to be defined for SINGLE_SELECT and YES_NO types of questions, impossible to define for CONFIRMATION and TEXT types.
ID"1"N140This ID is optional and should be defined if applications will be processed in an external applicant tracking system. ANSWER ID from the ATS should be provided here to benefit from this functionality.
/>
</ANSWERS>
</QUESTION>
</SCREENINGQUESTIONS>
</ROOT>Marks the end of the advert details
</ADVERT>Marks the end of the advert
</FILE>Marks the end of the file

Job Posting Actions

Adding a job

To add a job to an XML job feed set the LOADTYPE attribute to “A” and assign values to all mandatory fields specified in the XML Format table detailed above. See the example in ‘Data Structure’ section at the beginning of this document.

Deleting a job

To delete a job set the LOADTYPE attribute to “D” and assign a job identifier to the UNIQUEJOBNO field. The following example will delete the ‘Senior Auditor’ job:

<FILE>
<ADVERT>
<ROOT LOADTYPE="D">
<JOB UNIQUEJOBNO="20050202TEST01" />
<POSTINGCOMPANY USERNAME="totaljobstestsite" PASSWORD="FUM7aYT8" />
</ROOT>
</ADVERT>
</FILE>

Note the following points:

  • To successfully delete a job currently advertised on totaljobs.com the job must exist on the site.
  • The account used to delete a job must be the same as the account used to load the job.
  • You can also delete a job using an internal job id. The internal job id is created when a new job is loaded into our site and can be found in the response report detailed later in this document. To delete a job using an internal job id, replace <JOB UNIQUEJOBNO= with <JOB JOBID= and assign JOBID with an internal job id.
  • If attribute values other than the above are included in a delete action then these values will be ignored. For example, including <CONTACT FIRSTNAME=”Recruitment Team” /> in the above delete action will not remove the contact.
  • For clients migrated to our new platform, a delete takes the job offline instead of removing it permanently. See Appendix III for details.

Refreshing a job

On the legacy platform

To refresh an existing job set a delete action followed by an add action in the same XML job feed. Both records should have the same UNIQUEJOBNO. This effectively removes the current job and adds in a new version. To ensure that these two records are processed in the correct order, both actions must be in the same XML job feed. The following example will refresh the ‘Senior Auditor’ test job and change the posting days and salary details:

<FILE>
<ADVERT>
<ROOT LOADTYPE="D">
<JOB FEEDID="TEST" LIVEDAYS="28"
UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Senior Auditor required for City practice."
TITLE="Senior Auditor"
REGION="North West"
TOWN="Manchester"
POSTCODE="M1 3BN"
RATEUNIT="a"
SALARYMIN="25000"
SALARYMAX="30000"
SALARYDESC="30k plus benefits"
INTERNALJOBREF="REF20050202TEST01"
RESPONSEURL="https://www.totaljobs.com/"" />
<POSTINGCOMPANY USERNAME="totaljobstestsite" PASSWORD="FUM7aYT8" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Permanent" />
</ROOT>
</ADVERT>
<ADVERT>
<ROOT LOADTYPE="A">
<JOB FEEDID="TEST" LIVEDAYS="14"
UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Senior Auditor required for City practice."
TITLE="Senior Auditor"
REGION="North West"
TOWN="Manchester"
POSTCODE="M1 3BN"
RATEUNIT="a"
SALARYMIN="35000"
SALARYMAX="40000"
SALARYDESC="40k plus benefits"
INTERNALJOBREF="REF20050202TEST01"
RESPONSEURL="https://www.totaljobs.com/" />
<POSTINGCOMPANY USERNAME="totaljobstestsite" PASSWORD="FUM7aYT8" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Permanent" />
</ROOT>
</ADVERT>
</FILE>

Note the following point:

  • Jobs that have expired will still need to be refreshed. If a job poster attempts to add a new job using a UNIQUEJOBNO that is assigned to an expired job then the new job will error.
On the new platform

Refreshing a job is no longer available on the new platform. This functionality has been replaced with Online/Offline job adverts.

Clients can take a job advert offline, which removes it from the site without expiring the advert. This means the same listing can be republished during its original live period (30 or 60 days) without consuming additional budget.

To take a job advert offline, use:

<ROOT LOADTYPE="D">

When you are ready to put the job advert back online, keep the job details unchanged and use:

<ROOT LOADTYPE="A">

Updating a job

To update a job set the LOADTYPE attribute to “U” and assign a job identifier to the UNIQUEJOBID field. The following fields can be updated: DESCRIPTION, TITLE, REGION, TOWN, POSTCODE, SALARYDESC, INTERNALJOBREF, SALARYMIN, SALARYMAX, ADDITIONALJOBTYPE and RESPONSEURL. The following example will update the ‘Senior Auditor’ job to ‘Auditor’ and a update the location data:

<FILE>
<ADVERT>
<ROOT LOADTYPE="U">
<JOB UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Auditor required for City practice."
TITLE="Auditor"
REGION="London"
TOWN="Southwark"
POSTCODE="SE1 0TA"
RATEUNIT="a"
SALARYMIN="15000"
SALARYMAX="20000"
SALARYDESC="30k plus benefits and company car" INTERNALJOBREF="REF20050202TEST01"
RESPONSEURL="https://www.totaljobs.com/"
HIDEFULLPOSTCODE="False" />
<POSTINGCOMPANY USERNAME="totaljobstestsite"
PASSWORD="FUM7aYT8" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Contract" />
</ROOT>
</ADVERT>
</FILE>

Note the following points:

  • To successfully update a job currently advertised on totaljobs.com the job must exist on the site.
  • The account used to update a job must be the same as the account used to add the job.
  • You can also update a job using an internal job id. The internal job id is created when a new job is loaded into our site and can be found in the response report detailed later in this document.
  • The FEEDID value cannot be updated.
  • The LIVEDAYS cannot be updated.
  • To change the last four attributes you must refresh the job. See ‘Refreshing a job’ for more details.
  • For clients migrated to our new platform, the JOBTEMPLATENAME value cannot be updated. To change it you must refresh the job.
  • Any updates to a job advert must be made through the customer’s source system (i.e. updated on your end), as changes cannot be made manually.

Use the RESPONSEURL attribute to set a link to redirect job seekers to a third party apply online system or corporate website external to totaljobs.com. Full URL paths must be used with this attribute e.g. rather than .

RESPONSEURL="https://www.totaljobs.com/"

Setting the ADDITIONALJOBTYPE node

A job can be categorized by using job types. Job types allow job seekers to refine their job searches and return jobs that match a specific type. For example, a job seeker may wish to only search for permanent jobs. The <ADDITIONALJOBTYPE> node allow job posters to set a job with a specific job type. See Appendix III for a full list of valid job types.

The following example will categorize a job under the Permanent job type:

<ADDITIONALJOBTYPE GROUP="Permanent" />

Setting the SCREENINGQUESTIONS node

Using the <SCREENINGQUESTIONS> node allows job posters to post a job with a set of screening questions which will then be displayed to the candidate at apply. Screening questions are optional but can help recruiters to refine their search by gaining extra information apart from the candidates’ CV and profile.

Where possible (details below) screening questions need to have a desired answer defined by recruiter, which will then ensure that candidates are automatically assigned a ‘suitable’ or ‘unsuitable’ status based on their answers.

Important points:

  • If screening questions are attached to the job the candidate will have to answer them when submitting the application (all questions are obligatory)
  • Desired answer has to be defined for SINGLE_SELECT and YES_NO types of questions
  • Candidate suitability status based on desired answer is visible in the application confirmation e-mail or in totaljobs’ Applicant Manager application
  • One job can have a set of maximum 10 screening questions
  • Screening Questions cannot be displayed on jobs with an external apply URL

Available types of screening questions

The following table shows availability of question types and desired answers.

Question typeDefinitionDesired answer?
TEXT Provide the candidate with a question and a space to write multiple lines of text as answer to the question. NO
SINGLE_SELECT Provide the candidate with a question and ability to select only one answer from many (more than 1) options. YES
YES_NO Provide the candidate with a question and ability to select “yes” or “no” as their answer. YES
CONFIRMATION Provide the candidate with a question / statement and ability to acknowledge that they agree with a statement. (like Ts & Cs). NO

Adding a new job with screening questions

To add a job with screening questions to an XML job feed assign values to all mandatory fields specified in the XML Format table detailed above in ‘Data Structure’ section at the beginning of this document. You can see an example of screening questions below:

<?xml version="1.0"?>
<FILE>
<ADVERT>
<ROOT>
<ROOT LOADTYPE="A">
<JOB UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Auditor required for City practice."
TITLE="Auditor"
REGION="London"
TOWN="Southwark"
POSTCODE="SE1 0TA"
RATEUNIT="a"
SALARYMIN="15000"
SALARYMAX="20000"
SALARYDESC="30k plus benefits and company car" INTERNALJOBREF="REF20050202TEST01"
HIDEFULLPOSTCODE="False" />
<POSTINGCOMPANY USERNAME="loadtesttj"
PASSWORD="testonly" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Contract" />
<SCREENINGQUESTIONS>
<QUESTION LABEL="What is your country of residence?" ID="d04c8b8f-67e8-4e9f-99c0-1799908604d9" TYPE="SINGLE_SELECT">
<ANSWERS ID="singleSAnswerId">
<ANSWER LABEL="UK" ID="297b9335-c6b1-487e-95d5-803934b5b5ef"/>
<ANSWER LABEL="POLAND" ID="09106423-c5fc-4a86-8f07-58332c36f999" DESIRED="DESIRED"/>
< ANSWER LABEL="USA" ID="4719ab8f-d2c5-465a-a486-4fb315a21c29"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Do you have a driver’s licence?" ID="daaaebd1-a6ce-4d47-b331-71bdaf208de1" TYPE="YES_NO">
<ANSWERS ID="yesnoAnswerId">
<ANSWER ID="1" LABEL="YES"/>
<ANSWER ID="2" LABEL="NO" DESIRED="DESIRED"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Do you agree with Ts&Cs?" ID="e94673cc-42ad-4625-be08-72603c18b8d1" TYPE="CONFIRMATION">
<ANSWERS ID="confAnswerId">
<ANSWER ID="2ed9d621-cf22-4f22-a6b2-26b57f5d6db1" LABEL="I agree"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Describe your experience in sales" ID="a935e1aa-8c76-4e48-b11a-00032f9b42b7" TYPE="TEXT">
<ANSWERS ID="textAnswerId"/>
</QUESTION>
</SCREENINGQUESTIONS>
</ROOT>
</ADVERT>
</FILE>

Editing existing screening questions

To edit the existing screening questions set the LOADTYPE attribute to “U” and UNIQUEJOBID field to identify the job with screening questions that should be modified. Specify new screening questions in the SCREENINGQUESTIONS node part of the XML. The job’s existing screening questions will be removed and replaced with the new set. See the following example for reference:

<?xml version="1.0"?>
<FILE>
<ADVERT>
<ROOT>
<ROOT LOADTYPE="U">
<JOB UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Auditor required for City practice."
TITLE="Auditor"
REGION="London"
TOWN="Southwark"
POSTCODE="SE1 0TA"
RATEUNIT="a"
SALARYMIN="15000"
SALARYMAX="20000"
SALARYDESC="30k plus benefits and company car" INTERNALJOBREF="REF20050202TEST01"
HIDEFULLPOSTCODE="False" />
<POSTINGCOMPANY USERNAME="loadtesttj"
PASSWORD="testonly" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Contract" />
<SCREENINGQUESTIONS>
<QUESTION LABEL="What is your competency level in English?" ID="d04c8b8f-67e8" TYPE="SINGLE_SELECT">
<ANSWERS ID="singleSAnswerId">
<ANSWER LABEL="Basic" ID="297b9335-c6b1-487e"/>
<ANSWER LABEL="Fluent" ID="09106423-c5fc-4a86" DESIRED="DESIRED"/>
< ANSWER LABEL="Intermediate" ID="4719ab8f-d2c5-465a"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Do you have a driver’s licence?" ID="daaaebd1-a6ce-4d47" TYPE="YES_NO">
<ANSWERS ID="yesnoAnswerId">
<ANSWER ID="1" LABEL="YES"/>
<ANSWER ID="2" LABEL="NO" DESIRED="DESIRED"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Do you agree with Ts&Cs?" ID="e94673cc-42ad-4625" TYPE="CONFIRMATION">
<ANSWERS ID="confAnswerId">
<ANSWER ID="2ed9d621-cf22-4f22-a6b2" LABEL="I agree"/>
</ANSWERS>
</QUESTION>
<QUESTION LABEL="Describe your experience in sales" ID="a935e1aa-8c76-4e48" TYPE="TEXT">
<ANSWERS ID="textAnswerId"/>
</QUESTION>
</SCREENINGQUESTIONS>
</ROOT>
</ADVERT>
</FILE>

Editing a job without modifying its screening questions

To edit the job without modifying its screening questions, set the LOADTYPE attribute to “U” and proceed to modify the fields in the JOB node – e.g. use the standard way of updating the job as described in “Updating a job” section. Important – the SCREENINGQUESTIONS node should not be included in the file at all in this case.

Removing screening questions from the job

To remove screening questions from the job, set the LOADTYPE attribute to “U” and, without modifying the fields in the JOB node, provide an empty SCREENINGQUESTIONS node. Below is an example of an XML which will delete the screening questions from the job:

<?xml version="1.0"?>
<FILE>
<ADVERT>
<ROOT>
<ROOT LOADTYPE="U">
<JOB UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Auditor required for City practice."
TITLE="Auditor"
REGION="London"
TOWN="Southwark"
POSTCODE="SE1 0TA"
RATEUNIT="a"
SALARYMIN="15000"
SALARYMAX="20000"
SALARYDESC="30k plus benefits and company car" INTERNALJOBREF="REF20050202TEST01"
HIDEFULLPOSTCODE="False" />
<POSTINGCOMPANY USERNAME="loadtesttj"
PASSWORD="testonly" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Contract" />
<SCREENINGQUESTIONS>
</SCREENINGQUESTIONS>
</ROOT>
</ADVERT>
</FILE>

Submitting XML Job Feeds

Before submitting an XML job feed please ensure that the XML is valid and free of errors.

XML job feeds are submitted to the Bulk Job Loading system which is an automated application designed to process high volumes of jobs in real time.

There are two recommended methods in which an XML job feed can be submitted to totaljobs.com. The XML can either be sent within an HTML FORM tag as part of a form post or as a stream of text. Using either of these two methods will allow jobs to be instantly posted onto totaljobs.com.

Form Post Method

The Form Post Method is developed to allow a job poster to quickly post jobs in XML format using a simple HTML web file that can be opened in most internet browsers. You can quickly post a job to our test site using this method by following the instructions in Appendix IV.

Note this method requires the XML to be embedded within an HTML TEXTAREA tag and a FORM tag (See Appendix IV for an example). This arrangement limits the number of characters that can be set and consequently restricts the number of job adverts that can be posted in a single submission.

Text Stream Method

The Text Stream Method involves sending jobs in XML format as a stream of data. The process by which the XML is streamed to our web site will depend on the technology that the job poster has adopted. For an example of how XML jobs can be sent using the Text Stream Method, please see Appendix VII.

Note, unlike the Form Post Method, there is no limit to the number of job adverts that can be streamed to our web site. However, this method is not as straight forward as form posting therefore the client will require technical resources to implement it.

Posting URLs

The posting URL for sending jobs in XML format will depend on the platform and posting method used. Please see the relevant Appendix II section for Totaljobs or Caterer for the applicable posting URLs.

Permitted Posting Values

When posting jobs in XML format please check the following:

  • You have entered a unique UNIQUEJOBNO
  • You have entered valid values in the USERNAME and PASSWORD fields. While testing, please use the test account detailed in the relevant Appendix II section for Totaljobs or Caterer.
  • Attributes requiring specific data are assigned correct values that are detailed in Appendix III.

Receiving Response Reports for Job Postings

Job posters will receive a response report if an XML job feed is submitted successfully. If the feed is submitted by either the Form Post Method or the Text Stream Method then the response report will be in XML format and will look similar to the example below:

<FileLine>
<JobsSubmitted>1</JobsSubmitted>
<Errors />
<BulkJobLoader>
<Root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Job JobID="20050202TEST01">
<JobDetail type="Information">
<Detail>Job Load Started Feb 3 2005 12:27PM</Detail>
</JobDetail>
<JobDetail type="JobId">
<Detail>JobID=688722</Detail>
</JobDetail>
<JobDetail type="Information">
<Detail>Job Loaded Successfully</Detail>
</JobDetail>
</Job>
<Job JobID="688722">
<JobDetail type="Information">
<Detail>JobType Permanent has been added for JobID 688722</Detail>
</JobDetail>
</Job>
</Root>
</BulkJobLoader>
<PostingSuccess>True</PostingSuccess>
</FileLine>

Points to note about the above response report are as follows:

  • The total number of jobs processed is detailed in the <JobsSubmitted> node.
  • The response report will display information for each job submitted.
  • If a new job is successfully added then the job will be assigned an internal job id. In the above example the internal job id is 688722.
  • Then internal job id is mapped to the job poster’s UNIQUEJOBNO. In the above example 20050202TEST01 is associated with the internal job id 688722. You can use either identifier to delete or update the posted job.
  • The status of the job action together with a time stamp is displayed in <Detail> nodes.
  • If a job action is not successful then the response report will display an error message. For a list of common error messages please see Appendix I.

Appendix I – Common Error Messages

If an error message does not appear in the list below then contact our feed support team for further assistance.

XML document not found error message
- <FileLine>
<Error>The posted XML document was either not found or was not correctly formed.</Error>
<PostingSuccess>False</PostingSuccess>
</FileLine>

Cause: This suggest that the XML data is not formatted correctly, or may indicate a temporary server problem.

Resolution: Check the syntax of the XML according to this document. If the XML is correct, wait for ten minutes and try posting again.

Authentication failed error message
- <JobDetail type="Fatal error">
<Detail> Authentication failed for user 'login245'.</Detail>
</JobDetail>
- <JobDetail type="Information">
<Detail>Job Failed to Load</Detail>
</JobDetail>

Cause: This means that the account is either invalid or not currently activated.

Resolution: Contact our feed support team.

Unique job number already exist error message
- <JobDetail type="Fatal error">
<Detail>JOB\@UNIQUEJOBNO nrnmtw90tjtestanothe already exists so cannot be added.</Detail>
</JobDetail>
- <JobDetail type="Information">
<Detail>Job Failed to Load< /Detail>

Cause: This means that the UniqueJobNo already exists

Resolution: The job may already be live on totaljobs – try deleting and reposting it. Remember that the UNIQUEJOBNO MUST be unique. Try to avoid formulations that other users are likely to use (e.g. tj1, tj2 etc.).

Job does not exist error message
- <JobDetail type="FATAL ERROR">
<Detail>Job does not exist</Detail>
</JobDetail>
- <JobDetail type="INFORMATION">
<Detail>Job has not been deleted successfully</Detail>

Cause: The job cannot be deleted as it does not exist or it may have expired.

Resolution: Ensure that the UNIQUEJOBNO you are using is the same as the one used to load the job initially.

Screening Questions error messages
Job questionnaire contains more than 10 questions
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Questionnaire validation failed" Label="">
<ValidationError>The maximum number of questions per job is 10</ValidationError>
</Question>
</ScreeningQuestions>
Question ID is not unique within the set of questions
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Questionnaire validation failed" Label="">
<ValidationError>Question ID must be unique for a particular job</ValidationError>
</Question>
</ScreeningQuestions>
Question ID is too long
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>Question Id must be between 1 and 140 characters</ValidationError>
</Question>
</ScreeningQuestions>
Question Label not there / too long
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et.">
<ValidationError>Question Label must be between 1 and 140 characters</ValidationError>
</Question>
</ScreeningQuestions>
Answers ID too long
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>Answers Id must be between 1 and 140 characters</ValidationError>
</Question>
</ScreeningQuestions>
Answer node not provided
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>At least one answer must be specified</ValidationError>
</Question>
</ScreeningQuestions>
Answer ID too long
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>Answer Id must be between 1 and 140 characters</ValidationError>
</Question>
</ScreeningQuestions>
Answer ID not unique
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>Answer Id must be unique for a particular question</ValidationError>
</Question>
</ScreeningQuestions>
Answer Label missing / too long
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>Answer Label must be between 1 and 140 characters</ValidationError>
</Question>
</ScreeningQuestions>
Answer nodes less than 2 / more than 2 answers specified for YES_NO questions
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="Are you currently a UK resident?">
<ValidationError>YES_NO question type requires two answers, one Labelled Yes, one Labelled No</ValidationError>
</Question>
</ScreeningQuestions>
Answer Label wrong / missing for YES_NO type
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label=" Are you currently a UK resident?">
<ValidationError>YES_NO question type requires two answers, one Labelled Yes, one Labelled No</ValidationError>
</Question>
</ScreeningQuestions>
DESIRED not provided / wrong value for YES_NO type
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="Are you currently a UK resident?">
<ValidationError>For YES_NO question type one answer must be marked as "desired"</ValidationError>
</Question>
</ScreeningQuestions>
Answer node less than 2 / more than 10 answers specified
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>SINGLE_SELECT question type requires between 2 and 10 answers to be specified</ValidationError>
</Question>
</ScreeningQuestions>
DESIRED not provided / wrong value for SINGLE_SELECT type
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="What is your country of residence?">
<ValidationError>For SINGLE_SELECT question type one answer must be marked as "desired"</ValidationError>
</Question>
</ScreeningQuestions>
More than one answer specified for CONFIRMATION type
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="Do you agree with Terms & Conditions?">
<ValidationError>CONFIRMATION question type requires one answer to be specified</ValidationError>
</Question>
</ScreeningQuestions>
Answers node provided for TEXT type
 <JobDetail type="Fatal error">
<Detail>Screening Questions failed to load</Detail>
</JobDetail>
<ScreeningQuestions>
<Question ErrorDescription="Question 1 validation failed" Label="Describe your experience in sales">
<ValidationError>TEXT question type can't have defined answers</ValidationError>
</Question>
</ScreeningQuestions>

Appendix II – Totaljobs Test URLs

To access the test endpoints listed below, please contact Feed Support.

When posting jobs to our test site, please use the appropriate test account and feed identifier below.

Testing integrations for clients on the legacy platform:
Username="totaljobstestsite"
Password="FUM7aYT8"
FEEDID="TEST"

To post jobs in XML format, use the following URL:

The previous endpoints listed below are still available, but we strongly recommend using the new endpoint above.

Legacy API:

Form post:

Stream jobs:

Use the following URL to view jobs posted to our Jobseeker test site:

Jobs can also be viewed on our Ad Manager test site using the following URL (only for clients on the legacy platform):

Email address: loadtesttj
Password: testonly

Once you have successfully posted jobs to the test environment, please contact Feed Support for production URLs together with a live user account and feed ID.

Testing integrations for clients on the new platform

To ensure a more efficient and streamlined testing process, please request test credentials from Feed Support Team. The team will provide you with test credentials that allow you to post to the live site without the posting being displayed on the front end.

Appendix II – Caterer Test URLs

To access the test endpoints listed below, please contact Feed Support.

When posting jobs to our test site, please use the appropriate test account and feed identifier below.

Testing integrations for clients on the legacy platform:
Username="caterertestsite"
Password="SVG2xmI5"
FEEDID="TEST"

To post jobs in XML format, use the following URL:

The previous endpoints listed below are still available, but we strongly recommend using the new endpoint above.

Legacy API:

Form post:

Stream jobs:

Use the following URL to view jobs posted to our Jobseeker test site:

Jobs can also be viewed on our Ad Manager test site using the following URL (only for clients on the legacy platform):

Email address: loadtestct
Password: testonly

Once you have successfully posted jobs to the test environment, please contact Feed Support for production URLs together with a live user account and feed ID.

Testing integrations for clients on the new platform

To ensure a more efficient and streamlined testing process, please request test credentials from Feed Support Team. The team will provide you with test credentials that allow you to post to the live site without the posting being displayed on the front end.

Appendix III – Permitted Data Values

Job Types
  • Permanent
  • Contract
  • Temporary
  • Part Time
Locations

The following is a list of permitted REGION locations that a job can be posted under. For a comprehensive list of accepted locations, please see the accompanying Location List Detailing all accepted TOWN and REGION values.

East AngliaWalesEast MidlandsWest MidlandsLondonYorkshireNorth EastUKNorth WestEireNorthern IrelandEuropeScotlandSouth EastSouth West

JOBTEMPLATENAME

Branding can be applied to a job on the job details page by specifying the name of an existing job template for the company.

If the company has a default template set up and this field is not specified, the company default template will be used.

If the company does not have a default template set up and this field is not specified then the “Standard Job” branding will be used.

If the company has a default template set up and “Standard Job” branding is required, the string “Standard Job” can be specified.

EUOnly Indicator

Setting the EUONLY attribute to “True” will prevent jobseekers outside of the EU from viewing the job details page and will remove the job from any relevant searches performed by jobseekers outside the EU.

If the attribute is set to “False” all jobseekers will be able to view the job details and the job will be included in all relevant searches performed.

This is not a required attribute, and if left blank will default to true.

Salary Rates

The RATEUNIT node must be set to one of the following values depending upon the type of salary range specified for a job.

Salary Range TypeValue
Annual Salary a
Daily Rate d
Hourly Rate h
Salary Ranges
Annual Salary Ranges

To set an annual salary range for a job, assign the SALARYMIN and SALARYMAX nodes with a pair of values from the list below. Also note that the RATEUNIT node must be set to ‘a’

Salary RangeSALARYMINSALARYMAX
nil to 10k 0 9999
10k to 11K 10000 11999
12k to 13k 12000 13999
14k to 15k 14000 15999
16k to 17k 16000 17999
18k to 19k 18000 19999
20k to 21k 20000 21999
22k to 23k 22000 23999
24k to 25k 24000 25999
26k to 27k 26000 27999
28k to 29k 28000 29999
30k to 34k 30000 34999
35k to 39k 35000 39999
40k to 44k 40000 44999
45k to 49k 45000 49999
50k to 54k 50000 54999
55k to 59k 55000 59999
60k to 64k 60000 64999
65k to 69k 65000 69999
70k to 74k 70000 74999
75k to 79k 75000 79999
80k to 84k 80000 84999
85k to 89k 85000 89999
90k to 94k 90000 94999
95k to 99k 95000 99999
100k and above 100000 999999
Unspecified 0 0

The example below will set a job with a salary range of £10,000-£11,999 per year:

SALARYMIN = "10000"
SALARYMAX = "11999"
RATEUNIT = "a"
Daily Salary Ranges

To set a daily salary range for a job, assign the SALARYMIN and SALARYMAX nodes with a pair of values from the list below. Also note that the RATEUNIT node must be set to ‘d’.

Salary RangeSALARYMINSALARYMAX
nil to 40 0 39
40 to 47 40 47
48 to 55 48 55
56 to 63 56 63
64 to 71 64 71
72 to 79 72 79
80 to 87 80 87
88 to 95 88 95
96 to 103 96 103
104 to 111 104 111
112 to 119 112 119
120 to 139 120 139
140 to 159 140 159
160 to 179 160 179
180 to 199 180 199
200 to 219 200 219
220 to 239 220 239
240 to 259 240 259
260 to 279 260 279
280 to 299 280 299
300 to 319 300 319
320 to 339 320 339
340 to 359 340 359
360 to 379 360 379
380 to 399 380 399
400 to 419 400 419
420 to 439 420 439
440 to 459 440 459
460 to 479 460 479
480 to 499 480 499
Above 500 500 999999
Unspecified 0 0

The example below will set a job with a salary range of £40 to £47 per day:

SALARYMIN = "40"
SALARYMAX = "47"
RATEUNIT = "d"
Hourly Salary Ranges

To set a hourly salary range for a job, assign the SALARYMIN and SALARYMAX nodes with a pair of values from the list below. Also note that the RATEUNIT node must be set to ‘h’.

Salary RangeSALARYMINSALARYMAX
nil to 5.00 0 5
5.00 to 5.99 5 6
6.00 to 6.99 6 7
7.00 to 7.99 7 8
8.00 to 8.99 8 9
9.00 to 9.99 9 10
10.00 to 10.99 10 11
11.00 to 11.99 11 12
12.00 to 12.99 12 13
13.00 to 13.99 13 14
14.00 to 14.99 14 15
15.00 to 17.49 15 17
17.50 to 19.99 18 20
20.00 to 22.49 20 22
22.50 to 24.99 23 25
25.00 to 27.49 25 27
27.50 to 29.99 28 30
30.00 to 32.49 30 32
32.50 to 34.99 33 35
35.00 to 37.49 35 37
37.50 to 39.99 38 40
40.00 to 42.49 40 42
42.50 to 44.99 43 45
45.00 to 47.49 45 47
47.50 to 49.99 48 50
50.00 to 52.49 50 52
52.50 to 54.99 53 55
55.00 to 57.49 55 57
57.50 to 59.99 58 60
60.00 to 62.49 60 62
62.50 to 64.99 63 65
Above 65 65 999999
Unspecified 0 0

The example below will set a job with a salary range of £5.00 to £5.99 per hour:

SALARYMIN = "5.00"
SALARYMAX = "5.99"
RATEUNIT = "h"

Appendix IV – Sample HTML XML Form Post

The following HTML code demonstrates how to post a single job to our test site using the Form Post method.

To post the sample job to our test site do the following:

  • Copy the HTML code into Notepad and save as an html file (e.g JobPost.htm)
  • Open the file in a web browser.
  • In the text box give the UNIQUEJOBNO field a unique value.
  • Click ‘Submit Query’ to post the job.
  • The test site will return a response report detailing the load status of the job.
<HTML>
<TITLE>POST XML to TEST</TITLE>
<H1>POST XML to TEST</H1>
<FORM METHOD="POST" ACTION="https://recruiter.totaljobs.tjgtest.com/XMLDataPosting/XmlFormPostAuth.asp">
<TEXTAREA NAME="XmlData" ROWS="20" COLS="100">
<FILE>
<ADVERT>
<ROOT LOADTYPE="A">
<JOB FEEDID="TEST"
LIVEDAYS="28"
UNIQUEJOBNO="20050202TEST01"
DESCRIPTION="Senior Auditor required for City practice."
TITLE="Senior Auditor"
REGION="North West"
TOWN="Manchester"
POSTCODE="M1 3BN"
RATEUNIT="a"
SALARYMIN="25000"
SALARYMAX="30000"
SALARYDESC="30k plus benefits"
INTERNALJOBREF="REF20050202TEST01"
RESPONSEURL="https://www.totaljobs.com/"
HIDEFULLPOSTCODE="False" />
<POSTINGCOMPANY USERNAME="loadtesttj"
PASSWORD="testonly" />
<CONTACT PHONE="0333 0145 111"
EMAIL="ben@test.com"
FIRSTNAME="Recruitment Team" />
<ADDITIONALJOBTYPE GROUP="Permanent" />
</ROOT>
</ADVERT>
</FILE>
</TEXTAREA>
<INPUT TYPE="submit">
</FORM>

Appendix V – Formatting Job Descriptions in XML

Ordinary HTML tags can be used in XML files. However, there are special characters that will cause the Bulk Job Loading system to error. If these special characters are used then they must be escaped using the escape sequence detailed in the following table:

Special characterDescriptionEscape sequence
< less than &lt;
> greater than &gt;
& ampersand &amp;
‘ apostrophe &apos;
“ quotation mark &quot;

For example, use the character references &lt; and &gt; to represent left and right arrow brackets respectively.

HTML:
DESCRIPTION="Formatting can <strong> improve </strong> <ul> <li> the <li> appearance <li> of <li> a </ul> job description."
XML:
DESCRIPTION="Formatting can &lt;strong&gt; improve &lt;/strong&gt; &lt;ul&gt; &lt;li&gt; the &lt;li&gt; appearance &lt;li&gt; of &lt;li&gt; a &lt;/ul&gt; job description."
APPEARANCE:

Formatting can improve

  • the
  • appearance
  • of
  • a

job description.

Please note that live email and web links in job descriptions are not permitted. Internet links are allowed in the RESPONSEURL field, and email links in the EMAIL contact field.

Other characters that may cause XML job files to error are listed below. Use the corresponding escape sequence to resolve XML errors.

CharacterDescriptionEscape sequence
£ Pound sign &#163;

The following HTML tags are accepted by our job posting API:

strong, strike, span, div, em, ul, ol, li, br, p, b, i, u, font

We recommend removing font, div and span tags, as the function of these tags is not visible on the job advert.

Appendix VI – Changes in API behaviour for the clients on the new platform

JOBTEMPLATENAME

Every job branding template is available with every product. For example, a template named “Chef” is available in the following variants:

  • Pro; Chef
  • ProPlus; Chef
  • ProUltimate; Chef
  • ProCampus; Chef
  • Alljobs; Chef

Clients that do not use branding templates should send:

  • Pro; Default
  • ProPlus; Default
  • ProUltimate; Default
  • ProCampus; Default
  • Alljobs; Default

If the JOBTEMPLATENAME value is missing, blank, or does not contain a semicolon (;), the client’s default product and default branding template will be used.

Each client must specify the product they wish to use and the template name they wish to use. This is the only client-specific configuration that may need to be updated in your integration.

To avoid posting failures, the following format must be used:

  1. Enter the product name in capital letters.
  2. Follow the product name with a semicolon (;).
  3. Add a single space after the semicolon.
  4. Enter the template name exactly as it was created.

For example, if the template name is Chef:

  • Pro; Chef
  • ProPlus; Chef
  • ProUltimate; Chef

If your integration does not currently support JOBTEMPLATENAME, please add support for this field, as it is now mandatory. Without JOBTEMPLATENAME, clients can only use their default product and will not be able to select other products from the new portfolio.

If the value sent does not exist for the client, the job is published using the client’s default branding template and default product.

Because product-specific values are longer than the template names they are based on, the maximum length of JOBTEMPLATENAME has been increased from 50 to 100 characters.

IMPORTANT: JOBTEMPLATENAME cannot be changed during the job’s current posting period, either using LOADTYPE=”U” or by using LOADTYPE=”D” followed by LOADTYPE=”A”. The job must expire before a different branding template or product can be used.

IMPORTANT: Using LOADTYPE=”D” followed by LOADTYPE=”A”, either in the same request or in separate requests, within the original posting period for a given UNIQUEJOBNO takes the job offline and puts it back online without triggering a new consumption.

Attributes ignored for clients on the new platform

The attributes and nodes below are accepted for clients on the new platform but have no effect on the published job. Sending them is harmless and requires no changes on your side. None of them causes the job to be rejected or produces an error in the response report.

They are listed here so that you know not to rely on them.

Attribute or nodeEffect for a migrated client
JOB / LIVEDAYS The length of time a job stays live is set by the product: 30 days for Pro, ProPlus and ProCampus, and 45 days for ProUltimate. For Alljobs it’s determined by the contract. Any value sent is accepted and discarded.
CONTACT / FIRSTNAME The new platform stores an application email address against a job rather than a contact name.
CONTACT / PHONE Ignored. The new platform does not store a telephone number against the job.
CONTACT / FAX Ignored. The new platform does not store a fax number against the job.
CONTACT / NOTIFICATIONEMAIL The new platform does not have a separate notification address. Notifications are sent to the address provided in EMAIL. This also changes validation behaviour: an invalid value in this attribute currently causes the advert to be rejected, but for clients on the new platform it is accepted and ignored.
JOB / INDUSTRYLONGNAME, JOB / INDUSTRY No practical change. Neither attribute is part of this specification, and neither has had any effect since industry sectors were removed in 2018.
JOB / HIDEFULLPOSTCODE Ignored. The advert displays only the outward postcode, for example “City Centre, Manchester (M1)”. The full postcode you send is still used for search, so the job remains searchable by the full postcode.

Everything else in this specification continues to operate as before, including EUONLY, SALARYDESC and screening questions.

Appendix VII – Contact Us

If you have any queries regarding XML job feeds or the Bulk Job Posting system, please contact our Feed Support team:

Helpdesk: +44(0) 333 0145 111

Address: Totaljobs.com Ltd.

Totaljobs Group
Blue Fin
110 Southwark Street
London SE1 0TA

Email: feed.support@totaljobsgroup.com

Updated on 2026-10-13