Harver Public API (1.37.0)

Download OpenAPI specification:Download

Public API of the Harver Platform available only for the Customers of Harver.

Quick Start

How to access our environments

We provide the API access keys and Account IDs for each standard environment. We suggest using our TEST (harver-test.com) environment during the development phase.

Available Harver environments for clients:

  • Test: https://api.harver-test.com
  • Production: https://api.harver.com

Authentication

Harver Public API uses Oauth2 authentication, once you obtained an access token (valid for 1 hour) you can use it in the Authentication Header as a “Bearer” token for all following requests.

Endpoint:
POST https://api.harver.com/oauth/token

Note:
in TEST env, POST https://api.harver-test.com/oauth/token

Content-Type:
application/x-www-form-urlencoded

Body:

  • grant_type → client_credentials
  • client_id → Provided by Harver
  • client_secret → Provided by Harver

After a successful request, the response will contain the “access-token“.

Example

curl --location --request POST 'https://api.harver-test.com/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id={your_client_id}' \
--data-urlencode 'client_secret={your_client_secret}'

detailed documentation

Rate - Limiting

Harver API is guarded by rate-limiting. When the allocated rate-limit is exceeded, the API returns HTTP status code 429. (Too many requests).

In the Production and Testing environments, the default limits will be 450 and 300 requests per minute, respectively. There are two new rate-limiting headers added to the responses as bellow.

  • Ratelimit-Limit – The request limit for the time period
  • Ratelimit-Reset - The time remaining in the current window, specified in seconds

Correlation ID

The responses now include a new header called X-Correlation-Id. When submitting a support request, please include this ID.

How to create a candidate with an application

Submit candidates to Harver in order to invite them to complete the Harver Journey.

Harver can invite the candidate by sending an email to the candidate with a magic link to start the Harver journey

You can also redirect candidates directly to the magic link from the endpoint’s response. The candidate is then immediately logged into Harver.

The attributes allow you to pass your custom list of key-value pairs. You can use this to place for example your IDs like “candidate_id“, “requisition_id”, “source” etc to help you link and sync Harver to your system.

Endpoint:
POST https://api.harver.com/api/v1.0/vacancies/:vacancyId/applications

Header:
Authorization: Bearer {access_token}

Body:

{
  "data": {
    "type": "applications",
    "attributes": {
      "key1": "value1", //Optional key-value pairs
      "key2": "value2", //You can retrieve them with the "ats" include
      "key3": "value3", //with the GET Application request
    },
    "relationships": {
      "candidate": {
        "data": {
          "type": "candidates",
          "attributes": {
            "emailAddress": "candidate@gmail.com", //Mandatory
            "firstName": "CandidateFirstName",  //Mandatory
            "lastName": "CandidateLastName" //Mandatory
          }
        }
      }
    }
  }
}

Response: The response includes the unique Application ID and a Magic-link for the Candidate. payload here

{
    "data": {
        "magicLink": "https://my.harver.com/app/landing/{harver_vacancy_id}/magic-link/{unique_code}",
        "applicationId": "{harver_application_id}"
    }
}

Repeating this request with the same email address will return the same Application ID with renewed Magic-Link.

If your account is set to “Magic-link” based authentication for candidates, you can send this link to your candidates or use it to redirect your candidate to Harver. The Magic-link is valid for 1 hour. A ”Magic Link” is kind of an authenticated URL, which you send to the candidate. This helps them to log in to Harver with just one click of the link without entering username & password. It removes all the friction points that might cause the user to drop out of the application process.

detailed documentation

Return_url parameter

A special attribute can be used when creating a candidate: return_url. That url will be use to redirect the candidate back to, when completed the Harver assessment. This way it is possible to add dynamic attributes to that url.

Example:

