You are on page 1of 30

Jobvite Data Services

Version 3.0 June 18, 2014


prepared by:

Marcin Bebel
CS Technical Account Manager

CONFIDENTIAL - Jobvite Data Services

Contents
Executive Summary .

Accessing Our Services ..

Candidate API

Employee API.

12

Requisition API...

16

Job Feed.

21

Contact Import API

26

Appendices.

29

CONFIDENTIAL - Jobvite Data Services

Executive Summary
Jobvite provides access to your companys account in several ways.
1. Using our secure application-programming interface, RESTful services can be called via
HTTP GET or POST (depending upon the action). You may interact with three sets of
data:!
a. Candidate This service can be used to get information about candidates and
new hires with the following actions. We will return up to 500 candidates.
Please note that this API returns HR-XML
i. getNewHires Get information about new hires for a given time period.
ii. getCandidates Get information about candidates.!
iii. updateCandidates Update the status for a set of candidates.
b. Requisition This service can be used to create new requisitions in Jobvite, or
synchronize/update requisitions in Jobvite from your external system.
c. Employee This service is used to keep your employee roster in Jobvite up to
date. This is a scheduled task that runs nightly and an email confirmation will be
received upon completion after 24 hours.
2. We also provide a job feed of your requisitions that you can use to power your career
site, an intranet career site, or to feed your data into another system.

Accessing Our Services


In order to access the services you will need to be issued an API key and secret key by the Jobvite
Customer Success team. Please file a request here: http://recruiting.jobvite.com/support/customer
You may also give us the IP address of the server that will be calling our service to increase
security.
What we need from you:!

The IP address of the server accessing our services.

What you need from us:

API key This will give you access to a service to get data related to your company.
Secret key This will be used to validate your API key.

Best Practices: Calling the API:

CONFIDENTIAL - Jobvite Data Services

Jobvite recommends calling our API on an as needed basis. Should customers need to
call the API more frequently than once a day, it is required that parameters be set on one of
the following:
o Dates at which candidates hit a desired workflow state.
o # of candidates per candidate list page (last 100, last 500 etc.)
o Candidates specific to a given requisition.
o Requisitions that have only seen changes

Candidate API
REST service end point: Via HTTP GET
Production: https://api.jobvite.com/v1/candidate?parameters
Staging: https://api-stg.jobvite.com/v1/candidate?parameters

Parameters:
api

Required

The API key issued by Jobvite.

secret

Required

The secret for this service, issued by Jobvite

action

Required

The action to perform. getNewHires, getCandidates ,

format

Required

The format of the data (HRXML)

wflowstate

Optional

The Jobvite candidate state name of candidates you are searching


for (only applicable to getCandidates)

datestart

Optional

The date after which the candidate was last updated for filtering
purposes.

dateend

Optional

The date before which the candidate was last updated for filtering
purposes.

dateformat

Optional

The format of the dates. The supported defaults are:


"MM/dd/yyyy", "MM-dd-yyyy, MM-dd-yyyyTHH:mm:ssZ

The API can only call up to 500 candidates at a time. To retrieve more than 500 at once, leverage
the "count" and a "start" parameter you can specify in the URL.
For example, if you already get the first 500 records and you want the next 500 records, you would
add start=501&count=500 in the URL. The count means how many you want (maximum 500). The
start means from where you want the next set of candidates.

CONFIDENTIAL - Jobvite Data Services


Please reference the Best Practices: Calling the API bullet in the Executive Summary for more
information on how frequently to call the Jobvite API.
Sample:
https://api.jobvite.com/v1/candidate?api=jobvite&secret=test&action=getNewHires&format=hrxml&
datestart= 08-01-2009&dateend=2009-08-15T11:21:33-0700
https://api.jobvite.com/v1/candidate?api=jobvite&secret=test&action=getCandidates&format=hrxm
l&wflowsta te=New
updateCandidates
Via HTTP POST!Production: https://api.jobvite.com/v1/candidate?parameters
Staging: https://api-stg.jobvite.com/v1/candidate?parameters

Parameters:
Api

Required

The API key is issues by Jobvite.

Secret

Required

The secret for this service, issued by Jobvite

action

Required

updateCandidates

Format Required hrxml/json/csv


POST Data:
The json should be sent as a post parameter with name data. The data format should look like
this:
[{
"applicationId": "xyz123",
"wflowstate": "Offer Accepted"
}, {
"applicationId": "xyz456",
"wflowstate": "Rejected"
}]
Results HRXML
The results returned will be XML with the following formats. If there are any errors processing the
request, only the Errors data will be returned, this will allow rapid assessment of any problems.
The exact new hire data and error codes will be provided in a revision of this document.

CONFIDENTIAL - Jobvite Data Services


