Skip to main

API Technical Specs

Learn how to configure and leverage our services to achieve your toughest recruiting needs.
SaaS     |

User Interface

Sovren's AI Matching provides an API to generate a URL that can be used to display our Matching UI. This is the UI that we showcase in our demo and it provides the best experience for using our matching. Below is a list of some of the most important features we deliver in our UI. If you're considering building your own UI, evaluate the features below that you might be missing out on.

If you build you own UI you MUST expose the category weights feature and get your UI approved by Sovren prior to your go-live. If you don't, we reserve the right to make you stop using this software.

Category Weight Sliders

Feature Comparison

FeatureSovren's Matching UIYour UI
Skills auto-complete
Customizable category weights
Real-time ranking updates as weights are changed
Transparency into the match evidence
Bidirectional and category scores
Automatic upgrades including the latest features

UI Overview

The Sovren Matching UI provides the ability for clients to leverage a pre-built user interface for matching and searching. The interface includes forms for users to build custom match/search queries as well as a powerful query results screen. A client application can incorporate this generated UI into an iframe within an existing page, or as a separate page in the application. The generated web page contains all the necessary functionality to perform searching/matching; additionally, you can customize how the UI is generated to some extent to better suit your application. Below is a sample screenshot of the Matching UI:

Matching UI Screenshot

Authentication

Similar to the normal match/search SaaS requests, the Matching UI is authenticated by including you service key in the request headers. Once a specific session is generated, that URL is valid to authenticate once. A client application should redirect a user to the session immediately after generating the session for that user. The Matching UI handles authentication using bearer tokens which are stored in the client's browser. By generating the UI for a specific user and redirecting the user to the session, the UI knows which user to generate an auth token for. The URL is only secure until it is visible to a user, so you should ensure your application automatically makes the request on the user's behalf (i.e. don't make users copy/paste the link). You should not worry about users sharing links; however, as subsequent requests to the URL will require unauthenticated users to login.

Be sure to never reveal your service key to your end users in JavaScript or otherwise. It is perfectly fine for a user to know their auth token; however, as it is encrypted and is analogous to a temporary password for that user in the Sovren Matching UI. Auth tokens should not be shared between users. Ideally, your users would never see the auth token, as it is only stored in the user's browser. Add/remove/modify users in the Sovren Customer Portal.

UI Customization

The Matching UI can be customized by adding your company logo to the top banner. To manage your logo/theme options, visit the Sovren Customer Portal. You can also customize which features are included in the generated UI. See the UIOptions request parameter here for more info.

New Feature! Custom Themes

Now you can pass in a primary color, header color, font style, and specify square/rounded corners when gererating the Matching UI. The colors (and some derivations) will be used to style various UI elements. Any font you specify will be applied to all UI elements. Square or rounded corners will be applied to most UI elements. These basic theme options allow you to make the Matching UI really feel like a integral part of your system. Your users will not be able to tell they are using a third-party tool. See how to use this feature here. Here are some examples:

"Style": {
    "PrimaryColor": "#077799",
    "FontFamily": "Comfortaa",
    "FontUrl": "https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;500;700&display=swap"
}
Generates:
Matching UI Screenshot
"Style": {
    "PrimaryColor": "#a83a3a",
    "HeaderColor": "#999999",
    "FontFamily": "Arial",
    "SquareCorners": true
}
Generates:
Matching UI Screenshot

Hooks

In order to make the Matching UI more useful in your client application, we have added the ability for users to take actions on documents that are found in search/match results. There are two different types of hooks - client-side hooks and server-side hooks. These hooks are defined in the UIOptions.Hooks parameter you pass when you create a Matching UI session (see here).

Client-side Hooks

These hooks simply show a webpage (with a GET request). As an example of a client-side hook, you may want to have a 'Show Contact Info' action in your ATS. You could set up an endpoint in your ATS such as https://my-great-ats.com/info/(resumeId). You could then pass in a client hook as follows:

{
    "LinkText": "Show Contact Info",
    "UrlAction": {
        "Url": "https://my-great-ats.com/hire/{id}",
        "Target": "sovren"
    }
}

This would open a popup within the Matching UI that displays the webpage from your system showing the contact info for whichever resume the user clicked 'Show Contact Info' on. For more information about accepted values for Target, see here.

A client-side hook can either have a UrlAction or a JsAction. A UrlAction can either show a webpage in a popup within the Matching UI, or behave like any normal <a> tag (where the Target could be _blank, etc). A JsAction will send a message via a window.postMessage() that can be received by a JavaScript event listener in your system. Then you could run any Javascript you wanted. Read about window.postMessage() here. For API spefics, see details about how to define a UrlAction or JsAction in a client-side hook.

Here we'll go through an example of how the JsActions work. For this example, we'll assume you are using an iFrame within your system to host the Sovren Matching UI. When you create the session, you pass something like:

{
    "LinkText": "Show MyAts Popup",
    "IsBulk": false,
    "JsAction": {
        "Target": "parent",
        "TargetOrigin": "https://my-great-ats.com/",
        "Data": "show_my_popup"
    }
}

Then, in your system, you would add some JavaScript like the following:

window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
    //be sure to do this check for security purposes
    //if your account is in the EU data center, use https://eu-rest.resumeparsing.com
    if (event.origin.startsWith("https://rest.resumeparsing.com")) {
        //for a non-bulk action
        var docId = event.data.DocumentId;
        var indexId = event.data.IndexId;
        
        //for a bulk action, the following is an array where each item has a DocumentId and an IndexId
        //var documents = event.data.Documents;
  
        var myData = event.data.Data;
         
        if (myData === "show_my_popup") {
            alert(docId); //this alert will show in your system when a user clicks the "Show MyAts Popup" button in the Sovren Matching UI
        }
    }
}