{
  "data": {
    "type": "applications",
    "attributes": {
      "return_url": "https:/my-ats.com/welcomeback?candidate_id=12345"
    },
  ...
}

Get all information of an application

To retrieve an application's relationship data (such as a PDF report, scores etc.), you can make a basic GET applications/{applicationId}, while also providing the include parameter. This include parameter represents a list of comma-separated includes.

Endpoint:
GET https://api.harver.com/api/v1.0/applications/{applicationId}

Header:
Authorization: Bearer {access_token}

Basic response

This part is always available, the rest depends on included modules

"type": "applications",
"id": "{harver_application_id}",
"attributes": {
    "appliedAt": 1630335533,    // timestamp registration
    "completedAt": 1630336749,  // timestamp completed (when completed)
    "status": "new",            // status "new" means completed Harver assessment, and "new" for recruitement
    "progress": {               // Number of modules (incl video & content pages)
        "all": 19,
        "completed": 19
    },
    "matchingScore": 69,        // Overall Matching Score
    "language": "ENG",
    "matchingProfile": {        // Filled when Matching Profile are used in the account
        "bracketId": "great",
        "label": "Green"
    }
},
"relationships": {
    "candidate": {
        "data": {
            "type": "candidates",
            "id": "{harver_application_id}",
            "email": "{email}",
            "attributes": {
                "firstName": "{firstname}",
                "lastName": "{lastname}",
                "email": "{email}"
            }
        }
    },

Get Application ‘include’ modules

  • personal-info & additional-info → Candidate personal info and additional questions

  • ats → ATS Parameters. These can be your id’s, source parameters, eg like a candidate_id, reqId, utm_source

    -- When the candidate is registered using the API: these are the ones that are sent as key-value attributes in creating the candidates -- When the candidate registers directly in Harver: these are the url parameters

Example:

"included": [
    {
        "type": "ats-parameters",
        "attributes": {
            "candidate_id": "{ats_candidate_id}",
            "job_code": "{ats_job_id}",
            "request_id": "{ats_request_id}",
            "return_url": "https://...",   // url to return the candidate to when completed Harver
        }
    }
]
  • report → A link to:
    • Harver PDF report. Generated link that will expire in 15 minutes.
    • Fact Sheet (1 page report). Generated link that will expire in 15 minutes.
    • Candidate Detail Page. You’ll need to have a Harver account, or SSO enabled, to access the Candidate Detail Page. Will not expire.
  • matching-results → detailed scores on the modules
  • matching-indicators → detailed info on matching indicators (KMI’s) when configured in the account

Example url: https://api.harver.com/api/v1.0/applications/{application_id}?include=report,cover-letter,resume,matching-results,personal-info,additional-info,ats,matching-indicators

Scoring & report information

  • Overall Matching score:
    • Module: always available
    • Field: matchingScore
    • This is a numerical 0 - 100 score
  • Score label or Band
    • Module: always available if Matching Profiles are configured in Harver Platform.
    • Field: "matchingProfile"label.
    • This is a label or band that can be configured in the Harver Platform based on the score. Typical examples: “Great Fit” / “Good Fit” / “Bad Fit”, “Passed” / “Failed”, “Red” / “Green”
  • Module scores
    • Module: matching-indicators
    • There is a "Included""type": "matching-indicators" for each matching indicator
  • PDF Report, Factsheet and Candidate result page
    • Module: report
    • A direct link to the Candidate’s PDF report and Factsheet.
    • Note: these links are only available for 15 minutes after requested!
    • The link to the Candidate detail page is a link to Harver. For this an account at Harver is necessary or SSO needs to be enabled. This link does not expire.

detailed documentation

Get all candidates and their applications in a vacancy (using the filters)

To retrieve a list of the candidates and their applications in a vacancy.

Each candidate has a status. Main statuses:

  • in-progress: Registered, but hasn't completed the application process yet.
  • new: Application process completed. It is recommended Recommended to filter for this status)
  • hired: candidate is hired
  • rejected: candidate is rejected

Endpoint:
GET https://api.harver.com/api/v1.0/vacancies/{vacancyId}/candidates

Header:
Authorization: Bearer {access_token}

Useful filter params:

  • filter[status]=new
  • filter[status-updated-at][since]={epoch_timestamp}

You can combine params like this: ?filter[status]=new**&**filter[status-updated-at][since]=1582211393

After a successful request, the response body will contain the list of (new) Candidates in the Vacancy. Each candidate has an application listed in the “relationships”, this can be used to request the Application Results.

If you need to periodically query newly finished candidates, we suggest using the “[status-updated-at][since]” filter with the Epoch timestamp of the previous query.

List of possible filters:

  • filter[status]
  • filter[status-updated-at][since]
  • filter[status-updated-at][until]
  • filter[locations]
  • filter[region]
  • filter[external_location_id]
  • filter[job_function]
  • filter[skip_aggregration]

detailed documentation

Webhooks from Harver to an ATS

Webhooks allow you to build or set up integrations which subscribe to certain events in Harver. When one of those events is triggered, we’ll send an HTTP POST payload to the webhook’s configured endpoint. The Harver integrations team can configure the webhooks for you.

Available events:

  • ApplicationStarted - A candidate registered at Harver. (Candidate Status: in-progress)
  • PersonalInfoWasCreated - A candidate filled in the “Personal information” module. (Candidate Status: in-progress)
  • AdditionalInfoWasUpdated - A candidate filled in the “Additional information” module. (Candidate Status: in-progress)
  • CandidateStatusNew - A candidate completed the Harver Journey. (Candidate Status = new)

We support NoAuth and Basic Auth (username & password) authentication.

Use the Harver Application Id to get all the details of the application

detailed documentation

Definitions

  • Account - An Account is what holds all of the company specific information within the platform where users of the account can manage settings, Vacancies and Flows.
  • Vacancy - Vacancy represents an open position within an company. The Vacancy is where specific information is collected which includes the candidates who wish to apply to that position and their personal information. a Vacancy contains specific information regarding the position for example the location and hours per week the candidate will be expected to work. A vacancy always must have a flow connected to it.
  • Flow - A flow is set of assessments modules and content (videos, static texts), created by an Admin in the system. A Flows must be connected to one or multiplee Vacancies.
  • Modules or Flow modules - Modules are the separate components used to build a Flow. For instance form for the candidate fill in his/her personal information, a personality questionnaire, multitasking test, etc.
  • Matching score - The matching score indicates the extent to which the assessment results of a candidate fit the Vacancy requirements/benchmark. The matching score is calculated based on the combination of results of the different modules that are part of the Flow.
  • Candidate - A Candidate represents a person who applied to one or multiple Vacancies.
  • Application - A Candidate can apply to multiple Vacancies within an Account. Once a candidate applies to a Vacancy the Application is created.
  • Webhooks - Webhooks allow you to build or set up integrations which subscribe to events in Harver. When one of those events is triggered, we’ll send an HTTP POST payload to the webhook’s configured URL.

oauth

Start an authorized session

Content-Type should be set to application/x-www-form-urlencoded

Obtaining Tokens

To obtain API tokens for any of your client applications, perform a POST operation to the /oauth/token endpoint with a payload in the following format

Using client_credentials

This type of authorization is used when applications require access to access their own resources, and is not done on behalf of an user. For instance, an Applicant Tracking System checking whether there are new applicants that have completed their application.

Using an Access Token

Once you have retrieved an Access Token, it can be used until the token expires or is revoked. To use it, send this token in the Authorization header when making requests to protected resources.

Authorization: Bearer <token>

Example usage:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts' \
  -H 'Authorization: Bearer eyJhbGciOiJIXzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXIiOnsiaWQiOiI1OWVkZDZhNvU4YzNlNDI3MDZjOWY3NjgifX0sImlhdCI6MTUzMzEzNDk5Mn0.otr7V1XMzF78LrB3oLRKUvTCxLqYM1CqKKp7UFDcPK8'
Request Body schema: application/x-www-form-urlencoded

Client ID, Client Secret, Grant Type that should be sent in the request body

client_id
required
string

Your Client ID, as provided by Harver

client_secret
required
string

Your Client Secret, as provided by Harver

grant_type
required
string
Value: "client_credentials"

Must be set to client_credentials

Responses

Response samples

Content type
application/json
{
  • "user": {
    },
  • "userProfile": "string",
  • "accessToken": "string",
  • "accessTokenExpiresAt": "2019-08-24T14:15:22Z",
  • "client": {
    }
}

Validate auth token

Validating a Token

To validate a token, perform a POST operation to the /oauth/authenticate endpoint with authorization header Bearer <token>

Example usage:

curl -X POST \
  'https://api.harver.com/auth/authenticate' \
  -H 'Authorization: Bearer eyJhbGciOiJIXzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXIiOnsiaWQiOiI1OWVkZDZhNvU4YzNlNDI3MDZjOWY3NjgifX0sImlhdCI6MTUzMzEzNDk5Mn0.otr7V1XMzF78LrB3oLRKUvTCxLqYM1CqKKp7UFDcPK8'

Responses

Response samples

Content type
application/json
{
  • "statusCode": 0,
  • "status": 0,
  • "code": 0,
  • "message": "string",
  • "name": "string"
}

accounts

Returns all the available Accounts based on the access rights

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Returns all Candidates of an Account

To obtain the list of candidates in an Account, perform a GET operation to the /accounts/<account-id>/candidates endpoint.

Limiting results

Optionally, to limit the scope of the results, you can use the following query parameters:

  • filter[email]

Example query:

To fetch one candidate in account 5ab8845731e881343fa7458c with the email address testuser@harver.com, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/5ab8845731e881343fa7458c/candidates?filter[email]=testuser@harver.com' \
  -H 'Authorization: Bearer ...'

NOTE: If there are no candidates or a candidate is not found when filter by email is used, an empty data array will be returned.

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Returns all Applications of a Candidate in an Account Deprecated

path Parameters
accountId
required
string

ID of the Account to consider

candidateId
required
string

ID of the candidate to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Returns all Vacancies of an Account

To obtain the list of Vacancies available for an Account, perform a GET operation to the /accounts/<account-id>/vacancies endpoint. To get the content in a specific language (if available), specify the language in the request header Accept-Language. More info about Accept-Language and locales. Please note, that multiple languages preferences are not supported, content language will be defined by the first language on the list.
The language of the response content will be specified in the response header Content-Language. More info about Content-Language.

Limiting results

Optionally, to limit the scope of the results, you can use the following query parameters:

  • filter[status]
  • filter[locations]
  • filter[regions]
  • filter[external_location_id]
  • filter[skip_aggregation]

For filtering by locations, regions and external location ID, comma separated values can be used. Ex: ?filter[locations]={ID1},{ID2}

Example query:

To fetch all vacancies of account 5ab8845731e881343fa7458c that have vacancies in status draft, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/5ab8845731e881343fa7458c/vacancies?filter[status]=draft' \
  -H 'Accept-Language: en' \
  -H 'Authorization: Bearer ...'

To fetch all vacancies of account 5ab8845731e881343fa7458c that have vacancies in status draft, location ID 5c484fdece609b10529e1e3f and in language nl, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/5ab8845731e881343fa7458c/vacancies?filter[status]=draft&filter[locations]=5c484fdece609b10529e1e3f' \
  -H 'Accept-Language: nl' \
  -H 'Authorization: Bearer ...'

Increasing Performance

filter[skip_aggregation]=true will skip aggregating candidate count in a vacancy, resulting a faster response

path Parameters
accountId
required
string

ID of the Account to consider

query Parameters
object

The Vacancy filter to apply

header Parameters
Accept-Language
string
Enum: "en" "nl" "it" "es" "de"

Language to localize resource (if not provided, default to en)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    },
  • "relationships": {
    }
}