New Hires:
<?xml version="1.0" encoding="UTF-8"?>
<Results xmlns="http://api.jobvite.com/action/api/v1" action="getNewHires" version="1.0">
<NewHires first="1" count="1" total="1">
<ns:NewHire xmlns:ns="http://ns.hr-xml.org/2007-04-15">
<ns:EmployeeInfo>
<ns:PersonName>
<ns:GivenName>Tony</ns:GivenName>
<ns:FamilyName>Stark</ns:FamilyName>
</ns:PersonName>
<ns:ApplicantId idOwner="Jobvite">
<ns:IdValue name="applicationId">p0MIXgwc</ns:IdValue>
</ns:ApplicantId>
<ns:ContactMethod>
<ns:Use>personal</ns:Use>
<ns:Location>home</ns:Location>
<ns:Telephone>
<ns:FormattedNumber>614.429.7689</ns:FormattedNumber>
</ns:Telephone>
<ns:Mobile>
<ns:FormattedNumber>9535054265</ns:FormattedNumber>
</ns:Mobile>
<ns:InternetEmailAddress>tony@starkindustries.com</ns:InternetEmailAddress>
<ns:PostalAddress>
<ns:CountryCode>US</ns:CountryCode>
<ns:PostalCode>94085</ns:PostalCode>
<ns:Region />
<ns:Municipality>Sunnyvale</ns:Municipality>
<ns:DeliveryAddress>
<ns:AddressLine>2 of 2</ns:AddressLine>
</ns:DeliveryAddress>
</ns:PostalAddress>
</ns:ContactMethod>
<ns:PersonDescriptors>
<ns:DemographicDescriptors>
<ns:Race />
</ns:DemographicDescriptors>
<ns:BiologicalDescriptors>
<ns:GenderCode>1</ns:GenderCode>
</ns:BiologicalDescriptors>
</ns:PersonDescriptors>
</ns:EmployeeInfo>
<ns:ApplicationInfo>
<ns:ApplicationHistory>
<ns:HiringProcessActivity>
<ns:Type>dateSubmitted</ns:Type>
<ns:Date>2013-01-09-08:00</ns:Date>
</ns:HiringProcessActivity>

CONFIDENTIAL - Jobvite Data Services


</ns:ApplicationHistory>
<ns:CandidateSupplier>
<ns:SupplierId idOwner="Jobvite">
<ns:IdValue name="sourcedBy">snV9Vfw6</ns:IdValue>
</ns:SupplierId>
<ns:EntityName />
<ns:SourceType>
<ns:NonStandardValue>Internal</ns:NonStandardValue>
</ns:SourceType>
</ns:CandidateSupplier>
</ns:ApplicationInfo>
<ns:PositionInfo>
<ns:ReferenceInfo>
<ns:RequisitionId idOwner="Jobvite">
<ns:IdValue name="requisitionId">533</ns:IdValue>
</ns:RequisitionId>
<ns:JobId idOwner="Jobvite">
<ns:IdValue name="jobId">ocQ2WfwK</ns:IdValue>
</ns:JobId>
</ns:ReferenceInfo>
<ns:OfferInfo>
<ns:NegotiatedPositionTitle>Prod Patch 09.Jan.2013</ns:NegotiatedPositionTitle>
<ns:DateJobAccepted>2013-01-07-08:00</ns:DateJobAccepted>
<ns:EmploymentStartDate>2013-02-01-08:00</ns:EmploymentStartDate>
</ns:OfferInfo>
<ns:OrganizationalUnit typeOfGroup="Department">
<ns:WorkSite>
<ns:WorkSiteName>Atlanta</ns:WorkSiteName>
<ns:UserArea>
<Regions>
<Region>BABA</Region>
</Regions>
</ns:UserArea>
</ns:WorkSite>
</ns:OrganizationalUnit>
<ns:ManagerInfo role="Manager">
<ns:ContactInfo>
<ns:PersonName>
<ns:GivenName>Kaushal</ns:GivenName>
<ns:FamilyName>Secondary</ns:FamilyName>
</ns:PersonName>
</ns:ContactInfo>
<ns:ManagerId idOwner="Jobvite">
<ns:IdValue name="userName">kkishore@jobvite.com</ns:IdValue>
</ns:ManagerId>
</ns:ManagerInfo>
</ns:PositionInfo>
<ns:UserArea>
<CustomFields>
<Field type="Candidate" name="Email address">kaushal@jobvite.com</Field>

CONFIDENTIAL - Jobvite Data Services


<Field type="Candidate" name="Candidate status">Experianced</Field>
<Field type="Candidate" name="CTC">0</Field>
<Field type="Job" name="Approval Chain">Kaushal Secondary
sxyajfwi</Field>
<Field type="Job" name="HRReqsthis">86543</Field>
<Field type="Job" name="SHL Package Id">7C61EF27-67A8-4FE2-B5DDC9E832CCFA71</Field>
</CustomFields>
</ns:UserArea>
</ns:NewHire>
</NewHires>
</Results>
Candidates:
<?xml version="1.0" encoding="UTF-8"?>
<Results xmlns="http://api.jobvite.com/action/api/v1" action="getCandidates" version="1.0">
<Candidates first="1" count="3" total="3">
<ns:Candidate xmlns:ns="http://ns.hr-xml.org/2007-04-15">
<ns:CandidateRecordInfo>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="applicationId">p3zjJfwo</ns:IdValue>
</ns:Id>
<ns:Status>Approved</ns:Status>
</ns:CandidateRecordInfo>
<ns:RelatedPositionPostings>
<ns:PositionPosting>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="requisitionId">1</ns:IdValue>
</ns:Id>
<ns:Title>Member Technical Staff</ns:Title>
</ns:PositionPosting>
</ns:RelatedPositionPostings>
<ns:CandidateSupplier>
<ns:SupplierId idOwner="Jobvite">
<ns:IdValue name="sourcedBy">sQnJafwQ</ns:IdValue>
</ns:SupplierId>
<ns:EntityName>Karthikeyan Seetharam</ns:EntityName>
<ns:SourceType>
<ns:NonStandardValue>Hiring Manager</ns:NonStandardValue>
</ns:SourceType>
</ns:CandidateSupplier>
<ns:CandidateProfile>
<ns:PersonalData>
<ns:PersonId idOwner="Jobvite">
<ns:IdValue name="candidateId">euHfxfwH</ns:IdValue>
</ns:PersonId>
<ns:PersonName>
<ns:GivenName>12345</ns:GivenName>
<ns:FamilyName>12345</ns:FamilyName>

CONFIDENTIAL - Jobvite Data Services


