Talentsoft Recruiting Marketplace
Authentication
Everything about authentication and how to get a token
Get an access token as a user.
Implementation of this method by the partner is not required.
Call the /token endpoint. The grant_type must be 'urn:ietf:params:oauth:grant-type:jwt-bearer'. You must provide an assertion with a valid JWT token. The JWT token must contain a iss claim with the client ID provided by Talentsoft. The signature is generated with a client secret exchanged between Talentsoft and the partner. Example :
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJjbGllbnRfaWQiLCJhdWQiOiJodHRwczovL2FwaS5zaXRlLmNvbSIsInN1YiI6IlRhbGVudFNvZnRNYXJrZXRQbGFjZSIsImV4cCI6MTUyMDE4MjEzMCwiaWF0IjoxNTIwMTgwOTMwLCJlbWFpbCI6ImplYW4uZHVwb250QHNpdGUiLCJuYW1lIjoiSmVhbiBEdXBvbnQifQ.PlwMiXNBMqi_GKfa-kN8BLm2zQ6mqMeqGaDRsShZOjA
Response :
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "bearer",
"expires_in": "3600"
}
Get an access token as an application.
Implementation of this method by the partner is required.
Call the /token endpoint. The grant_type must be 'client_credentials'. You must provide a client_id and a client_secret provided by Talentsoft. Example :
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&
client_id=428a51ae-0387-43ab-8c64-cf026f77656f&
client_secret=26a5c010885148d1afe2d535cb3e9ffaacbc714597bb4abdb2a6fca6d16658bf
Response :
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "bearer",
"expires_in": "3600"
}
Use the access token
Authenticated requests must contains the Authorization header with the bearer access token Example :
GET /videos/campaigns HTTP/1.1
Host: api.partner.com
Authorization: Bearer <access_token>
How to identify a user ?
An user is identifiable by his email. In all calls made by a user the HTTP header X-Current-User is added with the user's email address.
If you have implemented the retrieval of an access token per user (with the grant type urn:ietf:params:oauth:grant-type:jwt-bearer) the JWT token payload contains the user's email in the field email. The content of the JWT is not encrypted, it is just encoded in base64, so you can read it without the need for the secret key. The secret key is only used to validate the JWT signature.
token
Get an access token
Call this endpoint to acquire a 'bearer' access token that allows you to perform calls to the APIs. The parameters should be provided in the URL encoded format in the body of the request.
Request
POST /token
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
| *grant_type | The grant type which must be 'urn:ietf:params:oauth:grant-type:jwt-bearer' to authenticate as a user or 'client_credentials' to authenticate as an application. See https://tools.ietf.org/html/rfc7523 |
||
| assertion | Required with urn:ietf:params:oauth:grant-type:jwt-bearer grant type. A JWT token, see https://jwt.io/ The JWT Header must be { "alg": "HS256", "typ": "JWT" } The JWT Payload must be composed of :
Example : The JWT Signature of the encoded header and the encoded payload whith HS256 algorithm and a secret key exchanged between the partner and Talentsoft.
Each part of the JWT token must be encoded in Base64
Example : The partner must verify the validity of the JWT token (signature / issuer / expiration / ...) ! |
||
| client_id | Required with client_credentials grant type. The client id provided by Talentsoft. |
||
| client_secret | Required with client_credentials grant type. The client secret key provided by Talentsoft. |
||
| X-Current-User | The e-mail of the user connected. The header is not always filled in and if it is not present it should not block authentication as an application (for batch or callback where there are no users connected). |
Responses
| Status Code | Type | Description | Samples |
|---|---|---|---|
| 200 |
|
Access token response, see https://tools.ietf.org/html/rfc6749#section-5.1
The access_token must be pass to other call in the Authorization header as Bearer token like |
|
| 400 |
o |
Bad request |
|
| 401 |
o |
Unauthorized |
VideoInterview
VideoInterview API
Assessment
Assessment API
Matching
Matching API DRAFT The purpose of this specification is to define the APIs that the partner must develop to integrate the recruitment matching marketplace. The supported scenarios must be:
- To be able to match candidates on an vacancy
- Be able to match vacancies on a candidate
Partners must index vacancies and candidates (CVs) using Talentsoft's back-office APIs.
candidates
Lists the most appropriate candidates who match an offer.
The goal is to bring up the candidates ordered by score that best correspond to a given offer. When the recruiter arrives on the matching tab of an offer, a request will be sent directly to the partner to list the most appropriate candidates. Afterwards the recruiter can add tags and/or mandatoryTags from the partner or filters on his repository to refine the result.
The value paths in the JSONs are not yet definitive and are provided for information purposes only.
The implementation of filters on Talentsoft data is not mandatory but highly recommended.
Example of query :
https://partner/api/match?language=fr-FR&vacancyReference=2019-hr&tags[]=manager&tags[]=english_fluent&mandatoryTags[]=marketing&applicantType=both&location=48.8534|2.3488|10&experienceLevel[]=beginner&experienceLevel[]=2years&educationLevel[]=bac5&educationLevel[]=bac4&profile[]=manager&profile[]=recruiter&hideApplicantAppliedOnOffer=0&hideApplicantInProgress=0&offset=0&limit=50
Request
GET /matching/candidates?vacancyReference[&language&tags&mandatoryTags&applicantType&location&experienceLevel&educationLevel&profile&hideApplicantAppliedOnOffer&hideApplicantInProgress&onlyApplicantAppliedOnOffer&offset&limit]
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
| *vacancyReference | The reference of the offer on which the matching will be performed. JSON path in the offer detail : $.offerDetail.reference |
||
| language | The language of recruiter. The parameter must be the culture name in the format languagecode2-country. languagecode2 is a lowercase two-letter code derived from ISO 639-1. country is derived from ISO 3166 and usually consists of two uppercase letters. Example : 'fr-FR', 'en-GB', ... |
||
| tags | An array of tag IDs / skills provided by the partner to be able to filter the matching results. Example : tags[]=manager&tags[]=english_fluent |
||
| mandatoryTags | An array of tag IDs / skills provided by the partner to be able to filter the matching results. Example : mandatoryTags[]=manager&mandatoryTags[]=english_fluent |
||
| applicantType | Type of candidates to be reported, candidates, employees or both. By default, candidates and employees will be put back together. The filter is based on Talentsoft data. JSON path in the applicant detail : $.isEmployee |
||
| location | Latitude, longitude and radius in kilometres to filter candidates by location.
The format is |
||
| experienceLevel | Array of experience level ID to return only candidates whose experience level matches at least one of the filter values. The filter is based on Talentsoft data. JSON path in the applicant detail : $.candidateDetail.globalExperience.globalExperienceLevel.id Example : experienceLevel[]=beginner&experienceLevel[]=2years |
||
| educationLevel | Array of level of study ID to return only candidates whose level of study matches at least one of the filter values. The filter is based on Talentsoft data. JSON path in the applicant detail : $.candidateDetail.educations[].educationLevel.id Example : educationLevel[]=bac5&educationLevel[]=bac4 |
||
| profile | Array of job ID to filter candidates whose job matches the job you are looking for. The filter is based on Talentsoft data. JSON path in the applicant detail : $.candidateDetail.positionSought.primaryProfile.id |
||
| hideApplicantAppliedOnOffer | False | Flag to hide candidates who have already applied for the offer. The filter is based on Talentsoft data. JSON path in the applicant detail : $.applications[].vacancyReference |
|
| hideApplicantInProgress | False | Flag to hide candidates who already have an application in progress. The filter is based on Talentsoft data. JSON path in the applicant detail : $.isInProgress |
|
| onlyApplicantAppliedOnOffer | False | Flag to display only candidates who have applied for the offer. The filter is based on Talentsoft data. JSON path in the applicant detail : $.applications[].vacancyReference |
|
| offset | 0 | Index of the first candidate to be returned (0 based, for pagination). |
|
| limit | 50 | Number of candidates to be returned (page size - 50 by default). |
|
| X-Current-User | The e-mail of the user connected. |
Responses
| Status Code | Type | Description | Samples |
|---|---|---|---|
| 200 |
|
The list of candidates sorted by decreasing relevance corresponding to the search. |
Mime type: application/json
|
| 400 |
|
Bad request If the offer reference is missing, the error message must be 'MA01 : The offer reference is missing.' If the offer does not exists, the error message must be 'MA02 : Offer not found.' If the limit exceeds the maximum number of items to be returned, the error message must be 'PA01 : The number of items to be returned exceeds the authorized limit.' |
Mime type: application/json
|
| 401 |
|
Unauthorized If the access token is not present the error message must be 'AE01 : No access token.' If the access token is expired the error message must be 'AE02 : Token expired.' If the access token is invalid the error message must be 'AE03 : Invalid access token.' |
Mime type: application/json
|
Vacancies
Lists the most appropriate vacancies who match an candidate.
The goal is to bring up the vacancies ordered by score that best correspond to a given candidate. When the recruiter arrives on the matching tab of a candidate, a request will be sent directly to the partner to list the most appropriate vacancies. Afterwards the recruiter can add tags and/or mandatoryTags from the partner or filters on his repository to refine the result.
The value paths in the JSONs are not yet definitive and are provided for information purposes only.
The implementation of filters on Talentsoft data is not mandatory but highly recommended.
Example of query :
https://partner/api/offermatch?language=fr-FR&applicantId=328a0cef-32a9-445c-af76-20332f3d259d&tags[]=manager&tags[]=english_fluent&mandatoryTags[]=marketing&location=48.8534|2.3488|10&profile[]=manager&profile[]=recruiter&status[]=_TS_CO_OfferStatus_Valide&status[]=_TS_CO_OfferStatus_Published&contractType=_TS_CO_Contract_CDD&hideApplicantAppliedOnOffer=1&onlyApplicantAppliedOnOffer=0&publishedOnIntranet=0&PublishedOnInternet=1&offset=0&limit=50
Request
GET /matching/vacancies?applicantId[&language&tags&mandatoryTags&location&profile&status&contractType&hideApplicantAppliedOnOffer&onlyApplicantAppliedOnOffer&publishedOnIntranet&publishedOnInternet&offset&limit]
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
| *applicantId | The identifier of the candidate on whom the matching is to be done. JSON path in the applicant detail : $.candidateInformation.id |
||
| language | The language of recruiter. The parameter must be the culture name in the format languagecode2-country. languagecode2 is a lowercase two-letter code derived from ISO 639-1. country is derived from ISO 3166 and usually consists of two uppercase letters. Example : 'fr-FR', 'en-GB', ... |
||
| tags | An array of tag IDs / skills provided by the partner to be able to filter the matching results. Example : tags[]=manager&tags[]=english_fluent |
||
| mandatoryTags | An array of tag IDs / skills provided by the partner to be able to filter the matching results. Example : mandatoryTags[]=manager&mandatoryTags[]=english_fluent |
||
| location | Latitude, longitude and radius in kilometres to filter candidates by location.
The format is |
||
| profile | Array of job ID to filter vacancies whose job matches the job you are looking for. The filter is based on Talentsoft data. JSON path in the offer detail : $.offerDetail.jobDescription.primaryProfile.id |
||
| status | Array of status ID to return only vacancies whose status matches at least one of the filter values. The filter is based on Talentsoft data. JSON path in the offer detail : $.offerDetail.status.id Example : status[]=_TS_CO_OfferStatus_Valide&status[]=_TS_CO_OfferStatus_Published |
||
| contractType | Contract type of the vacancies to be returned. The filter is based on Talentsoft data. JSON path in the offer detail : $.offerDetail.jobDescription.contractType.id |
||
| hideApplicantAppliedOnOffer | Flag to hide vacancies where the candidate has already applied. The filter is based on Talentsoft data. JSON path in the applicant detail : $.applications[].vacancyReference |
||
| onlyApplicantAppliedOnOffer | Flag to return only the vacancies where the candidate has applied. The filter is based on Talentsoft data. JSON path in the applicant detail : $.applications[].vacancyReference |
||
| publishedOnIntranet | Filter to display only vacancies published internally. The filter is based on Talentsoft data. JSON path in the offer detail : $.offerDetail.publishedOnIntranet |
||
| publishedOnInternet | Filter to display only offers published on the Internet. The filter is based on Talentsoft data. JSON path in the offer detail : $.offerDetail.publishedOnInternet |
||
| offset | 0 | Index of the first vacancy to be returned (0 based, for pagination). |
|
| limit | 50 | Number of vacancies to be returned (page size - 50 by default). |
|
| X-Current-User | The e-mail of the user connected. |
Responses
| Status Code | Type | Description | Samples |
|---|---|---|---|
| 200 |
|
The list of vacancies sorted by decreasing relevance corresponding to the search. |
Mime type: application/json
|
| 400 |
|
Bad request If the candidate identifier is missing, the error message must be 'MA03 : The candidate identifier is missing.' If the candidate does not exists, the error message must be 'MA04 : Candidate not found.' If the limit exceeds the maximum number of items to be returned, the error message must be 'PA01 : The number of items to be returned exceeds the authorized limit.' |
Mime type: application/json
|
| 401 |
|
Unauthorized If the access token is not present the error message must be 'AE01 : No access token.' If the access token is expired the error message must be 'AE02 : Token expired.' If the access token is invalid the error message must be 'AE03 : Invalid access token.' |
Mime type: application/json
|
Talentsoft callbacks
API developed by Talentsoft to be notified of status changes.
Definitions
TokenResult
Access token response, see https://tools.ietf.org/html/rfc6749#section-5.1
| Name | Type | Notes |
|---|---|---|
| access_token | string | The access token. |
| token_type | string | The type of the token issued. Must be 'bearer' |
| expires_in | number | The lifetime in seconds of the access token. For example, the value '3600' denotes that the access token will expire in one hour from the time the response was generated. |
oAuthError
Token error response, see https://tools.ietf.org/html/rfc6749#section-5.2
| Name | Type | Notes |
|---|---|---|
| error | string | The error code. Must be 'invalid_grant' if the grant type is 'urn:ietf:params:oauth:grant-type:jwt-bearer' and the JWT token is invalid. Must be 'invalid_request' if the grant type is missing OR the assertion is missing with 'urn:ietf:params:oauth:grant-type:jwt-bearer' grant type OR client id or client secret are missing with 'client_credentials' grant type OR unexpected error. Must be 'unsupported_grant_type' if the grant type is different from 'client_credentials' OR 'urn:ietf:params:oauth:grant-type:jwt-bearer'. Must be 'invalid_client' when client authentication failed. |
| error_description | string | Human-readable text providing additional information, used to assist the client developer in understanding the error that occurred. In the case of 'urn:ietf:params:oauth:grant-type:jwt-bearer' grant type, the standard error messages regarding the reasons the JWT was considered invalid : Standard error messages :
|
ResultMatchingCandidate
| Name | Type | Notes |
|---|---|---|
| code | integer | Contains the HTTP response status code as an integer. |
| status | string | Contains the text: “success”, “fail”, or “error”. Where “fail” is for HTTP status response values from 500-599, “error” is for statuses 400-499, and “success” is for everything else (e.g. 1XX, 2XX and 3XX responses). |
| message | string | Only used for “fail” and “error” statuses to contain the error message. Standard error messages are :
|
| data |
|
The matching result. |
MatchingCandidatesResponse
The matching result.
| Name | Type | Notes |
|---|---|---|
| vacancyReference | string | The reference of the offer on which the matching was performed. JSON path in the offer detail : $.offerDetail.reference |
| tags |
|
The list of partner tags/skills that were applied to the search. |
| suggestedTags |
|
The list of tags/skills suggested by the partner. |
| applicants |
|
The list of candidates corresponding to the matching request sorted by decreasing score. |
| content-range | string | Pagination information in [offset]-[limit]/[total count] format. |
MatchingTag
The list of partner tags/skills that were applied to the search.
| Name | Type | Notes |
|---|---|---|
| id | string | The tag identifier. It is the tag identifier that will be sent as a parameter of the matching request to filter the results. |
| label | string | The label of the tag in the requested language. |
| category | string | The tag category. It is only a label in the requested language that allows to group tags of the same type. |
| isMandatory | boolean | Indicates whether the tag is mandatory for the candidate to appear in the results. |
MatchingApplicant
The list of candidates corresponding to the matching request sorted by decreasing score.
| Name | Type | Notes |
|---|---|---|
| applicant_id | string | The UUID of the candidate. JSON path in the applicant detail : $.candidateInformation.id |
| score | integer | The matching score in % |
| matchingCriterias |
|
The list of criteria that match or not. This information will be used to explain why candidates are present in the result and the relevance of the result. |
| freeInfos | array | An array of strings in the requested language containing free information from the partner. |
MatchingCriteria
The list of criteria that match or not. This information will be used to explain why candidates are present in the result and the relevance of the result.
| Name | Type | Notes |
|---|---|---|
| label | string | The label of the criteria in the requested language. |
| match | boolean | True if the element of the result matches the criteria, false if not. |
| weight | string | Weight of the criteria. |
Result
| Name | Type | Notes |
|---|---|---|
| code | integer | Contains the HTTP response status code as an integer. |
| status | string | Contains the text: “success”, “fail”, or “error”. Where “fail” is for HTTP status response values from 500-599, “error” is for statuses 400-499, and “success” is for everything else (e.g. 1XX, 2XX and 3XX responses). |
| message | string | Only used for “fail” and “error” statuses to contain the error message. Standard error messages are :
|
ResultMatchingVacancies
| Name | Type | Notes |
|---|---|---|
| code | integer | Contains the HTTP response status code as an integer. |
| status | string | Contains the text: “success”, “fail”, or “error”. Where “fail” is for HTTP status response values from 500-599, “error” is for statuses 400-499, and “success” is for everything else (e.g. 1XX, 2XX and 3XX responses). |
| message | string | Only used for “fail” and “error” statuses to contain the error message. Standard error messages are :
|
| data |
|
The matching result. |
MatchingVacanciesResponse
The matching result.
| Name | Type | Notes |
|---|---|---|
| applicant_id | string | The identifier of the candidate on whom the matching was performed. JSON path in the applicant detail : $.candidateInformation.id |
| tags |
|
The list of partner tags/skills that were applied to the search. |
| suggestedTags |
|
The list of tags/skills suggested by the partner. |
| vacancies |
|
The list of candidates corresponding to the matching request sorted by decreasing score. |
| content-range | string | Pagination information in [offset]-[limit]/[total count] format. |
MatchingVacancy
The list of candidates corresponding to the matching request sorted by decreasing score.
| Name | Type | Notes |
|---|---|---|
| vacancyReference | string | The vacancy reference JSON path in the offer detail : $.offerDetail.reference |
| score | integer | The matching score in % |
| matchingCriterias |
|
The list of criteria that match or not. This information will be used to explain why vacancies are present in the result and the relevance of the result. |
| freeInfos | array | An array of strings in the requested language containing free information from the partner. |