Returns all vacancies of an Account in a specific Channel

Retrieving relationship data

To obtain the list of Vacancies available for a specific Channel, perform a GET operation to the /accounts/<account-id>/channels/<channel-id>/vacancies endpoint.

To get the content in a specific language (if available), specify the language in the request header Accept-Language. More info about Accept-Language and locales. Please note, that multiple languages preferences are not supported, content language will be defined by the first language on the list.
The language of the response content will be specified in the response header Content-Language. More info about Content-Language.

Limiting results

Optionally, to limit the scope of the results, you can use the following query parameters:

  • filter[status]

Example query:

To fetch all vacancies of an Account in a specific Channel and in language nl, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/{accountId}/channels/{channelName}/vacancies' \
  -H 'Accept-Language: nl' \
  -H 'Authorization: Bearer ...'

To fetch all open Vacancies of the account 5ab8845731e881343fa7458c, available for publishing in a specific channel in English (en), you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/5ab8845731e881343fa7458c/channels/{channelName}/vacancies?filter[status]=open' \
  -H 'Accept-Language: en' \
  -H 'Authorization: Bearer ...'
path Parameters
accountId
required
string

ID of the Account to consider

channelId
required
string

string GUID of the Channel to consider

query Parameters
object

The Vacancy filter to apply