</ns:PersonName>
<ns:ContactMethod>
<ns:Use>personal</ns:Use>
<ns:Location>home</ns:Location>
<ns:InternetEmailAddress>12345@12345.com</ns:InternetEmailAddress>
</ns:ContactMethod>
</ns:PersonalData>
</ns:CandidateProfile>
<ns:Resume>
<ns:NonXMLResume>
<ns:TextResume>asdasds</ns:TextResume>
</ns:NonXMLResume>
</ns:Resume>
<ns:UserArea>
<CustomFields>
<Field type="Candidate" name="TestingOne">12</Field>
<Field type="Candidate" name="Email address">tw@qw.com</Field>
<Field type="Candidate" name="Candidate status">Experianced</Field>
<Field type="Candidate" name="CTC">121</Field>
</CustomFields>
</ns:UserArea>
</ns:Candidate>
<ns:Candidate xmlns:ns="http://ns.hr-xml.org/2007-04-15">
<ns:CandidateRecordInfo>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="applicationId">pzSJPfwJ</ns:IdValue>
</ns:Id>
<ns:Status>Approved</ns:Status>
</ns:CandidateRecordInfo>
<ns:RelatedPositionPostings>
<ns:PositionPosting>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="requisitionId">30092012</ns:IdValue>
</ns:Id>
<ns:Title>Android Web App Developer</ns:Title>
</ns:PositionPosting>
</ns:RelatedPositionPostings>
<ns:CandidateSupplier>
<ns:SupplierId idOwner="Jobvite">
<ns:IdValue name="sourcedBy">snV9Vfw6</ns:IdValue>
</ns:SupplierId>
<ns:EntityName />
<ns:SourceType>
<ns:NonStandardValue>Internal</ns:NonStandardValue>
</ns:SourceType>
</ns:CandidateSupplier>
<ns:CandidateProfile>
<ns:PersonalData>
<ns:PersonId idOwner="Jobvite">
<ns:IdValue name="candidateId">eXojCfw0</ns:IdValue>

CONFIDENTIAL - Jobvite Data Services


</ns:PersonId>
<ns:PersonName>
<ns:GivenName>James</ns:GivenName>
<ns:FamilyName>Morgan</ns:FamilyName>
</ns:PersonName>
<ns:ContactMethod>
<ns:Use>personal</ns:Use>
<ns:Location>home</ns:Location>
<ns:InternetEmailAddress>james.morgan@onecotesting.in</ns:InternetEmailAddress>
</ns:ContactMethod>
</ns:PersonalData>
</ns:CandidateProfile>
<ns:Resume>
<ns:NonXMLResume>
<ns:TextResume>test</ns:TextResume>
<ns:SupportingMaterials>
<ns:AttachmentReference>test</ns:AttachmentReference>
<ns:Description>CoverLetter</ns:Description>
</ns:SupportingMaterials>
</ns:NonXMLResume>
</ns:Resume>
<ns:UserArea>
<CustomFields>
<Field type="Candidate" name="Test Cand">One</Field>
<Field type="Candidate" name="Test Cand 2">1348684200000</Field>
<Field type="Candidate" name="TestingOne">w</Field>
<Field type="Candidate" name="Job G131">35643</Field>
<Field type="Candidate" name="Initial Submission Date">3456345</Field>
<Field type="Candidate" name="Email address">anu@test.com</Field>
<Field type="Candidate" name="Candidate status">Experianced</Field>
<Field type="Candidate" name="CTC">12121212</Field>
</CustomFields>
</ns:UserArea>
</ns:Candidate>
<ns:Candidate xmlns:ns="http://ns.hr-xml.org/2007-04-15">
<ns:CandidateRecordInfo>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="applicationId">prMKUfwB</ns:IdValue>
</ns:Id>
<ns:Status>Approved</ns:Status>
</ns:CandidateRecordInfo>
<ns:RelatedPositionPostings>
<ns:PositionPosting>
<ns:Id idOwner="Jobvite">
<ns:IdValue name="jobId">o1fiVfwd</ns:IdValue>
</ns:Id>
<ns:Title>bug1310w/Agency</ns:Title>
</ns:PositionPosting>
</ns:RelatedPositionPostings>

CONFIDENTIAL - Jobvite Data Services

10


<ns:CandidateSupplier>
<ns:SupplierId idOwner="Jobvite">
<ns:IdValue name="sourcedBy">snV9Vfw6</ns:IdValue>
</ns:SupplierId>
<ns:EntityName />
<ns:SourceType>
<ns:NonStandardValue>Career Site</ns:NonStandardValue>
</ns:SourceType>
</ns:CandidateSupplier>
<ns:CandidateProfile>
<ns:PersonalData>
<ns:PersonId idOwner="Jobvite">
<ns:IdValue name="candidateId">eoCiGfwI</ns:IdValue>
</ns:PersonId>
<ns:PersonName>
<ns:GivenName>TestAji3443edd</ns:GivenName>
<ns:FamilyName>TestAji3443edd</ns:FamilyName>
</ns:PersonName>
<ns:ContactMethod>
<ns:Use>personal</ns:Use>
<ns:Location>home</ns:Location>
<ns:InternetEmailAddress>TestAji3443edd@test.com</ns:InternetEmailAddress>
</ns:ContactMethod>
</ns:PersonalData>
</ns:CandidateProfile>
<ns:Resume>
<ns:NonXMLResume>
<ns:TextResume>dfadf sdaf asd fadsf asdfasdfadf ads fasdf</ns:TextResume>
</ns:NonXMLResume>
</ns:Resume>
<ns:UserArea>
<CustomFields>
<Field type="Candidate" name="Candidate status">Experianced</Field>
<Field type="Candidate" name="CTC">1111</Field>
</CustomFields>
</ns:UserArea>
</ns:Candidate>
</Candidates>
</Results>

