Skip to content
Match & Apply
Integration Guide
latest

Career Portal Match Integration Guide🔗

This guide explains how you can offer relevant job suggestions from open vacancies to job seekers, who can then easily apply to one or multiple jobs.

Use case: Match & Apply🔗

A visitor of your Career Portal (the user) is interested in your jobs and wants to know which open positions best match their profile. The user provides CV/résumé via an upload button, and relevant information from their profile is parsed. The system compares the profile with open positions to provide the user with the best matching jobs. Finally, the user can apply with one click.

Recommendations🔗

This guide describes calls to Textkernel web services, which should always be done from the server side. We recommend developing a wrapper or proxy API to handle the requests from the client.

Integration recipe🔗

Textkernel SOAP services and credentials🔗

For the 'match' part of this use case, four Textkernel services and two sets of credentials are needed. All calls are HTTP GET or POST and SOAP is used.

Component Namespace
Search! https://home.textkernel.nl/match-SearchBox3/soap/
Extract! https://home.textkernel.nl/match/soap/extract/

Note: The URL domain (e.g. https://home.textkernel.nl/) may be different for your installation. Please check with your Textkernel consultant.

Furthermore, for the 'apply' part of this use case, there is a need for custom development on the integrating party or customer side for getting the candidate information into the receiving ATS or other system.

Endpoints overview🔗

Component Service Endpoint Credentials
1 Search! Authentication /authentication vacancy environment name and password
2 Search! Match! Query extraction /queryextraction access token
3 Search! Search /v5/search access token
4 Search! Search using queryParts /v5/search access token
5 Extract! CV/resume parsing /extract candidate account, user name and password

1. Search! - Authentication🔗

Request an authentication token for Search!. When Search! returns an error because of an expired access token, it is recommended to first request a new token and then rerun the original search request.

Request🔗

Endpoint: /authentication

Method: authenticate

Parameter name Type Description
environment string identifier of a Search environment
password string password for the Search environment
accessRoles list of strings the access roles to be granted to the user of the token. For this use case, use 'all'
Example🔗
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://home.textkernel.nl/search">
   <soapenv:Header/>
   <soapenv:Body>
      <sear:authenticate>
         <environment>environment-name</environment>
         <password>password</password>
         <accessRoles>all</accessRoles>
      </sear:authenticate>
   </soapenv:Body>
</soapenv:Envelope>
Response🔗

The response only contains the token to access the Search! operations.

Example🔗
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:authenticateResponse xmlns:ns2="http://home.textkernel.nl/search">
         <return>ad13a9c8-3d11-4dca-b4e6-2df758ff485f</return>
      </ns2:authenticateResponse>
   </soap:Body>
</soap:Envelope>

2. Search! - Get Match! Query🔗

Request🔗

Endpoint: /queryextraction

Method: extractFromFileWithToken

Parameter name Type Description
accessToken string access token obtained in step #1
filename string Filename of the document to process
fileContent byte array Binary file content of the document to process encoded in base64
Example🔗
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://home.textkernel.nl/search">
   <soapenv:Header/>
   <soapenv:Body>
      <sear:extractFromFileWithToken>
         <accessToken>accesstoken</accessToken>
         <filename>filename</filename>
         <fileContent>base64encoded-file</fileContent>
      </sear:extractFromFileWithToken>
   </soapenv:Body>
</soapenv:Envelope>
Response🔗

The response contains Match! query to be used in the next step.

Example🔗
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:extractFromFileWithTokenResponse xmlns:ns2="http://home.textkernel.nl/search">
         <return>^vacancytitle:[Credit Analyst] %jobgroupidsonlyrecent:"254" ^city:"US 22201"+50 %langskills:"EN" %langskills:"ES" %experienceyears:>10 %educationlevel_international:"4" %compskills:"Microsoft Word" %compskills:"Power Point" %compskills:"Excel"</return>
      </ns2:extractFromFileWithTokenResponse>
   </soap:Body>
</soap:Envelope>

3. Search! - Search for relevant jobs🔗

Once a Match! query has been obtained, it is possible to retrieve jobs that are relevant to the profile of the candidate.

Request🔗

Endpoint: /search

Method: searchWithToken

Parameter name Type Description
accessToken string access token obtained in step #1
Search! request string Search Request object

Search! Request object

Parameter name Type Description Value for this use case
query string search query Match! query obtained in step #2
searchEngine string Name of the Search repository to use. If empty, the default will be used Your Textkernel consultant will provide you with the right values
resultFields string fields to be returned in the response Your Textkernel consultant will provide you with the right values
suppressFacetCounts boolean When facets are not needed, this field can be false

Note: For more options regarding the Search! Request object options, refer to the Search! documentation.

Example🔗
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://home.textkernel.nl/search">
   <soapenv:Header/>
   <soapenv:Body>
      <sear:searchWithToken>
         <accessToken>ad13a9c8-3d11-4dca-b4e6-2df758ff485f</accessToken>
         <request>
            <query>^vacancytitle:[Credit Analyst] %jobgroupidsonlyrecent:"254" ^city:"US 22201"+50 %langskills:"EN" %langskills:"ES" %experienceyears:>10 %educationlevel_international:"4" %compskills:"Microsoft Word" %compskills:"Power Point" %compskills:"Excel" %"Value Added Resellers" %"financials" %"maintaining those accounts" %"retail" %"setting credit lines" %"Sales and Commerce" %[Sales] %[Commerce]</query>
            <searchEngine>vacancies</searchEngine>
            <resultFields>documentdate</resultFields>
            <resultFields>employer</resultFields>
            <resultFields>city</resultFields>
            <resultFields>contracttype</resultFields>
            <resultFields>vacsnippet</resultFields>
            <suppressFacetCounts>false</suppressFacetCounts>
         </request>
      </sear:searchWithToken>
   </soapenv:Body>
</soapenv:Envelope>
Response🔗

For details on the response, refer to the Search! documentation, section: Object structures, Search Result.

Searching for a specific document🔗

It is also possible to send a document ID to retrieve a specific job. This is helpful when wanting to display the details of a job instead of only a snippet. The structure of the search request is the same, and the document ID can be sent like so:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://home.textkernel.nl/search">
  <soapenv:Header/>
  <soapenv:Body>
     <sear:searchWithToken>
        <accessToken>ad13a9c8-3d11-4dca-b4e6-2df758ff485f</accessToken>
        <request>
            <query>docid:2d243fe59ff14e2e8d9fa348c90ff515</query>
            <searchEngine>vacancies</searchEngine>
            <resultOffset>0</resultOffset>
        </request>
     </sear:searchWithToken>
  </soapenv:Body>
</soapenv:Envelope>

Once a Search! result has been obtained, it is possible to modify individual query parts in order to refine the search and retrieve jobs that are relevant to the profile of the candidate.

Request🔗

Endpoint: /search

Method: searchWithToken

Parameter name Type Description
accessToken string access token obtained in step #1
Search! request string Search Request object

Search! Request object

Parameter name Type Description Value for this use case
queryParts list of QueryPart search query (modified) QueryParts obtained in the response from step #3
searchEngine string Name of the Search repository to use. If empty, the default will be used Your Textkernel consultant will provide you with the right values
resultFields string fields to be returned in the response Your Textkernel consultant will provide you with the right values
suppressFacetCounts boolean When facets are not needed, this field can be false

Note: For more options regarding the Search! Request object options, refer to the Search! documentation.

Example🔗
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://home.textkernel.nl/search">
   <soapenv:Header/>
   <soapenv:Body>
      <sear:searchWithToken>
         <accessToken>ad13a9c8-3d11-4dca-b4e6-2df758ff485f</accessToken>
         <request>
            <queryParts>
               <field>vacancytitle</field>
               <fieldLabel>vacancytitle</fieldLabel>
               <condition>STRONGLY_FAVORED</condition>
               <weight>1.0</weight>
               <items>
                  <value>[Credit Analyst]</value>
                  <label>[Credit Analyst]</label>
               </items>
            </queryParts>
            <queryParts>
               <field>city</field>
               <condition>STRONGLY_FAVORED</condition>
               <weight>1.0</weight>
               <items>
                  <value>US 85483</value>
                  <label>US 85483</label>
               </items>
               <fieldLabel>city</fieldLabel>
            </queryParts>
            <queryParts>
               <field>langskills</field>
               <condition>FAVORED</condition>
               <weight>1.0</weight>
               <items>
                  <value>EN</value>
                  <label>EN</label>
               </items>
               <fieldLabel>langskills</fieldLabel>
            </queryParts>
            <queryParts>
               <field>experienceyears</field>
               <fieldLabel>experienceyears</fieldLabel>
               <condition>FAVORED</condition>
               <weight>1.0</weight>
               <items>
                  <value>>10</value>
                  <label>>10</label>
               </items>
            </queryParts>
            <searchEngine>vacancies</searchEngine>
            <resultFields>documentdate</resultFields>
            <resultFields>employer</resultFields>
            <resultFields>city</resultFields>
            <resultFields>contracttype</resultFields>
            <resultFields>vacsnippet</resultFields>
            <suppressFacetCounts>false</suppressFacetCounts>
            <resultOffset>0</resultOffset>
         </request>
      </sear:searchWithToken>
   </soapenv:Body>
</soapenv:Envelope>
Response🔗

For details on the response, refer to the Search! documentation, sections: Object structures:

  • Search Result

  • QueryPart

  • QueryPartItem

5. Extract! - Parse a CV/resume🔗

Finally, the document that the candidate uploaded can be sent to the Extract! service in order to get structured information from it. This information can then be sent to an ATS or other system. It is the responsibility of the integrating party to handle this part of the workflow.

Request🔗

Endpoint: /extract

Method: extract

Parameter Description Content type
account Extract! account string
username Extract! username string
password Extract! password string
filename The name of the file to be processed string
fileContent The uploaded file encoded in base64 binary
Example🔗
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ext="http://home.textkernel.nl/sourcebox/soap/extract">
   <soapenv:Header/>
   <soapenv:Body>
      <ext:extract>
         <account>accountname</account>
         <username>username</username>
         <password>password</password>
         <fileName>filename</fileName>
         <fileContent>base64content</fileContent>
      </ext:extract>
   </soapenv:Body>
</soapenv:Envelope>
Response🔗
Example🔗
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:extractResponse xmlns:ns2="http://home.textkernel.nl/sourcebox/soap/extract">
         <return><![CDATA[{
             "lang": "english",
             "file": "filename",
             "lastModified": "yyyy-MM-DDTHH:mm",
             "personal": {
              "firstName": "candidatesfirstName",
              "middleName": "candidatesmiddleName",
              "lastName": "candidateslastName",
              "dateOfBirth": "yyyy-MM-DD", 
              [...]
         }]]> 
        </return>
      </ns2:extractResponse>
   </S:Body>
</S:Envelope>

Note: Check with your Textkernel consultant to learn more about the full response format.