header Parameters
Accept-Language
string
Enum: "en" "nl" "it" "es" "de"

Language to localize resource (if not provided, default to en)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Returns all Location specific questions

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Returns all Locations of an Account

Supports pagination with filter[limit] and filter[offset] parameters. When having these two filter parameters related to pagination, an extra object called 'meta' will be included in the body. This will include the count of all the available locations

path Parameters
accountId
required
string

ID of the Account to consider

query Parameters
object

The location pagination filters to apply

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Create a Location

Creates a location and send the created location or all the locations in that account

  • last_insert : Can be true or false. When true, only the created location is sent. When false or the query param is not added, all the locations in the account is sent after creating the location
path Parameters
accountId
required
string

ID of the Account to consider

query Parameters
last_insert
string
Enum: "true" "false"

Whether to send the created location or all the locations in the account. When the value is 'true', only the created location is sent

Request Body schema: application/json

Location object to be created

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Return a location by location ID

path Parameters
accountId
required
string

ID of the Account to consider

locationId
required
string

ID of the Location to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Update a Location

path Parameters
accountId
required
string

ID of the Account to consider

locationId
required
string

ID of the Location to consider

Request Body schema: application/json

Location object to be updated

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Return a location by external location ID

path Parameters
accountId
required
string

ID of the Account to consider