Errors:
<?xml version="1.0" encoding="UTF-8"?>
<Results xmlns="http://api.jobvite.com/action/api/v1" action="getNewHires" version="1.0">
<Errors>
<Error code="100">No candidates or new hires found for the given query.</Error>
</Errors>
</Results>

CONFIDENTIAL - Jobvite Data Services

11

Employee API
This service is used to keep your employee roster in Jobvite up to date. This API supports both xml
and JSON formats as shown below. This operation is not incremental. If there are any employee
information missing in subsequent feeds, that employee information is removed from the system.
Via HTTP POST
!Production: https://api.jobvite.com/v1/employee
Staging: https://api-stg.jobvite.com/v1/employee
!Note: This is a scheduled task that runs nightly and an email confirmation will be received upon
completion after 24 hours.
!Data and Parameters

Required fields are first name <FirstName>, last name <LastName> and email address
<Name>
Organizational data. You may have a field called Reports To which contains the email
address of each !employees immediate manager. You can put any number of
organizational fields in the spreadsheet that we can then use for approval chains or
reporting. For instance, you could import the HR Business Partner for each employee.
If you import a field called Role, we will overwrite all employees existing roles in Jobvite. If
you do not include that field, we will preserve whatever roles your employees currently
have.
o If leveraging role mapping, employees must be mapped to one of the following
Jobvite roles:
Recruiter
Administrator
SuperUser
HR
Scheduler
HiringManager
Research
JobApprover
Employee (default if no role is provided for that specific employee)
Include more information to help you organize groups of employees when you send
Jobvites. Department and location are examples but you can put in whatever groups you
like. After you sync, go to Admin/Employees and select the fields youd like to use.
If you need to add an employee to Jobvite that is not part of the Employee Sync file, you

CONFIDENTIAL - Jobvite Data Services

12

can file a support ticket (support.jobvite.com) to add he/she to the Exclusions List. Agency
users (not being employees) do not need to be added to this list, as they are automatically
excluded from the sync.
If you use employee ID, we will use that as the identifier for the employee, otherwise we use
the employees email address.
You can find your companyid by going to Admin/Profile and looking at the URL under your
career site. The c=XXX at the end will show your ID.
ImporterEmail is the email address of the person who is recorded as the one who
added/update/deleted/invited the employees. This has to be the email address of someone
who has accepted their invitation into Jobvite.
ReportEmail is the email address of the person who will receive the reports after each sync.
DoNotSyncOnWarnings. If you set this to false, we will complete your sync whether or not
there are !warnings. You will receive a report showing what your warnings are so you know
what information was !not uploaded. Please note we never sync if there are errors.
OverwriteEmployeeNamesAndEmail. This is the same functionality as the checkbox in step
1 of the !manual employee sync. In order to use this, please first enable this in
Admin/Profile: Prevent Self Service Name or Email Change
DoNotRestoreDeleted: Previously deleted/removed employees will not be stored in this
import.
IgnoreExcludes: No removals or additions to those that are excluded
DoNotPerformEmployeeUpdates: No updates to existing employees

Please reference the Best Practices: Calling the API bullet in the Executive Summary for more
information on how frequently to call the Jobvite API.
JSON format: !
{
"CompanyId": "qoV9Vfw7",
"ImporterEmail": "hr@oracle.xxx",
"ReportEmail": "hr@oracle.xxx",
"DoNotSyncOnWarnings": false,
"OverwriteEmployeeNamesAndEmail": false,
"Employees": [{
"FirstName": "Mary995",
"LastName": "Doe",
"Name": "Mary995.Doe@JDInc.us",
"DepartmentName": "",
"LocationName": "Burlingame",
"RegionName": "",
"SubsidiaryName": "",
"Role": "Administrator",
"Title": "Architect",
"EmployeeId": "",
"Reports To": Mose995.Doe@JDInc.us,
"Address": "Mehboob Nagar",
"Address2": "",
"City": "Latur",
"State": "MH",

CONFIDENTIAL - Jobvite Data Services

13


"PostalCode": "413512",
"Country": "India",
"HomePhone": "023995252111",
"WorkPhone": "0999581995492",
"Mobile": "",
"CustomFields": [{
"Key": "VP",
"Value": "joe@JDInc.us"
}, {
"Key": "Approver 1",
"Value": "Mose995.Doe@JDInc.us"
}]
},
{
"FirstName": "Mose995",
"LastName": "Doe",
"Name": "Mose995.Doe@JDInc.us",
"LocationName": "Burlingame"
}, {
"FirstName": "Mane995",
"LastName": "Doe",
"Name": "Mane995.Doe@JDInc.us",
"LocationName": "Burlingame"
}
]
}
XML format: !
<?xml version="1.0"?>!<SyncData xmlns:i="http://www.w3.org/2001/XMLSchema-instancetest">
<CompanyId>qoV9Vfw7</CompanyId>
<ImporterEmail>hr@oracle.xxx</ImporterEmail> <ReportEmail>hr@oracle.xxx</ReportEmail>
<DoNotSyncOnWarnings>false</DoNotSyncOnWarnings>
<OverwriteEmployeeNamesAndEmail>false</OverwriteEmployeeNamesAndEmail>
<Employees>
<Employee> <FirstName>Mary996</FirstName> <LastName>Doe</LastName>
<Name>Mary996.Doe@JDInc.us</Name> <DepartmentName></DepartmentName>
<LocationName>Burlingame</LocationName> <RegionName></RegionName>
<SubsidiaryName></SubsidiaryName> <Role>Administrator</Role>
<Title>Architect</Title> <EmployeeId></EmployeeId>
<ReportsTo>Mary999.Doe@JDInc.us</ReportsTo>
<Address>Mehboob Nagar</Address>
<Address2></Address2>!<City>Latur</City>!<State>MH</State>
<PostalCode>413512</PostalCode> <Country>India</Country>
<HomePhone>023996252111</HomePhone>
<WorkPhone>0999681996492</WorkPhone> <Mobile></Mobile>!<CustomFields>
<CustomField>!<Key>VP</Key> <Value>joe@JDInc.us</Value>
</CustomField> <CustomField>

