Create and Configure Customer Application

Tip

If you have completed development for Recruiter System Connect, the following steps are similar with minor changes.

Requirements

  • Provide the ability for customer's to enable / disable LinkedIn Easy Apply for all jobs at the account level with LinkedIn's Job Terms & Conditions language.
  • Provide the ability for customer's to enable / disable LinkedIn Easy Apply at the individual job level with LinkedIn's Job Terms & Conditions language.
  • Display ATS Integration Configuration Plugin for LinkedIn Recruiter users to enable Apply Connect widgets and Applicant Notifications.

Provision Customers

The Provisioning API allows you to create API keys for each of your customers, complete configuration details found here. Please note that you will need to store a unique API key and a LinkedIn Developer Application id for each of your customers. For existing customers of Job Postings, Recruiter System Connect, or Apply with LinkedIn you will be using their existing API keys.

Note

All API requests require authorization.

Create Enablement Toggle

In your application’s settings, provide a toggle that allows your customers to opt in or out of LinkedIn Easy Apply for their jobs at both the account / global and individual job level. The following language needs to appear directly next to or below the toggle (in a font size and color that will be noticeable to your customers): "By posting your job to LinkedIn, you agree to LinkedIn’s Jobs Terms & Conditions. Learn more about using LinkedIn Easy Apply". Customers should, by default, be opted in to LinkedIn Easy Apply and the toggle should be readily available to them in an appropriate location within your settings.

Display ATS Integration Configuration Plugin

Display the ATS Integration configuration plugin, this allows LinkedIn Recruiter customers to enable additional features of Apply Connect, including the profile plugin and Applicant Notifications.

<script type="text/javascript" src="https://platform.linkedin.com/xdoor/scripts/in.js">
  api_key: {customer_api_key}
  extensions: ATSIntegrationWidget@https://platform.linkedin.com/rsc/extensions/onboarding-widget
</script>

<script type="IN/ATSIntegrationWidget"
    data-supported-bundled-integration-types="APPLY_CONNECT"
    data-onintegrate="handleIntegrations"
    data-allow-hear-back-signal=true/false
    data-width="{width}">
</script>
<script>
/**
* This callback should:
*   1) Store the customer's integration in your ATS. These values are used throughout the Middleware Platform's API.
*   2) Tell your server to create and configure customer integrations via the Middleware Platform using this data.
* @param {Object[]} integrations
* @param {string} integrations[].integrationContext
* @param {string} integrations[].integrationType
* @param {string} integrations[].tenantType
*/
function handleIntegrations(integrations) {
//Your code here
}
</script>

Integration Enums

The value for data-supported-bundled-integration-types should be based on the integrations as indicated below:

Enum Description Required
APPLY_CONNECT Used for the Apply Connect integrations only Yes

Plugin Load

The plugin will load based on the data-width and data-supported-bundled-integration-types attributes you specify. Use the latter attribute to declare which integrations you support.

Sync Customer Integration

After a customer requests the bundle to configure their integration you will make a sync request to the atsIntegrations endpoint with the provided values.

POST https://api.linkedin.com/v2/atsIntegrations?ids[0].integrationContext={integrationContext}&ids[0].integrationType={integrationType}&ids[0].tenantType={tenantType}&ids[0].dataProvider=ATS

Note

Creating integrations must be done server-side and in real-time.

Please submit batch calls grouped with no more than 100 records and a minimum delay of one-second between calls.

For each id part specified in the request:

  • Use the customer's integration context obtained from the plugin as the value of id[i].integrationContext

The format will be "urn:li:organization:{id}".

  • Use the integration type obtained from the plugin as the value of id[i].integrationType
  • Use the tenant type obtained from the plugin as the value of id[i].tenantType
  • Use "ATS" as the value of id[i].dataProvider

Request Body Fields

Field Description Format Required
integrationName Customer-facing name for the integration. string Yes

Sample Request

Headers:

Authorization: Bearer {token}
x-restli-method: batch_partial_update

Request Body:

{
  "entities": {
    "integrationContext=urn:li:organization:1234&integrationType=APPLY_CONNECT&tenantType=JOBS&dataProvider=ATS": {
      "patch": {
        "$set": {
          "integrationName": "My Customer's LinkedIn Apply Connect Integration"
        }
      }
    }
  }
}

Sample Response

A successful request will return a 200 OK response code, and you will find the status of each entity in the response body.

Sample Response Body

{
    "errors": {},
    "results": {
        "integrationType=APPLY_CONNECT&tenantType=JOBS&dataProvider=ATS&integrationContext=urn%3Ali%3Aorganization%3A1234": {
            "status": 204
        }
    }
}

Note

Be sure to check the response for error statuses corresponding to individual entities you submit.