externalLocationId
required
string

ID of the External Location to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Update a Location based on external location

path Parameters
accountId
required
string

ID of the Account to consider

externalLocationId
required
string

ID of the External Location to consider

Request Body schema: application/json

Location object to be updated

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Returns all Regions

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create a new Region in an Account

path Parameters
accountId
required
string

ID of the Account to consider

Request Body schema: application/json

Region that needs to be added to the Account

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update a Region in an Account

path Parameters
accountId
required
string

ID of the Account to consider

regionId
required
string

ID of the Region to consider

Request Body schema: application/json

Region that needs to be updated in the Account

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Returns location information and the attributes of a User in an Account

Supported includes:

  • location
  • region

Example query:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/{accountId}/users/{userId}?include=locations,regions' \
  -H 'Authorization: Bearer ...'
path Parameters
accountId
required
string

ID of the Account to consider

userProfileId
required
string

ID of userProfile

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "included": [
    ]
}

Returns all Job functions in an Account

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create a new Job Function in an Account

path Parameters
accountId
required
string

ID of the Account to consider

Request Body schema: application/json

Job function that needs to be added to the Account

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Returns all Email Templates in an Account

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Returns Job board details

To obtain the list of Job board vacancies and their locations and job-functions details, perform a GET operation to the /accounts/<account-id>/jobboard endpoint.

Limiting results

Optionally, to limit the scope of the results, you can use the following query parameters:

  • filter[vacancy]
  • filter[language]

For filtering by language, comma separated values can be used. Ex: ?filter[language]=<language1>,<language2>

Example query:

To fetch all job board vacancies of account <testAccountId>, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/<testAccountId>/jobboard' \
  -H 'Authorization: Bearer ...'

To fetch a specific vacancy of the job board in account <testAccountId>, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/<testAccountId>/jobboard?filter[vacancy]=<testVacancyId>' \
  -H 'Authorization: Bearer ...'

To fetch a specific vacancy of the job board in account <testAccountId> and filter by language ENG, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/<testAccountId>/jobboard?filter[vacancy]=<testVacancyId>&filter[language]=EN' \
  -H 'Authorization: Bearer ...'

To fetch a specific vacancy of the job board in account <testAccountId> and filter by language ENG and NL, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/accounts/<testAccountId>/jobboard?filter[vacancy]=<testVacancyId>&filter[language]=ENG,NL' \
  -H 'Authorization: Bearer ...'
path Parameters
accountId
required
string

ID of the Account to consider

query Parameters
object

Vacancy and Location filter

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "included": [
    ]
}

Returns all Rejection reasons in an Account

path Parameters
accountId
required
string

ID of the Account to consider

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create a Candidate and Application in an Account

To create a new application in Harver Platform, perform a POST operation to the /vacancies/<vacancy-id>/applications endpoint. The response provides a magic link to complete a candidate journey in Harver Platform. The magic link is generated for a new or an existing applicant.

If the candidate already applied for the vacancy in Harver the magic link for that application will be returned.

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

Candidate Application details

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

candidateApplications

Create a Candidate and Application in an Account

To create a new application in Harver Platform, perform a POST operation to the /vacancies/<vacancy-id>/applications endpoint. The response provides a magic link to complete a candidate journey in Harver Platform. The magic link is generated for a new or an existing applicant.

If the candidate already applied for the vacancy in Harver the magic link for that application will be returned.

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

Candidate Application details

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

vacancies

Returns all Candidates of a Vacancy

To obtain the list of Candidates and their Applications, perform a GET operation to the /vacancies/<vacancy-id>/candidates endpoint.

Limiting results