CONFIDENTIAL - Jobvite Data Services

14


<Key>VP</Key>
<Value>Mose996.Doe@JDInc.us</Value> </CustomField>
</CustomFields> </Employee> <Employee>
<FirstName>Mose996</FirstName> <LastName>Doe</LastName>
<Name>Mose996.Doe@JDInc.us</Name> <LocationName>Burlingame</LocationName>
</Employee> <Employee>
<FirstName>Mane996</FirstName> <LastName>Doe</LastName>
<Name>Mane996.Doe@JDInc.us</Name> <LocationName>Burlingame</LocationName>
</Employee> </Employees>
</SyncData>

Sample Java Client Code


public static void main(final String[] args) throws Exception
{
String xml =
"<?xml version=\"1.0\"?>"+
"<SyncData xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance-test\">"+
"<CompanyId>qlb9Vfwk</CompanyId>"+
"<ImporterEmail>carmab@vulcan.com</ImporterEmail>"+
"<ReportEmail>carmab@vulcan.com</ReportEmail>"+
"<DoNotSyncOnWarnings>false</DoNotSyncOnWarnings>"+
"<OverwriteEmployeeNamesAndEmail>false</OverwriteEmployeeNamesAndEmail>"+
"<Employees>"+
"<Employee>"+
"<FirstName>Karthik</FirstName>"+
"<LastName>Kyle</LastName>"+
"<Name>Karthik@testsite.com</Name>"+
"</Employee>"+
"</Employees>"+
"</SyncData>";
String url = "http://api-stg.jobvite.com/v1/employee";
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
PostMethod method = new PostMethod(url);
method.addParameter("xml", xml);
method.addParameter("api", "API KEY");
method.addParameter("sc", "API SECRET KEY");
method.addParameter("companyId","COMPANY IDk");
client.executeMethod(method);
System.out.println(method.getResponseBodyAsString());
}

CONFIDENTIAL - Jobvite Data Services

15

Requisition API
This service can be used to create new requisitions in Jobvite, or synchronize/update requisitions
in Jobvite from your external system.
Before starting development, please file a support ticket with the Jobvite Customer Success team
asking that the Jobs API be enabled for your company. This can be done at the same time the
customer requests their company specific API Key, API Secret, and Company ID.
Each time you update a requisitions, we will overwrite any fields that are different unless you
manually update the requisition in Jobvite. In that case, we will stop overwriting the information. We
will close the requisition when its no longer in your feed. Manually updating requisitions includes
all fields within the requisition form.
Changing the Status of the Requisition will not affect the API post updates.
All manual changes must be saved in order for changes to stop being overwritten.
Please reference the Best Practices: Calling the API bullet in the Executive Summary for more
information on how frequently to call the Jobvite API.
This API supports both xml and JSON formats. The details are as follows.
Via HTTP POST
Production: https://api.jobvite.com/v1/job
Staging: https://api-stg.jobvite.com/v1/job
XML format:
<jobs>
<companyName>Jobvite</companyName>
<siteUrl />
<recruiterEmail>abc@jobvite.com</recruiterEmail>
<closeMissingReqs>true</closeMissingReqs>
<job>
<requiredFields>
<applyLink/>
<briefDescription/>
<description/>
<isPrivate>true</isPrivate>
<internalOnly>true</internalOnly>
<category/>

CONFIDENTIAL - Jobvite Data Services

16


<jobId/>
<jobLink/>
<locationName/>
<locationCity/>
<locationState/>
<locationCountry/>
<recruiterEmail/>
<evaluationFormName>Evaluation Form Name</evaluationFormName>
<preInterviewFormName>Candidate Form Name</preInterviewFormName>
<title/>
<jobState/>
<eeoCategory/>
<positionCount/>
<locationPostalCode/>
<departmentName/>
<agencyAccessEmail>jo@agency.com;jack@agency.com</agencyAccessEmail>
<hiringManagerEmail/>
<creatorEmail/>
<jobType/>
</requiredFields>
<customFields>
<openings>23</openings>
<!-- For Reqs that can have multiple openings against it -->
</customFields>
</job>
</jobs>
JSON format:
{
"companyName": Jobvite,
"siteUrl": "http://url.to/job/list/page/",
"recruiterEmail": "",
"closeMissingReqs": true,
"requisitions": [{
"applyLink": "",
"briefDescription": "",
"description": "",
"category": "",
"jobId": "",
"jobLink": "",
preInterviewFormName:,
"locationName": "",
"locationCity": "",
"locationState": "",
"locationCountry": "",
evaluationFormName:,
"recruiterEmail": "",
agencyAccessEmail:,
"title": "",

CONFIDENTIAL - Jobvite Data Services

17


"jobState": "",
"eeoCategory": "",
"positionCount": "",
"locationPostalCode": "",
"departmentName": "",
"hiringManagerEmail": "",
"creatorEmail": "",
"jobType": "",
"customFields": {
"openings": "",
"CustomField1": "custom field 1 value",
"customfields2": "custom field 2 value"
}
}, ],
}

Sample Java Client Code