Server-side Hooks

Server-side hooks are intended to perform some action within your system on behalf of a user. They will perform an HTTP POST to whatever URL you provide. You specify them as follows:

{  
    "LinkText": "",
    "Url": "",
    "CustomInfo": {},
    "IsBulk": false
}

When the user clicks the action, a POST will be executed to the given URL. The POST body will look like the following for a non-bulk action:

{  
    "DocumentId": "",
    "IndexId": "",
    "Username": "",
    "CustomInfo": {}
}

The POST body will look like the following for a bulk action:

{  
    "Documents": [
        {
            "DocumentId": "",
            "IndexId": ""
        }
    ],
    "Username": "",
    "CustomInfo": {}
}

The CustomInfo can be any data from your system that you need to associate with the Matching UI session (job id, auth token, etc). When you create a session, you can pass in this information (in whatever object structure you like) in the CustomInfo property of a server-side hook (see here). When a user performs an action via a POST hook, that information is included in the request body shown above. This empowers you to customize your user interaction between your system and our Matching UI.

For POST hooks, your system has the option of responding with a UrlAction or JsAction in the response body. If you do this, the Matching UI will execute that action immediately. The JSON for these is exactly the same as if you were sending the UrlAction or JsAction in as a client-side hook. See here for more information.

Sourcing Hooks

Sourcing hooks are very similar to server-side hooks described above; however, they apply to external job board results. A common use for sourcing hooks is to add documents from external sources, such as job boards, to your ATS.

Sourcing hooks are intended to perform some action within your system on behalf of a user. They will perform an HTTP POST to whatever URL you provide. You specify them as follows:

{  
    "LinkText": "",
    "Url": "",
    "CustomInfo": {}
}

When the user clicks the action, a POST will be executed to the given URL. The POST body will look like the following:

{  
    "JobBoard": "",
    "JobBoardDocumentId": "",
    "SourceText": "",
    "ParsedDocument": "",
    "Username": "",
    "CustomInfo": {}
}

The CustomInfo can be any data from your system that you need to associate with the Matching UI session (job id, auth token, etc). When you create a session, you can pass in this information (in whatever object structure you like) in the CustomInfo property of a sourcing hook (see here). When a user performs an action via a sourcing hook, that information is included in the request body shown above. This empowers you to customize your user interaction between your system and our Matching UI.

For Sourcing hooks, your system has the option of responding with a UrlAction or JsAction in the response body. If you do this, the Matching UI will execute that action immediately. The JSON for these is exactly the same as if you were sending the UrlAction or JsAction in as a client-side hook. See here for more information.

New Feature! OnUpdate Hook

This hook gives you the ability to capture/save when a user makes category weight changes or modifies filter criteria and re-runs the query. You specify the hook as shown below, and the Matching UI will send the category weights and filter criteria in the POST body (or postMessage() data). The full API documentation is here, but we'll give some quick examples below. There are two options for the OnUpdate hook. The first (and probably most common) use-case is specifying a 'Server' hook as follows:

"OnUpdate": {  
    "Server": {
        "Url": "",
        "CustomInfo": {}
    }
}

Whenever a user modifies weights or filter criteria and re-runs the query, an HTTP POST will be made to the given URL with the following body:

{
    "Username": "",
    "PreferredCategoryWeights": {},
    "FilterCriteria": {},
    "CustomInfo": {}
}

The PreferredCategoryWeights property contains the category/weight data. More info can be found here. The FilterCriteria property is an object containing all of the current filters. More info can be found here. The CustomInfo property will contain whatever you passed in when specifying the hook.

The other use-case available to you is simply using window.postMessage() to pass the weights/filters data to your client-side code. This is very similar to how a JsAction works above. The hook would be defined as follows:

"OnUpdate": {  
    "Client": {
        "Target": "",
        "TargetOrigin": "",
        "Data": ""
    }
}

See the section above on JsActions to see what options are available and how to properly handle the postMessage() call in your client-side Javascript. The 'message' sent via postMessage() will contain the FilterCriteria and PreferredCategoryWeights data.