Optionally, to limit the scope of the results, you can use the following query parameters:

  • filter[status]
  • filter[status-updated-at][since]
  • filter[status-updated-at][until]
  • filter[locations]
  • filter[region]
  • filter[external_location_id]
  • filter[job_function]

For filtering by locations, regions, external location ID and job function, comma separated values can be used. Ex: ?filter[locations]={ID1},{ID2}

Example query:

To fetch all candidates of vacancy 5ac774c431e881242fa7164b that have been in status new, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/5ac774c431e881242fa7164b/candidates?filter[status]=new' \
  -H 'Authorization: Bearer ...'

To fetch all candidates of vacancy 5ac774c431e881242fa7164b that have been in status new since at least April 1st, 2018, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/5ac774c431e881242fa7164b/candidates?filter[status]=new&filter[status-updated-at][since]=1522540800' \
  -H 'Authorization: Bearer ...'

To fetch all candidates of vacancy 5ac774c431e881242fa7164b and filter by locations 5c41a7db42dd2c4d3a34cfd2 and 5c484fdece609b10529e1e3f, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/5ac774c431e881242fa7164b/candidates?filter[locations]=5c41a7db42dd2c4d3a34cfd2,5c484fdece609b10529e1e3f' \
  -H 'Authorization: Bearer ...'

To fetch all candidates of vacancy 5ac774c431e881242fa7164b and filter by locations 5c41a7db42dd2c4d3a34cfd2 and 5c484fdece609b10529e1e3f, region as 5c484f8bce609b10529e1e1b, external location id as 78945 and job function as 5c484fa8ce609b10529e1e2b, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/5ac774c431e881242fa7164b/candidates?filter[locations]=5c41a7db42dd2c4d3a34cfd2,5c484fdece609b10529e1e3f&filter[region]=5c484f8bce609b10529e1e1b&filter[external_location_id]=78945&filter[job_function]=5c484fa8ce609b10529e1e2b' \
  -H 'Authorization: Bearer ...'
path Parameters
vacancyId
required
string

ID of the Vacancy to consider

query Parameters
object

The Vacancy filter to apply

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "included": [
    ],
  • "meta": {
    }
}

Returns the module settings of a Vacancy

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

moduleId
required
string

ID of the Module to consider

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Find vacancy by id

Available query parameters:

  • filter[skip_aggregation] - Supports true or false
  • include - Supports combination of locations, regions and job-functions as a comma separated single string. Max length 31

ex : locations,job-functions

Increasing Performance

filter[skip_aggregation]=true will skip aggregating candidate count in a vacancy, resulting a faster response

Example queries:

To get the details of locations assigned to a vacancy, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/:vacancyId?include=locations' \
  -H 'Authorization: Bearer ...'

To get the details of regions assigned to a vacancy, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/:vacancyId?include=regions' \
  -H 'Authorization: Bearer ...'

To get the details of job-functions assigned to a vacancy, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/vacancies/:vacancyId?include=job-functions' \
  -H 'Authorization: Bearer ...'
path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "included": [
    ]
}

Update a Vacancy Status

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

The Vacancy status to update

object

Responses

Request samples

Content type
application/json
{
  • "attributes": {
    }
}

Updates locations of a vacancy Deprecated

!!! IMPORTANT - This endpoint is will be removed soon. Please use Updates attached locations of a vacancy endpoint This endpoint updates the locations of a vacancy. It supports two options configs keys to manipulate location update.

  • switchToLocations - Supports boolean value true or false. If true, will force switching to a vacancy. If there are any regions attached to the vacancy, this will skips the regions check and remove regions and attach locations to the vacancy. Else will check if there are any regions attached to the vacancy before updating the locations, and if so, will not allow location update.
  • replaceLocations - Supports boolean value true or false. If true, previous existing locations will be replaces by the new locations. Else will add the new locations to the previous locations.
path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

The Vacancy status to update

object

Responses

Request samples