public static void main(final String[] args) {
String xml = "<jobs>" +
"<closeMissingReqs>true</closeMissingReqs>" +
"<companyName>Oneco</companyName>" +
"<siteUrl>www.jobvite.com</siteUrl>" +
"<recruiterEmail>achigullapally@jobvite.com</recruiterEmail>" +
"<job>" +
"<requiredFields><applyLink>link</applyLink>" +
"<briefDescription></briefDescription>" +
"<description>this is a job</description>" +
"<category>Domestic</category>" +
"<jobId>jobid 20</jobId>" +
"<jobLink></jobLink>" +
"<locationName>Redmond, WA</locationName>" +
"<locationCity>Redmond</locationCity>" +
"<locationState>WA</locationState>" +
"<locationCountry>United States</locationCountry>" +
"<jobType></jobType>" +
"<title>Technical Writer</title>" +
"</requiredFields>" +
"<customFields></customFields>" +
"</job>" +
"</jobs>";
String url = "https://api.jobvite.com/v1/job";
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
PostMethod method = new PostMethod(url);
method.addParameter("xml", xml);
method.addParameter("api", "your_company_key");
method.addParameter("sc", "your_secret");

CONFIDENTIAL - Jobvite Data Services

18


client.executeMethod(method);
System.out.println(method.getResponseBodyAsString(

Job Feed
We have two feeds we support, an XML feed with a set of standard fields and a more flexible
JSON feed where you can filter your jobs. The latter supports both internal and external jobs.
XML Feed
Please contact Customer Support for the XML feed URL.
You can find your company ID by looking in Admin/Profile and looking under the Career Site
section. The company ID is the numbers and letters after the c= in the url. The standard fields
included are:
<id>!
<title>
<requisitionid>
<category>
<jobtype>
<location>!
<date>
<detail-url>
<apply-url>
<description>
<briefdescription>
If you want to pick up more fields than just the standard, youll need to get a key and secret from
us. Youll also need to go to Admin/Custom Fields and check off any fields you want to include in
your XML feed.

CONFIDENTIAL - Jobvite Data Services

19

If you do not want the data encrypted, use cf=a in the url:
http://hire.jobvite.com/CompanyJobs/Xml.aspx?c= YOUR_COMPANY_ID
&cf=a&key=YOUR_KEY&sc=YOUR_SECRET
If you want the data encrypted, use cf=e in the url:
http://hire.jobvite.com/CompanyJobs/Xml.aspx?c= YOUR_COMPANY_ID
&cf=e&key=YOUR_KEY&sc=YOUR_SECRET

JSON Feed
This feed supports these features:

Pagination: user can provide the start and end count to view the jobs.

Filter: user can use a combination of criteria to filter the jobs.

Jobs by category!

Jobs by department

Jobs by location!

Jobs by region!

Jobs by type

Support to view Internal and External jobs.

CONFIDENTIAL - Jobvite Data Services

20


Via HTTP GET
Production: https://api.jobvite.com/v1/jobFeed
Staging: https://api-stg.jobvite.com/v1/jobFeed
API Query Parameters

API key: we will provide


Secret key: we will provide
CompanyId: You can find your company ID by looking in Admin/Profile and looking under
the Career Site !section. The company ID is the numbers and letters after the c= in the
URL. !Pagination Options
Start: denotes the starting index. Default start index: 1
Count: Denotes the number of jobs from the starting index.
o Default count: 100; !Posting Limit per call: 1000
o If more requisitions are sent via the feed than the listed count, the following error will
be received:

Filter Options
Filter

Description

type

Job type, configured in Admin

availableTo

Publishing settings for your


jobs on your career site or
only available internally.
External by default.
The categories used on your
career site, configured in
Admin
City, state, Country
Region, configured in Admin

category

location
region

Sample Values (configured in


your instance)
Contractor, Full-time, Intern,
Part-time
External, Internal

Accounting, Engineering,
Human Resources
Burlingame, CA, USA
Europe, Asia

Sample Request

CONFIDENTIAL - Jobvite Data Services

21


https://api.jobvite.com/v1/jobFeed?companyId=dah4p0sl&api=<api_key>&sc=<secret>&start=10
&count=100&t ype=full-time&availableTo=internal&category=Finance&department=Human
Resource&location=Burlingame, CA, USA&region=Europe
Sample Response
{
"total": 2,
"jobs": [{
"hiringManager": "manzoor symphony",
"preInterviewForm": "Test Form",
"location": "Klaus, United States",
"jobState": "Open",
"salaryHigh": "0",
"jobSource": "0",
"endDate": "12/31/9999",
"primaryHiringManagerId": "",
"city": "Klaus",
"approvalRequired": "0",
"salaryLow": "0",
"recruiterAccess": "0",
"description": "<p>Position Responsibilities:<br />Enter invoices in QAD<br />Obtain
appropriate invoice payment approvals<br />Resolve any AP issues (receiving
quantity/price discrepancy, etc.)<br />Organize and file all AP documents (invoices,
checks, etc.)<br />1099 filing<br />Maintain AP accrual account<br />Perform all other
duties as assigned<br />Minimum Requirements:<br />Accounting/Finance
background<br />2 years of AP experience<br />Experience in accounting software and
proficient in the use of EXCEL<br />Ability to analyze the nature of an invoice for proper
coding, spot errors, and inconsistencies<br />&nbsp;<\/p>",
"agencyHiringManager": "",
"userName": "",
"notified": "0",
"eEOCategory": "Professionals",
"doNotCall": "false",
"openings": "0",
"companyName": "Oneco",
"country": "USA",
"category": "Accounting",
"parsed": "1",
"createdBy": "1215684",
"carrerSiteScrapeUrl": "",
"clientsDepartmentId": "",
"bonus": "",
"clientsRegionId": "",
"recruiter": "manzoor ahmed",
"applyUrl": "https://hirestg.jobvite.com//CompanyJobs/Apply.aspx?c=qQX9VfwB&j=oVCQVfw2",
"availableTo": "External",
"region": "BABA",

CONFIDENTIAL - Jobvite Data Services

22


"startDate": "12/31/9999",
"jobType": "Full-Time",
"department": "Engineering",
"state": "",
"date": "12/21/2012",
"subsidiaryName": "",
"private": "false",
"holdTimeSpan": "0",
"id": "oVCQVfw2",
"referalBonus": "0",
"title": "ABC Accounts Payable Clerk - No Eval",
"briefDescription": "<p>Position Responsibilities:<br />Enter invoices in QAD<br />Obtain
appropriate invoice payment approvals<br />Resolve any AP issues (receiving
quantity/price discrepancy, etc.)<br />Organize and file all AP documents (invoices,
checks, etc.)<br />1099 filing<\/p>",
"filledOn2": "",
"approveDate": "12/21/2012",
"notification": "true",
"workFlowTitle": "General",
"careerSite": "true",
"showSalary": "0",
"clientsLocationId": "",
"detailUrl": "https://hirestg.jobvite.com//CompanyJobs/Job.aspx?c=qQX9VfwB&j=oVCQVfw2",
"zip": "0",
"jobLinkUrl": "",
"contactInformation": "",
"customFields": {
"1_SP_DP": "",
"Approval Chain": "manzoor ahmed\nsbaf0fwk",
"HRReqsthis": "d",
"Job Code": "",
"SP_DP": ""
},
"areaCode": "",
"closeDate": "12/31/9999",
"approval": "<i>If you reply to this message, it will go to (name).<\/i>\n\nDear
<NAME*>,\r\n\r\nPlease review the attached job requisition information and either approve
or reject the requisition.\r\n\r\nhttps://hire.jobvite.com/uniqueid\r\n\r\nThank
you.\r\n\r\nmanzoor ahmed",
"jobType2": "",
"filledOn": "",
"putOnHoldDate": "",
"agencyCompany": "",
"interviewEvaluation": "",
"filledBy": "0",
"sentdate": "07/25/2011",
"companyId": "qQX9VfwB",
"needsRequired": "0",

CONFIDENTIAL - Jobvite Data Services

23


"requisitionId": "",
"eQuest": ""
}, {
"hiringManager": "manzoor symphony",
"preInterviewForm": "Test Form",
"location": "Klaus, United States",
"jobState": "Open",
"salaryHigh": "0",
"jobSource": "0",
"endDate": "",
"primaryHiringManagerId": "",
"city": "Klaus",
"approvalRequired": "0",
"salaryLow": "0",
"recruiterAccess": "0",
"description": "<p>Position Responsibilities:<br />Enter invoices in QAD<br />Obtain
appropriate invoice payment approvals<br />Resolve any AP issues (receiving
quantity/price discrepancy, etc.)<br />Organize and file all AP documents (invoices,
checks, etc.)<br />1099 filing<br />Maintain AP accrual account<br />Perform all other
duties as assigned<br />Minimum Requirements:<br />Accounting/Finance
background<br />2 years of AP experience<br />Experience in accounting software and
proficient in the use of EXCEL<br />Ability to analyze the nature of an invoice for proper
coding, spot errors, and inconsistencies<br />&nbsp;<\/p>",
"agencyHiringManager": "",
"userName": "",
"notified": "0",
"eEOCategory": "Professionals",
"doNotCall": "false",
"openings": "0",
"companyName": "Oneco - QA",
"country": "USA",
"category": "Accounting",
"parsed": "0",
"createdBy": "1215684",
"carrerSiteScrapeUrl": "",
"clientsDepartmentId": "",
"bonus": "",
"clientsRegionId": "",
"recruiter": "manzoor ahmed",
"applyUrl": "https://hirestg.jobvite.com//CompanyJobs/Apply.aspx?c=qQX9VfwB&j=oNDfXfwm",
"availableTo": "External",
"region": "BABA",
"startDate": "",
"jobType": "Full-Time",
"department": "Engineering",
"state": "",
"date": "04/25/2013",
"subsidiaryName": "",
"private": "false",

CONFIDENTIAL - Jobvite Data Services

24


"holdTimeSpan": "0",
"id": "oNDfXfwm",
"referalBonus": "0",
"title": "Accounts - Payable Associate",
"briefDescription": "<p>Position Responsibilities: Enter invoices in QAD Obtain
appropriate invoice payment approvals Resolve any AP issues (receiving quantity/price
discrepancy, etc.) Organize and file all AP documents (invoices, checks, etc.) 1099
filing<\/p>",
"filledOn2": "",
"approveDate": "04/25/2013",
"notification": "true",
"workFlowTitle": "General",
"careerSite": "true",
"showSalary": "0",
"clientsLocationId": "",
"detailUrl": "https://hirestg.jobvite.com//CompanyJobs/Job.aspx?c=qQX9VfwB&j=oNDfXfwm",
"zip": "0",
"jobLinkUrl": "",
"contactInformation": "",
"customFields": {
"TestCand": "123",
"New 3350": "3456",
"Salary Range": "50,000 \u2013 60,000",
"sudeep test": "manzoor ahmed\nsbaf0fwk",
"SP_Txt": "33",
"1_SP_DP": "BRAZIL",
"1_SP_Txt": "Professional Services",
"Approval Chain": "manzoor ahmed\nsbaf0fwk",
"Grade": "8",
"HRReqsthis": "d",
"Salary": "123",
"SHL Package Id": "7C61EF27-67A8-4FE2-B5DD-C9E832CCFA71",
"Test 3686": "No\nMay Be",
"Job Code": "123",
"SP_DP": "Adam Hayder"
},
"areaCode": "",
"closeDate": "12/30/9999",
"approval": "<i>If you reply to this message, it will go to manzoor ahmed.<\/i>\n\nDear
<NAME*>,\r\n\r\nPlease review the attached job requisition information and either approve
or reject the requisition.\r\n\r\nhttps://hire.jobvite.com/uniqueid\r\n\r\nThank
you.\r\n\r\nmanzoor ahmed",
"jobType2": "",
"filledOn": "",
"putOnHoldDate": "",
"agencyCompany": "",
"interviewEvaluation": "Default",
"filledBy": "0",
"sentdate": "03/13/2013",

CONFIDENTIAL - Jobvite Data Services

25


"companyId": "qQX9VfwB",
"needsRequired": "0",
"requisitionId": "577",
"eQuest": ""
}],
"filterCriteria": {
"region": "",
"availableTo": "External",
"category": "Accounting",
"count": 2,
"location": "",
"start": 1,
"department": "Engineering",
"type": ""
}
}

Contact Import API



Use the Contact Import API to allow authenticated Jobvite users to import talent profiles as
Contact records into their Jobvite Engage CRM. The Contact API import and response format is in
JSON (JavaScript Object Notation, not available in other formats). JSON is a simple machinereadable data-interchange format. For more information about JSON, visit json.org. This API is only
available to Jobvite Engage Customers.

Staging API End Points:


http://api-stg.jobvite.com/v1/contacts
https://api-stg.jobvite.com/v1/contacts

CONFIDENTIAL - Jobvite Data Services

26


Production API End Points:
http://api.jobvite.com/v1/contacts
https://api.jobvite.com/v1/contacts

API Required Parameters:


api: API Key !
sc: API Secret

Example API Invocation: !


http://api.jobvite.com/v1/contacts?api=<apikey>&sc=<secret>

Request JSON Body Fields (*required):

PARAMETER
userEm ail*
Im portDuplicates
notes
tags
Contacts*

DESCRIPTION
The email address used to log into Jobvite.
Allows the logged in user to import contacts that are already in their Jobvite
CRM.
Allows logged in user to add a note across all imported contacts.
Allows logged in user to add tags across all imported profiles [as a
JSONArray].
List of contacts to import [as a JSONArray].

CONFIDENTIAL - Jobvite Data Services

27


Request JSON Individual Contact Parameters:
PARAMETER
firstName
middleName
lastName
company
jobTitle
tags
notes
resume
coverLetter
sourceType
sourceName
emails
homePhone
workPhone
cellPhone
address
address2
city
state
zip
country
urls
facebook
linkedin
twitter
assigneTo
customFields

DESCRIPTION
First name of the contact.
Middle name of the contact.
Last name of the contact being imported.
Name of current employer for the contact.
Job title at current company for the contact.
Tags associated with the contact [as a JSONArray].
Notes associated with the contact [as a JSONArray].
Text resume for the contact.
Text cover letter for the contact.
Source of the contact.
Source details of the contact.
Email addresses for the contact [as a JSONArray].
Home phone number for the contact.
Work phone number for the contact.
Mobile phone number for the contact.
Street address for the contact.
Street address for the contact.
City address for the contact.
State address for the contact.
Zip code address for the contact.
Country address for the contact.
Web URLs associated with the contact [as a JSONArray].
Facebook profile URL for the contact.
LinkedIn profile URL for the contact.
Twitter profile URL for the contact.
Employee this contact is assigned to.
Custom data associated with the contact [as a JSONArray].

Custom Array Json input:


Name:
Value:
Curl Example:
curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST -!d '<importJson>'
http://localhost:8080/backend/action/api/v1/contacts?api=<apikey>&s c=<secret>
Where json:body could be:
{!
userEmail: 'employee@company.xxx', //required
importDuplicates: true, // defaults to false!
notes: "blahblahblah",!
ags: ["sons","vkags",""],!

CONFIDENTIAL - Jobvite Data Services

28


contacts: [{ //required
firstName: "Jane",!
middleName: "X.",!
lastName: "Do",!
company: "Jobvite",!
jobTitle: "Engineer",!
ags: ["Programmer","Java"],!
notes: ["Looking for a career Change","specializes in cloud technologies"],
resume: ,
coverLetter: ,!
sourceType: "Web Search",!
sourceName: "LinkedIn",!
emails: ["jane@do.com","jane.do@gmail.com"],
homePhone: ,!
workPhone: ,!
cellPhone: ,!
address: ,!
address2: ,!
city: ,!
state: ,!
zip: ,!
country: ,!
urls: ["www.google.com","www.yahoo.com"],
facebook: ,!
linkedin: ,!
twitter: ,!
assignedTo: 'employee@company.xxx',
customFields: [{name: 'blah', value: 'blah'},{name:'blah2',value: 'blah2'} ,
{ ...}]!
}

Appendices
A. http://www.hr-xml.org
B. Error codes:
101 API key & secret could not be validated.
102 format is required.
*
103 Unable to parse datestart=
*
104 Unable to parse dateend=
105 An error occurred retrieving candidates.
106 Unknown format requested.
107 Error preparing candidate information.
108 Unrecognized candidate state (parameter wflowstate) in the request.
updateCandidates errors:
201 Cannot load the company from the json.
202 The data in the request is not a JSON array.

CONFIDENTIAL - Jobvite Data Services

29


203
204
205
206
207
208
*

applicationId item is missing from the JSON.


Cannot find the application from the applicationId.
Cannot find the candidate.
Candidate is not a candidate for this company.
Cannot determine a workflow state from the wflowstate item.
Error updating the candidates record in the database.

Incorrect format value.

CONFIDENTIAL - Jobvite Data Services

30

You might also like