Introduction
Welcome to the TalentNest API! Our API allows you to perform queries (both safe and destructive) without having to interface with the TalentNest website. You can obtain an API key which will provide you with access to data belonging to your client.
The API is accessible through https://subdomain.talentnest.com/api/v1, where subdomain is the subdomain of your client on the TalentNest website. All API requests must be made via SSL (HTTPS). Non-SSL requests will be ignored. As well, all requests must be authenticated to succeed (see the Authentication section).
The API accepts resources and provides responses using JSON. The format may be specified by the URI extension (ie. https://subdomain.talentnest.com/api/v1/employees.json), but is not required. If transmitting a JSON representation of a resource, the Content‐Type header must be set to application/json.
The API is RESTful. Each request has an associated HTTP verb which must be used. Certain endpoints accept resources as a part of the request.
Authentication
To authorize, use this code:
# Note the trailing colon(:) after the username (API token)
$ curl https://subdomain.talentnest.com/api/v1/employees -u TALENTNEST_API_KEY:
Alternatively, pass your API key within an Authorization header. Make sure to Base64 encode the token with the colon (:) appended.
$ curl https://subdomain.talentnest.com/api/v1/employees -H 'Authorization: Basic VEFMRU5UTkVTVF9BUElfS0VZOg=='
Make sure to replace
TALENTNEST_API_KEY
with your API key andsubdomain
with your TalentNest subdomain.
Authentication to TalentNest's API is done with your API key.
Requests are authenticated using HTTP Basic Auth. Provide your API key as the basic auth username. You do not need to provide a password.
Alternatively, you can also pass your API key in an Authorization header.
Authorization: Basic <base64("TALENTNEST_API_KEY:")>
Since we only require an API key within the username portion of the basic auth, simply append a :
to your TalentNest API token and then Base64 encode the resulting string.
Pagination
An example pagination response header
HTTP/1.1 200 OK
Status: 200 OK
Link: <https://subdomain.talentnest.com/api/v1/applications?page=1>; rel="first",
<https://subdomain.talentnest.com/api/v1/applications?page=2>; rel="prev",
<https://subdomain.talentnest.com/api/v1/applications?page=17>; rel="last",
<https://subdomain.talentnest.com/api/v1/applications?page=4>; rel="next"
X-Page: 3
X-Per-Page: 50
X-Total: 814
API methods that return a collection of results are always paginated. Paginated results will include a Link (see RFC-5988) response header with the following information.
Link | Description |
---|---|
next | The corresponding URL is the link to the next page. |
prev | The corresponding URL is the link to the previous page. |
last | The corresponding URL is the link to the last page. |
Paginated results will also include the following in the response header:
Field | Description |
---|---|
X-Page | The current page of results returned. |
X-Per-Page | The number of results per page. Default is 50 . |
X-Total | The total number of results available. |
Query string parameters
API methods that return a collection of results accept the following query parameters:
Parameter | Description |
---|---|
per_page optional | The requested number of results per page. Default is 50 and the allowed Maximum is 100 . |
page optional | The specific page requested. |
Endpoints
All API requests should be made to the https://subdomain.talentnest.com
base domain (where
subdomain is your client's subdomain on TalentNest).
In any case that an endpoint is not constructed properly, or points to an invalid resource, the result will
contain an InvalidParameter or ResourceNotFound error JSON object, which may refer to a specific
parameter within the endpoint URL. These parameters are of the form :parameter
(ie. a name preceded by
a colon), as seen in the table below.
Jobs
GET: All Jobs
curl "https://subdomain.talentnest.com/api/v1/jobs"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"jobs": [
{
"id": 22625,
"title": "F&I Manager – Automotive",
"job_status": "Open",
"opens_at": "2017-09-05",
"closes_at": null,
"status_changed_at": "2015-12-16T14:31:30Z",
"last_application_at": "2017-11-25T13:38:19Z",
"created_at": "2015-12-16T14:31:18Z",
"updated_at": "2017-09-08T13:55:24Z",
"job_url": "https://subdomain.talentnest.com/en/posting/18502/location/22625",
"apply_url": "https://subdomain.talentnest.com/en/posting/18502/apply/22625",
"business_unit": {
"id": 7366,
"location": {
"country": "United States",
"address": null,
"postal": null,
"state": "Texas",
"city": "Austin"
}
}
},
{
"id": 23032,
"title": "Financial Services",
"job_status": "Closed",
"opens_at": "2017-01-13",
"closes_at": null,
"status_changed_at": "2017-02-03T13:58:05Z",
"last_application_at": null,
"created_at": "2017-01-13T19:39:14Z",
"updated_at": "2017-02-03T13:58:05Z",
"job_url": "https://subdomain.talentnest.com/en/posting/18801/location/23032",
"apply_url": "https://subdomain.talentnest.com/en/posting/18801/apply/23032",
"business_unit": {
"id": 2009,
"location": {
"country": "Canada",
"address": "3300 Bloor Street West",
"postal": "M9B 2C5",
"state": "Ontario",
"city": "Toronto"
}
}
}
]
}
List all jobs.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/jobs
Query string parameters
Parameter | Description |
---|---|
per_page | The requested number of results per page. Default is 50 and the allowed Maximum is 300 . |
page | The specific page requested. |
job_status | Filters based on job status. Allowed values are open , paused , closed . |
business_unit_id | Return jobs belonging to this business unit or any of its sub-units. To exclude sub-unit jobs, add the optional parameter sub_units=false . |
created_after | Return only jobs that were created after this timestamp. Timestamp must be ISO 8601 format. |
updated_after | Return only jobs that were updated after this timestamp. Timestamp must be ISO 8601 format. |
GET: Specific Job
curl "https://subdomain.talentnest.com/api/v1/jobs/{id}"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"job": {
"id": 23819,
"title": "Program Manager",
"job_status": "Open",
"opens_at": "2017-02-03",
"closes_at": "2017-02-10",
"status_changed_at": "2017-02-03T21:46:57Z",
"last_application_at": null,
"created_at": "2017-02-03T21:46:16Z",
"updated_at": "2017-02-03T21:46:16Z",
"job_url": "https://subdomain.talentnest.com/en/posting/19252/location/23819",
"apply_url": "https://subdomain.talentnest.com/en/posting/19252/apply/23819",
"business_unit": {
"id": 2446,
"location": {
"country": "Canada",
"address": null,
"postal": null,
"state": "Alberta",
"city": "Edmonton"
}
},
"description": "Detailed job description",
"employment_type": null,
"posting_type": "External",
"job_applications_count": 30,
"completed_applications_count": 25,
"unreviewed_applications_count": 5,
"hires_count": 0,
"vacancies_count": 0,
"assessment": null
}
}
HTTP Request
GET https://subodmain.talentnest.com/api/v1/jobs/{id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the job to retrieve |
GET: Job's Employment Process
curl "https://subdomain.talentnest.com/api/v1/jobs/{id}/employment_process"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"employment_process": {
"steps": [
{
"id": 1933,
"name": "Review Candidate",
"abbreviation": "RC",
"step_type": "New Application",
"sequence": 1,
"optional": false,
"rated": false
},
{
"id": 2041,
"name": "Phone Interview",
"abbreviation": "PI",
"step_type": "Interview",
"sequence": 2,
"optional": true,
"rated": true
},
{
"id": 2042,
"name": "Management Pro",
"abbreviation": "MPP3",
"step_type": "Assessment",
"sequence": 3,
"optional": true,
"rated": false
},
{
"id": 2044,
"name": "Interview",
"abbreviation": "Int",
"step_type": "Interview",
"sequence": 4,
"optional": true,
"rated": true
},
{
"id": 1934,
"name": "Employment Offer",
"abbreviation": "EO",
"step_type": "Employment Offer",
"sequence": 5,
"optional": false,
"rated": false
}
]
}
}
HTTP Request
GET https://subodmain.talentnest.com/api/v1/jobs/{id}/employment_process
URL Parameters
Parameter | Description |
---|---|
id | The ID of the job to use |
Applications
GET: All Job Applications
curl "https://subdomain.talentnest.com/api/v1/applications"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"applications": [
{
"id": 1765253,
"candidate_id": 1148,
"job_id": 25668,
"job_title": "Parts Manager - Automotive",
"first_name": "Jake",
"last_name": "Joseph",
"email": "jj@talentnest.com",
"application_step": "Review Candidate",
"application_status": "Deselected",
"application_url": "https://subdomain.talentnest.com/en/job/25668/candidate/1148",
"status_changed_at": "2017-11-29T19:41:33Z",
"completed_at": "2017-10-28T17:47:15Z",
"created_at": "2017-09-23T20:31:53Z",
"updated_at": "2017-12-01T07:00:10Z"
},
{
"id": 1769005,
"candidate_id": 876140,
"job_id": 29696,
"job_title": "General Agent",
"first_name": "Lori",
"last_name": "Ham",
"email": "lori.ham@talentnest.com",
"application_step": "Review Candidate",
"application_status": "Deselected",
"application_url": "https://subdomain.talentnest.com/en/job/29696/candidate/876140",
"status_changed_at": "2017-11-11T15:16:25Z",
"completed_at": "2017-09-26T17:20:27Z",
"created_at": "2017-09-26T17:20:25Z",
"updated_at": "2017-11-11T15:16:25Z"
}
]
}
Retrieves all job applications
HTTP Request
GET https://subodmain.talentnest.com/api/v1/applications/
Query string parameters
Parameter | Description |
---|---|
per_page | The requested number of results per page. Default is 50 and the allowed Maximum is 100 . |
page | The specific page requested. |
job_id | Return only applications belonging to this job. |
candidate_id | Return only applications belonging to this candidate. |
completed_after | Return only applications that were completed after this timestamp. Timestamp must be ISO 8601 format. |
updated_after | Return only applications that were updated after this timestamp. Timestamp must be ISO 8601 format. |
application_status | Return only applications with this status. Allowed values are active , deselected , hired . |
status_changed_after | Return only applications whose status was changed after this timestamp. Timestamp must be ISO 8601 format. |
GET: Specific Application
curl "https://subdomain.talentnest.com/api/v1/applications/{id}"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"application": {
"id": 1765253,
"candidate_id": 1148,
"job_id": 25668,
"job_title": "Parts Manager - Automotive",
"first_name": "Jake",
"last_name": "Joseph",
"email": "jj@talentnest.com",
"application_step": "Management Pro",
"application_status": "Active",
"application_url": "https://subdomain.talentnest.com/en/job/25668/candidate/1148",
"status_changed_at": "2017-10-28T17:47:15Z",
"completed_at": "2017-10-28T17:47:15Z",
"created_at": "2017-09-23T20:31:53Z",
"updated_at": "2017-12-01T07:00:10Z",
"phone": "4167460444",
"deselect_reason": null,
"source": "Company Website",
"reviewed": true,
"passed_prescreen": true,
"golden_eagle": false,
"employee": false,
"prescreen_answers": [
{
"question": "Are you legally eligible to work in the United States?",
"answer": "Yes",
"passed": true
},
{
"question": "Do you have a good driving record and a valid driver’s license?",
"answer": "Yes",
"passed": true
},
{
"question": "Would you be able to pass a drug screen? ",
"answer": "Yes",
"passed": true
}
],
"demographic_answers": [
{
"question": "If you were referred to our company by someone, who referred you:",
"answer": "Friend",
"type": "single"
},
{
"question": "If you were referred by an employee of our company, please list the name here:",
"answer": "",
"type": "text"
},
{
"question": "What days of the week are you available to work?",
"answer": [
"Tuesday",
"Friday"
],
"type": "multi"
},
{
"question": "Are you available to work weekends?",
"answer": "Yes",
"type": "single"
},
{
"question": "What date are you available to start work?",
"answer": "",
"type": "text"
},
{
"question": "Are you available to travel on company business? ",
"answer": "Yes",
"type": "single"
},
{
"question": "What is the highest level of education you have completed?",
"answer": "Trade School",
"type": "single"
},
{
"question": "List your computer skills.",
"answer": "",
"type": "text"
}
],
"resume_url": "https://subdomain.talentnest.com/en/documents/79944/download?hash=95ab65073cd38427eeb69e827c4806d32f716c95",
"cover_url": null,
"candidate_location": {
"country": "Canada",
"address": "3300 Bloor Street West",
"postal": "M8X 2X3",
"state": "Ontario",
"city": "Toronto"
},
"future_consideration": false,
"candidate_tags": [
"automotive",
"technician"
],
"current_step": {
"id": 5,
"sequence": 2,
"step_name": "Management Pro",
"status": "Completed",
"rating": null,
"activated_at": "2017-05-27T15:57:36Z",
"completed_at": "2017-10-21T21:10:33Z",
"invited_at": null,
"deselected_at": null
},
"employment_process_history": [
{
"id": 13,
"sequence": 1,
"step_name": "Review Candidate",
"status": "Completed",
"rating": "4.0",
"activated_at": "2017-05-27T15:54:31Z",
"completed_at": "2017-05-27T15:57:32Z",
"invited_at": null,
"deselected_at": null
},
{
"id": 5,
"sequence": 2,
"step_name": "Management Pro",
"status": "Completed",
"rating": null,
"activated_at": "2017-05-27T15:57:36Z",
"completed_at": "2017-10-21T21:10:33Z",
"invited_at": null,
"deselected_at": null
},
{
"id": 8,
"sequence": 3,
"step_name": "Interview",
"status": "Inactive",
"rating": null,
"activated_at": null,
"completed_at": null,
"invited_at": null,
"deselected_at": null
},
{
"id": 7,
"sequence": 4,
"step_name": "Employment Offer",
"status": "Inactive",
"rating": null,
"activated_at": null,
"completed_at": null,
"invited_at": null,
"deselected_at": null
}
],
"assessments": [
{
"id": 617257,
"name": "ContactCenterScreen 2.0",
"url": "https://assessment-report-url...",
"scores": [
{
"type": "sales",
"score": "2.8",
"recommendation": "caution"
},
{
"type": "service",
"score": "3.1",
"recommendation": "proceed"
}
]
},
{
"id": 660573,
"name": "POP Screen",
"url": "https://assessment-report-url...",
"scores": [
{
"type": "overall",
"score": "2.38",
"recommendation": "redirect"
}
]
}
]
}
}
Retrieve a specific application by its id
.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/applications/{id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application to retrieve |
GET: An Application's Notes
curl "https://subdomain.talentnest.com/api/v1/applications/{id}/notes"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"notes": [
{
"id": 34118320,
"title": "New application submitted",
"body": "New application submitted",
"created_at": "2023-01-31T17:41:59Z",
"updated_at": "2023-01-31T17:41:59Z"
},
{
"id": 34118408,
"title": "Test",
"body": "Had a great interview. ",
"created_at": "2023-01-31T17:48:09Z",
"updated_at": "2023-01-31T17:48:09Z"
},
{
"id": 34147229,
"title": "Review Candidate completed",
"body": "Review Candidate completed",
"created_at": "2023-02-02T20:19:05Z",
"updated_at": "2023-02-02T20:19:05Z"
},
{
"id": 34147230,
"title": "Phone Interview started",
"body": "Phone Interview started",
"created_at": "2023-02-02T20:19:19Z",
"updated_at": "2023-02-02T20:19:19Z"
},
{
"id": 34147299,
"title": "Phone Interview completed",
"body": "Phone Interview completed",
"created_at": "2023-02-02T20:19:31Z",
"updated_at": "2023-02-02T20:19:31Z"
},
{
"id": 34147300,
"title": "Interview started",
"body": "Interview started",
"created_at": "2023-02-02T20:19:34Z",
"updated_at": "2023-02-02T20:19:34Z"
},
{
"id": 34147302,
"title": "Interview completed",
"body": "Interview completed",
"created_at": "2023-02-02T20:19:42Z",
"updated_at": "2023-02-02T20:19:42Z"
},
{
"id": 34431535,
"title": "Employment Offer started",
"body": "Employment Offer started",
"created_at": "2023-02-14T20:25:13Z",
"updated_at": "2023-02-14T20:25:13Z"
},
{
"id": 34431537,
"title": "Employment Offer completed",
"body": "Employment Offer completed",
"created_at": "2023-02-14T20:25:16Z",
"updated_at": "2023-02-14T20:25:16Z"
},
{
"id": 34431538,
"title": "This candidate has been hired",
"body": "This candidate has been hired",
"created_at": "2023-02-14T20:25:16Z",
"updated_at": "2023-02-14T20:25:16Z"
},
{
"id": 34431557,
"title": "Onboarding process started",
"body": "Onboarding process started",
"created_at": "2023-02-14T20:25:44Z",
"updated_at": "2023-02-14T20:25:44Z"
}
]
}
Retrieve a notes for a specific application by its application id
.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/applications/{id}/notes
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application to retrieve notes for |
POST: Advance Application
curl -X POST "https://subdomain.talentnest.com/api/v1/applications/{id}/advance"
-H 'Content-Type: application/json'
-u "TALENTNEST_API_KEY:"
The above command takes a JSON request, structured like this:
{
"from_step_id": 2041,
"rating": 5,
"note": "Great first impression!"
}
The above returns JSON, structured like this:
{
"application": {
"id": 3060537,
"current_step": {
"id": 2042,
"sequence": 3,
"step_name": "POP7",
"status": "Active",
"rating": null,
"activated_at": "2019-01-07T17:04:26Z",
"completed_at": null,
"invited_at": null,
"deselected_at": null
}
}
}
Advances this application from the current_step
to the next step in the employment process. Only Active
applications can be advanced.
The current_step
will be Completed
and the next step will be Activated
. This newly activated step becomes the new
current_step
. The response contains the new current_step
's information.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/applications/{id}/advance
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application to advance |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
from_step_id | Yes | Integer | The ID of the application's current_step . |
rating | No | Integer | Rating the candidate received at current_step . Range 1 to 5 . Applies only to rated steps. |
note | No | String | Optional note to store when completing the current_step . |
POST: Move Application
curl -X POST "https://subdomain.talentnest.com/api/v1/applications/{id}/move"
-H 'Content-Type: application/json'
-u "TALENTNEST_API_KEY:"
The above command takes a JSON request, structured like this:
{
"from_step_id": 2041,
"to_step_id": 2044,
"rating": 5,
"note": "Completing this step and jumping few steps forward!"
}
The above returns JSON, structured like this:
{
"application": {
"id": 3060537,
"current_step": {
"id": 2044,
"sequence": 4,
"step_name": "Interview",
"status": "Active",
"rating": null,
"activated_at": "2019-03-12T17:04:26Z",
"completed_at": null,
"invited_at": null,
"deselected_at": null
}
}
}
Moves this application to an arbitrary step ahead in the employment process. The old
current_step
will be Completed
and the new current_step
will be Activated
. The response contains the new
current_step
's information.
Only Active
applications can be moved.
The move is not allowed if there are any required steps in-between the two steps.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/applications/{id}/move
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application to move |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
from_step_id | Yes | Integer | The ID of the application's current_step . |
to_step_id | Yes | Integer | The ID of the step the application should be moved to. |
rating | No | Integer | Rating the candidate received at current_step . Range 1 to 5 . Applies only to rated steps. |
note | No | String | Optional note to store when completing the current_step . |
POST: Deselect Application
curl -X POST "https://subdomain.talentnest.com/api/v1/applications/{id}/deselect"
-H 'Content-Type: application/json'
-u "TALENTNEST_API_KEY:"
The above command takes a JSON request, structured like this:
{
"send_deselect_email": true,
"deselect_reason_id": 1001,
"note": "Reasons for deselection"
}
The above returns JSON, structured like this:
{
"application": {
"id": 3060537,
"application_status": "Deselected"
}
}
Deselects the application at the current step. Only Active
applications can be deselected.
The current_step
will be Deselected
and the application will also be marked as Deselected
. If optional
parameters are provided, TalentNest can process a deselection reason and custom note.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/applications/{id}/deselect
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application to advance |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
send_deselect_email | No | Boolean | True or False to send a system deselection email to the candidate. Default: False |
deselect_reaason_id | No | Integer | Optional reason ID for why the candidate was deselected. |
note | No | String | Optional note to store why the candidate was deselected. |
GET: Specific Step for Application
curl "https://subdomain.talentnest.com/api/v1/applications/{id}/step/{step_id}"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"step": {
"id": 2042,
"application_id": 3060537,
"sequence": 3,
"step_name": "POP7",
"status": "Active",
"rating": null,
"activated_at": "2022-01-07T17:04:26Z",
"completed_at": null,
"invited_at": null,
"deselected_at": null
}
}
Retrieve a specific step of an application.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/applications/{id}/step/{step_id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application |
step_id | The ID of the step to retrieve |
PUT: Activate Step for Application
curl -X PUT "https://subdomain.talentnest.com/api/v1/applications/{id}/step/{step_id}/activate"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"step": {
"id": 2042,
"application_id": 3060537,
"sequence": 3,
"step_name": "Phone Interview",
"status": "Active",
"rating": null,
"activated_at": "2019-01-07T17:04:26Z",
"completed_at": null,
"invited_at": null,
"deselected_at": null
}
}
Activate a specific step of an application.
HTTP Request
PUT https://subodmain.talentnest.com/api/v1/applications/{id}/step/{step_id}/activate
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application |
step_id | The ID of the step to activate |
PUT: Complete Step for Application
curl -X PUT "https://subdomain.talentnest.com/api/v1/applications/{id}/step/{step_id}/complete"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"step": {
"id": 2042,
"application_id": 3060537,
"sequence": 3,
"step_name": "Phone Interview",
"status": "Completed",
"rating": null,
"activated_at": "2019-01-07T17:04:26Z",
"completed_at": "2019-01-08T13:07:36Z",
"invited_at": null,
"deselected_at": null
}
}
Complete a specific step of an application.
HTTP Request
PUT https://subodmain.talentnest.com/api/v1/applications/{id}/step/{step_id}/complete
URL Parameters
Parameter | Description |
---|---|
id | The ID of the application |
step_id | The ID of the step to complete |
Business Units
Business Units form the hierarchy of your company within TalentNest.
Attribute | Description |
---|---|
parent_id | The ID that this business unit belongs to. |
major_unit_id if available | If major divisions are setup, the ID of the major division that this business unit belongs to. |
GET: All Business Units
curl "https://subdomain.talentnest.com/api/v1/business_units"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"business_units": [
{
"id": 2,
"name": "XYZ Corp",
"description": "XYZ Corp is a world leader in widgets.",
"parent_id": null,
"major_unit_id": null,
"location": {
"country": "Canada",
"address": "3300 Bloor Street West",
"postal": "M8X 2X3",
"state": "Ontario",
"city": "Toronto"
}
},
{
"id": 4,
"name": "Finance",
"description": null,
"parent_id": 2,
"major_unit_id": null,
"location": {
"country": "Canada",
"address": "3300 Bloor Street West",
"postal": "M8X 2X3",
"state": "Ontario",
"city": "Toronto"
}
},
{
"id": 5,
"name": "Accounting",
"description": null,
"parent_id": 4,
"major_unit_id": 4,
"location": {
"country": "Canada",
"address": null,
"postal": null,
"state": null,
"city": null
}
}
]
}
HTTP Request
GET https://subodmain.talentnest.com/api/v1/business_units/
GET: Specific Business Unit
{
"business_unit": {
"id": 2,
"name": "XYZ Corp",
"description": "XYZ Corp is a world leader in widgets.",
"parent_id": null,
"major_unit_id": null,
"location": {
"country": "Canada",
"address": "3300 Bloor Street West",
"postal": "M8X 2X3",
"state": "Ontario",
"city": "Toronto"
}
}
}
HTTP Request
GET https://subodmain.talentnest.com/api/v1/business_units/{id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the business unit to retrieve |
Candidates
GET: All Candidates
curl "https://subdomain.talentnest.com/api/v1/candidates"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"candidates": [
{
"id": 11,
"first_name": "Sakul",
"middle_initial": "N",
"last_name": "Noteab",
"email": "snn@talentnest.com",
"primary_phone": "4161234444",
"created_at": "2010-05-11T20:08:44Z",
"updated_at": "2021-04-29T20:31:30Z"
},
{
"id": 12,
"first_name": "Duncan",
"middle_initial": null,
"last_name": "Reith",
"email": "dunr@talentnest.com",
"primary_phone": "14164444444",
"created_at": "2010-05-26T19:39:48Z",
"updated_at": "2014-06-25T18:27:08Z"
}
]
}
Retrieves all candidates
HTTP Request
GET https://subodmain.talentnest.com/api/v1/candidates/
Query string parameters
Parameter | Description |
---|---|
per_page | The requested number of results per page. Default is 50 and the allowed Maximum is 100 . |
page | The specific page requested. |
created_after | Return only candidates whose record was created after this timestamp. Timestamp must be ISO 8601 format. |
updated_after | Return only candidates that were updated after this timestamp. Timestamp must be ISO 8601 format. |
GET: Specific Candidate
curl "https://subdomain.talentnest.com/api/v1/candidates/{id}"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"candidate": {
"id": 12,
"first_name": "Duncan",
"middle_initial": null,
"last_name": "Reith",
"email": "dunr@talentnest.com",
"primary_phone": "14164444444",
"created_at": "2010-05-26T19:39:48Z",
"updated_at": "2014-06-25T18:27:08Z",
"location": {
"country": "Canada",
"address": "155 Rexdale Boulevard",
"postal": "M9W 5Z8",
"state": "Ontario",
"city": "Toronto"
},
"resume_url": "https://subdomain.talentnest.com/resume...",
"num_of_applications": 3
}
}
Retrieve a specific candidate by its id
.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/candidates/{id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the candidate to retrieve |
POST: Email Candidate
curl -X POST "https://subdomain.talentnest.com/api/v1/candidates/{id}/email"
-H 'Content-Type: application/json'
-u "TALENTNEST_API_KEY:"
The above command takes a JSON request, structured like this:
{
"subject": "Test subject",
"body":"Test body <br> <a href='https://talentnest.com'>https://talentnest.com</a>"
}
The above command returns JSON structured like this:
{
"from":"notifications@talentnest.com",
"to":"<candidate-email>",
"subject":"<sanitized-subject>",
"body":"<sanitized-body>"
}
Sends an email using the client's brand directly to a specific candidate specified id
.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/candidates/{id}/email
URL Parameters
Parameter | Description |
---|---|
id | The ID of the candidate to email |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
subject | Yes | Text | Subject line for email. |
body | Yes | Text | Body of email. Some HTML is allowed, no javascript. |
dry_run | No | Boolean | Set to True to simulate sending an email. An email will not be sent in this case. Default: False |
Employees
GET: All Employees
curl "https://subdomain.talentnest.com/api/v1/employees"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"employees": [
{
"id": 122345,
"employee_number": null,
"business_unit_id": 56,
"manager_id": null,
"hired_on": "2020-05-14",
"started_on": "2020-05-14",
"verified_on": "2020-08-07",
"termination_date": "2020-07-17",
"user": {
"first_name": "Nadia",
"middle_initial": "J",
"last_name": "Smith",
"email": "nadiasmith@talentnest.com",
"primary_phone": "14167460444",
"location": {
"country": "Canada",
"address": " 3300 Bloor Street West",
"postal": "M8X 2X2",
"state": "Ontario",
"city": "Toronto"
}
},
"current_position": null
},
{
"id": 122354,
"employee_number": null,
"business_unit_id": 871,
"manager_id": null,
"hired_on": "2020-07-08",
"started_on": "2020-07-08",
"verified_on": "2020-08-07",
"termination_date": "2020-07-16",
"user": {
"first_name": "Vanessa",
"middle_initial": null,
"last_name": "Squid",
"email": "vsquid@talentnest.com",
"primary_phone": "14167460444",
"location": {
"country": "Canada",
"address": " 3300 Bloor Street West",
"postal": "M8X 2X2",
"state": "Ontario",
"city": "Toronto"
}
},
"current_position": null
},
{
"id": 125458,
"employee_number": null,
"business_unit_id": 128,
"manager_id": null,
"hired_on": "2020-08-06",
"started_on": "2020-08-06",
"verified_on": "2020-08-06",
"termination_date": null,
"user": {
"first_name": "Jake",
"middle_initial": null,
"last_name": "Williams",
"email": "jake.williams@talentnest.com",
"primary_phone": "14167460444",
"location": null
},
"current_position": {
"id": 115427,
"status_id": 388,
"job_title": "Full-Time Customer Support",
"started_on": "2020-08-06",
"ended_on": null,
"position_end_reason_id": null,
"business_unit_id": 10228,
"application_id": 5179944
},
"other_position": {
"id": 102427,
"status_id": 312,
"job_title": "Full-Time Front Desk",
"started_on": "2020-01-31",
"ended_on": "2020-08-06",
"position_end_reason_id": 41,
"business_unit_id": 10228,
"application_id": 5079944
}
}
]
}
Retrieves all employees
HTTP Request
GET https://subodmain.talentnest.com/api/v1/employees
Query string parameters
Parameter | Description |
---|---|
per_page | The requested number of results per page. Default is 50 and the allowed Maximum is 100 . |
page | The specific page requested. |
business_unit_id | Return employees belonging to this business unit or any of its sub-units. To exclude sub-unit employees, add the optional parameter sub_units=false . |
hired_after | Return only employees that have a hired date after this timestamp. Timestamp must be ISO 8601 format. |
GET: A specific Employee
curl "https://subdomain.talentnest.com/api/v1/employees/{id}"
-u "TALENTNEST_API_KEY:"
curl "https://subdomain.talentnest.com/api/v1/employees/{email}"
-u "TALENTNEST_API_KEY:"
The above command returns JSON structured like this:
{
"employee": {
"id": 113246,
"employee_number": null,
"business_unit_id": 119,
"manager_id": null,
"hired_on": "2020-07-08",
"started_on": "2020-07-08",
"verified_on": "2020-07-08",
"termination_date": "2020-07-24",
"user": {
"first_name": "Dan",
"middle_initial": null,
"last_name": "Cooper",
"email": "dcooper@talentnest.com",
"primary_phone": "14167460444",
"location": {
"country": "Canada",
"address": " 3300 Bloor Street West",
"postal": "M8X 2X2",
"state": "Ontario",
"city": "Toronto"
}
},
"current_position": null,
"other_positions": [
{
"id": 123455,
"status_id": 500,
"job_title": "Associate",
"started_on": "2020-07-08",
"ended_on": "2020-07-24",
"position_end_reason_id": 23,
"business_unit_id": 119,
"application_id": 5032461
}
]
}
}
Retrieve a specific employee by id
or email
.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/employees/{id}
GET https://subodmain.talentnest.com/api/v1/employees/{email}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the employee to retrieve |
The email address of the employee to retrieve |
GET: Employee Statuses
curl "https://subdomain.talentnest.com/api/v1/employees/statuses"
-u "TALENTNEST_API_KEY:"
The above returns JSON, structured like this:
{
"statuses": [
{
"id": 123,
"status": "Active",
"description": "Employment status for current employees."
},
{
"id": 145,
"status": "On Leave",
"description": "Empoyment status for employees on leave"
},
{
"id": 157,
"status": "Terminated",
"description": null
},
{
"id": 176,
"status": "Part-Time",
"description": null
},
{
"id": 135,
"status": "Contract",
"description": null
}
]
}
Employee Statuses are client-defined phrases used to identify an employee's current status (e.g. Active or On Leave). Employee Statuses may contain translations.
HTTP Request
GET https://subodmain.talentnest.com/api/v1/employees/statuses
GET: Employees for a Specific Status
curl "https://subdomain.talentnest.com/api/v1/employees/statuses/{id}"
-u "TALENTNEST_API_KEY:"
The above returns JSON, structured like this:
{
"statuses": [
{
"id": 123,
"status": "Active",
"description": "Employment status for current employees.",
"employee_ids": [
1234,
4567,
5482,
7614,
7751,
7757,
8015
]
}
]
}
Returns details for a specific employee status and a list of employee IDs that have this status.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/employees/statuses/{id}
URL Parameters
Parameter | Description |
---|---|
id | The ID of the employee status to return |
GET: Position End (Termination) Reasons
curl "https://subdomain.talentnest.com/api/v1/position_end_reasons"
-u "TALENTNEST_API_KEY:"
The above returns JSON, structured like this:
{
"position_end_reasons": [
{
"id": 55,
"reason": "Voluntary Termination",
"description": "Voluntary Termination"
},
{
"id": 56,
"reason": "Performance",
"description": "Involuntary Termination"
},
{
"id": 58,
"reason": "Job Abandonment",
"description": "Involuntary Termination"
},
{
"id": 66,
"reason": "Other Employment",
"description": "Voluntary Termination"
},
{
"id": 76,
"reason": "Did Not Like Role",
"description": "Voluntary Termination"
},
{
"id": 88,
"reason": "Medical - Personal or Family",
"description": "Voluntary Termination"
}
]
}
Returns a list of position end (termination) reasons and their associated IDs. If ther are translations, those will be returned as well.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/position_end_reasons
POST: Terminate an Employee
curl -X POST "https://subdomain.talentnest.com/api/v1/employees/{id}/terminate"
-H 'Content-Type: application/json'
-u 'TALENTNEST_API_KEY'
The above command takes a JSON request, structured like this:
{
"position_end_reason_id": 55,
"termination_date": "2020-08-06"
}
The above returns JSON, structured like this:
{
"employee": {
"id": 109125,
"employee_number": null,
"business_unit_id": 257,
"manager_id": null,
"hired_on": "2020-03-23",
"started_on": "2020-03-23",
"verified_on": "2020-03-23",
"termination_date": "2020-08-06",
"user": {
"first_name": "Sam",
"middle_initial": null,
"last_name": "Edwards",
"email": "sedwards@talentnest.com",
"primary_phone": "14167460444",
"location": {
"country": "Canada",
"address": " 3300 Bloor Street West",
"postal": "M8X 2X2",
"state": "Ontario",
"city": "Toronto"
}
},
"current_position": null,
"other_positions": [
{
"id": 2341231,
"status_id": 372,
"job_title": "Outbound Call Center Agent",
"started_on": "2020-03-23",
"ended_on": "2020-08-06",
"position_end_reason_id": 55,
"business_unit_id": 257,
"application_id": 432425
}
]
}
}
Terminates an employee with optional position end (termination) reason and termination date.
HTTP Request
POST https://subodmain.talentnest.com/api/v1/employees/{id}/terminate
URL Parameters
Parameter | Description |
---|---|
id | The ID of the employee to terminate |
JSON Body Parameters
Parameter | Required | Type | Description |
---|---|---|---|
position_end_reason_id | No | Integer | The ID of the position end (termination) reason. |
termination_date | No | Date | The date that the employee was terminated in ISO 8601 format. If a date is not provide, the current date will be used. |
Interacting with the API
Five HTTP verbs are supported by the API: GET
, POST
, PUT
, PATCH
and DELETE
, though not every verb is
accepted by every type of resource.
Verb | Description |
---|---|
GET | Requests a representation of the specified resource; requests using GET can only retrieve data |
POST | Submits data to a new resource |
PUT | Uploads data to an existing resource, overriding the existing data |
PATCH | Applies a partial modification to a resource |
DELETE | Deletes the specified resource |
Response Codes
The HTTP response code can be used to determine if the API request has succeeded. The API returns the following codes with the given circumstances:
Code | Meaning |
---|---|
200 | OK -- Request was successful |
201 | Created -- POST request completed sucessfully |
400 | Bad Request -- The request was invalid or malformed |
401 | Unauthorized -- Your API key is invalid |
403 | Forbidden -- API Authentication failed |
404 | Not Found -- The resource requested does not exist |
405 | Method Not Allowed -- The resource requested does not support the request's HTTP verb |
In all cases other than 401 Unauthorized
, a JSON response will accompany the status code.
For 200 OK
and 201 Created
, the response will contain either the data requested for a GET
request, the data
deleted for a DELETE
request, or the current state of the resource after a POST
, PUT
or PATCH
request.
For all other status codes, the response will contain error details, which includes the error name, error description, and more specific details as applicable.
You should not receive 500 Internal Server Errors
from the API. Please contact TalentNest support if
this occurs.
Webhooks
TalentNest webhooks are events that you can subscribe to. When that event occurs, TalentNest will automatically notify you with a JSON POST
request to a client specified target URL.
To subscribe to an event, contact us at support@talentnest.com.
Available Webhooks
X-Event-Name: applicant_hired
Event | Description |
---|---|
new_application | Notification when a candidate applies to a job. |
applicant_hired | Notification when a candidate job application is hired. |
The name of the event will be sent as the X-Event-Name
header.
Encryption
X-Event-Signature: sha256 417a453d456ff29aabcdd5b68afdfbf8b2d160b8dd4818fdf34dc4940d509703
To compute the HMAC digest in Ruby:
digest = OpenSSL::Digest.new('sha256')
signature = OpenSSL::HMAC.hexdigest(digest, secret_key, body)
To compute the HMAC digest in PHP:
<?php
// Requires PHP >= 5.1.2 and PECL hash >= 1.1
$signature = hash_hmac('sha256', $body, $secret_key);
?>
The reqeusts from TalentNest to your system will be signed. The secret key is assigned when the webhook subscription is created. The algorithm used for creating the signature is HMAC SHA256 on the body of the request and the signature itself is sent as the X-Event-Signature
header.
The X-Event-Signature
header contains: the SHA algorithm used to generate the signature, a space, and the signature. To verify the request came from TalentNest, compute the HMAC digest using your secret key and the body and compare it to the signature portion (after the space) contained in the header. If they match, you can be sure the web hook was sent from TalentNest.
New Application Webhook
{
"application_id": 1765253,
"job": {
"id": 25668,
"name": "Parts Manager - Automotive",
"employment_type": "Full time"
},
"candidate": {
"email": "jj@talentnest.com",
"first_name": "Jake",
"last_name": "Joseph",
"phone": "416-123-5555",
"language_preference": "en",
"location": {
"address": "3300 Bloor Street West",
"city": "Toronto",
"state": "Ontario",
"postal": "M8X 2X3",
"country": "Canada"
}
}
}
The New Application webhook will be sent every time a candidate successfully applies to a job in TalentNest.
Applicant Hired Webhook
{
"employee_id": 3234124,
"employee_number": null,
"business_unit_id": 422342,
"business_unit_name": "Marketing Department",
"job_title": "Manager - Social Media",
"hired_on": "2017-12-12",
"manager_id": 98644,
"first_name": "Samantha",
"last_name": "Murphy",
"email": "samantha.murphy@talentnest.com",
"phone": "416-555-555",
"location": {
"address": "3300 Bloor St. West",
"city": "Toronto",
"state": "Ontario",
"postal": "M8X 2X2",
"country": "Canada"
}
}
The Applicant Hired webhook will be sent every time a job candidate has been successfully hired in TalentNest.