Content type
application/json
{
  • "attributes": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Updates attached locations of a vacancy

This endpoint updates the attached locations of a vacancy. It supports two configs to manipulate location update.

  • forceOperation - This option accepts boolean value true or false.

    • If set to true, it will attach sent locations to the job vacancy, EVEN IF there are already regions attached to it.

    • If set to false, will verify if the job vacancy already has regions attached. If regions are already attached, an error response is sent.

  • replaceValues - This option accepts boolean value true or false.

    • If set to true, the new locations will completely replace any existing ones in the vacancy.

    • If set to false, the new locations will be added alongside the existing ones, creating a combined list of locations and attaching them to the vacancy.

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

The Vacancy status to update

object

Responses

Request samples

Content type
application/json
{
  • "attributes": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Updates attached regions of a vacancy

This endpoint updates the attached regions of a vacancy. It supports two configs to manipulate regions update.

  • forceOperation - This option accepts boolean value true or false.

    • If set to true, it will attach sent regions to the job vacancy, EVEN IF there are already locations attached to it.

    • If set to false, will verify if the job vacancy already has locations attached. If locations are already associated, an error response is sent.

  • replaceValues - This option accepts boolean value true or false.

    • If set to true, the new regions will completely replace any existing ones in the vacancy.

    • If set to false, the new regions will be added alongside the existing ones, creating a combined list of regions and attaching them to the vacancy.

path Parameters
vacancyId
required
string

ID of the Vacancy to consider

Request Body schema: application/json

The Vacancy status to update

object

Responses

Request samples

Content type
application/json
{
  • "attributes": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

applications

Returns application ids

Get harver application ids based on ats-parameters or search by vacancy and email.

  • filter[atsParameters] or
  • filter[applicationMeta]

Important!!

To improve the search of applications using atsParameters, the endpoint has been limited to search applications using standardized parameters only. Bellow is the list of standardized parameters.

  • application_id
  • candidate_id
  • country
  • id
  • location
  • source
  • vacancy_id

Apart from these, harver provides another 5 customizable standard atsParameters. So the client can do a custom mapping from the client's side and use these standard atsParameters for an application search.

  • custom_id_1
  • custom_id_2
  • custom_id_3
  • custom_id_4
  • custom_id_5

Example query:

To search an application based on atsCandidateId, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/applications?accountId=:accountId&filter[atsParameters][atsCandidateId]=123456789&filter[atsParameters][atdVacancyId]=56254122' \
  -H 'Authorization: Bearer ...'

To search an application based on vacancy and email, you would call the following endpoint:

  curl -X GET \
    'https://api.harver.com/api/v1.0/applications?accountId=:accountId&filter[applicationMeta][vacancy]=123456789&filter[applicationMeta][email]=email@test.com' \
    -H 'Authorization: Bearer ...'
query Parameters
accountId
required
string

The account to look for

filter
required
string
Enum: "atsParameters[candidateId]" "atsParameters[srcId]" "atsParameters[vacancyId]" "applicationMeta[vacancy]" "applicationMeta[email]"

The filter to apply

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Returns the details of an Application

IMPORTANT

Avoid using all the include criteria, unless all modules are enabled in your account. Use include criteria for the modules activated in your account.

Retrieving relationship data

To retrieve an Application's relationship data (such as a PDF report, submitted resume etc.), you can make a basic GET applications/{applicationId}, while also providing the include parameter. This parameter represents 'a list of comma-separated includes', which are to be included in the response.

Supported includes:

  • vacancy
  • report
  • cover-letter
  • resume
  • profile-photo
  • matching-results
  • video-pitches
  • video-interviews
  • personal-info
  • additional-info
  • grading
  • ats
  • open-questions
  • consents
  • application-locations
  • locations
  • availability
  • job-functions
  • diagnostics
  • location-specific-question
  • custom-document
  • virtual-interviews
  • matching-indicators
  • geolocation
  • account-questions
  • personal-information
  • sessions
  • fraud-flags

    Report

    The report is shown in the GET Application response in the language that the candidate has completed the flow. To get the content of the report in a specific language (if available), please specify the language in the request header Accept-Language. Please note, that multiple languages preferences are not supported. The language of the response content will be specified in the response header Content-Language.

    Personal and Additional Info

    When personal or additional info modules are included, attributes will have questions field as an array of questions, where each question has the following attributes:
  • questionId(string)
  • question(string)
  • answer(mixed)
  • answerType(string) For Retail Flow accounts, the personal-info include's module type will be Vacancy Questions

    Personal Information (New Module)

    To get data from new personal information module, you need to add the include personal-information. Schema example is added in the response samples.

Example query:

To fetch an application with the ID 5bd17c67c081252955b19659 and include matching-results and ats information in the response, you would call the following endpoint:

curl -X GET \
  'https://api.harver.com/api/v1.0/applications/5bd17c67c081252955b19659?include=matching-results,ats' \
  -H 'Authorization: Bearer ...'

NOTE: open-questions include will be deprecated, please use open-question instead.

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

query Parameters
include
string
Enum: "vacancy" "report" "cover-letter" "resume" "profile-photo" "matching-results" "video-pitches" "video-interviews" "personal-info" "additional-info" "grading" "ats" "open-questions" "consents" "application-locations" "locations" "availability" "job-functions" "diagnostics" "location-specific-question" "custom-document" "virtual-interviews" "matching-indicators" "geolocation" "account-questions" "personal-information"

The include to apply for relationship data. Use comma separated values for include

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "included": [
    ]
}

Update an Application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Request Body schema: application/json

The Application status to update

object

Responses

Request samples

Content type
application/json
{
  • "attributes": {
    }
}

Delete an application using applicationId

To delete an application, the requesting user should have access to the account and the vacancy which the application resides. Also the user should be an admin in the account to delete the application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Returns the Application Notes

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Add a Note to an Application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Request Body schema: application/json

Note that needs to be added to the Application

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Delete a Note from the Application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

noteId
required
string

ID of the Note to consider

Responses

Update ats parameters

Endpoint to update the 'ATS Parameters' for a candidate application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Request Body schema: application/json

Ats parameters that needs to be updated in the candidate application

object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Add locations to an application

Endpoint to add locations to a candidate application

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Request Body schema: application/json

Location IDs that need to be added to the candidate application

object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Update application status per external location

Endpoint to update the 'status' per external location for a candidate application

When changing the status to 'HIRED', the job function ID can be sent in the request body (optional attribute).

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

externalLocationId
required
string

ID of the External Location to consider

Request Body schema: application/json

Application status (per external location) that needs to be updated in the candidate application

object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Update application status per location

Endpoint to update the 'status' per location for a candidate application

When changing the status to 'HIRED', the job function ID can be sent in the request body (optional attribute).

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

locationId
required
string

ID of the Location to consider

Request Body schema: application/json

Application status (per location) that needs to be updated in the candidate application

object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Retrieves the re-apply status of a candidate

This endpoint checks whether a candidate is eligible for re-applying. If a candidate is not found 404 is returned

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Retrieves a link to access development report

This endpoint returns a link to access development report. Development report can be searched with either matchingIndicatorId OR url-encoded matchingIndicatorName along with the applicationId

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

query Parameters
matchingIndicatorId
string

The matching indicator id ([0-9a-f]{24})

matchingIndicatorName
string

The matching indicator name. This should be url-encoded

Responses

Response samples

Content type
application/json

Retrieves a link to access interview guide

This endpoint returns a link to access interview guide.

path Parameters
applicationId
required
string

ID of the Application to consider ([0-9a-f]{24})

Responses

Response samples

candidate-statuses

Returns the avalable candidate statuses

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

user-profile

Returns the User profile details

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Manages push notifications of devices

Request Body schema: application/json

Device details and the push notification status

Array of objects

Responses

Request samples

Content type
application/json
{
  • "data": [
    ]
}

Manages push notification types of devices

Request Body schema: application/json

Push notification type status

Array of objects

Responses

Request samples

Content type
application/json
{
  • "data": [
    ]
}

scheduling

Schedule an interview and retrieve the scheduling link Deprecated

path Parameters
accountId
required
string

ID of the Account to consider

Request Body schema: application/json

Interview details that needs to be added for scheduling an interview

required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Returns the details of an Interview Deprecated

path Parameters
accountId
required
string

ID of the Account to consider

candidateId
required
string

ID of the Candidate to consider

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

webhook

Trigger webhook for the given client URL

Harver dev team can configure the webhooks for you

Available events

  • ApplicationStarted - A candidate registered at Harver. (Candidate Status: in-progress)
  • PersonalInfoWasCreated - A candidate filled in the “Personal information” module. (Candidate Status: in-progress)
  • AdditionalInfoWasUpdated - A candidate filled in the “Additional information” module. (Candidate Status: in-progress)
  • CandidateStatusNew - A candidate completed the Harver Journey. (Candidate Status = new)

Responses

Callbacks

Callback payload samples

Callback
POST: Triggered webhook body
Content type
application/json
{
  • "triggeredAt": 123238983298,
  • "event": "ApplicationStarted",
  • "data": {
    },
  • "relationships": {
    }
}