Profile Associations

The Profile Associations API offers third-party applications the ability to leverage existing LinkedIn profile matches for customers using CRM Sync in their Sales Navigator implementation. Using external identifiers, you can request and use public profile photos and Sales Navigator profile links to enrich the identities of contacts and leads in the external application.

Important

In order to successfully call the Profile Associations API, customers must have CRM Sync enabled. CRM Sync is currently supported for Dynamics 365 and Salesforce.

Profile Associations and CRM Sync

The Profile Associations API provides a public photo URL and the Sales Navigator Profile URL for any member that has been matched in Sales Navigator. Matching occurs via the CRM Sync process, after external CRM records, like leads, contacts and accounts, are ingested and fuzzy matching is performed against the LinkedIn graph to determine matches.

Matches are created with an associated level of confidence using the provided external data. Visit Profile Matching to learn more about matching functionality. Only high confidence matches are returned via API.

Note

Whether profile photos appear in the response is determined by member privacy settings. Only public profile photos are returned.

Making a Request

After records are ingested by CRM Sync, you can make a request to surface matches:

GET https://api.linkedin.com/v2/salesNavigatorProfileAssociations/(partner:MS,instanceId:instance.crm.dynamics.com,recordId:7e0db184-267b-e811-a95e-000d3a30d5db) HTTP/1.1
Authorization: Bearer {ACCESS_TOKEN}
X-Restli-Protocol-Version: 2.0.0

If a match exists for the instanceId, partner, and recordId in the request, you'll receive a JSON response that includes the Sales Navigator profile URL and public profile photo that you can use in your application:

Sample Request Body

{
  "profile": "https://www.linkedin.com/sales/profile/ACwAAAwMJ8gB1ACzMnNA8Sj1P-0J9_pd4mT3eZ4,,?pathWildcard=ACwAAAwMJ8gB1ACzMnNA8Sj1P-0J9_pd4mT3eZ4%2C%2C",
  "member": "urn:li:person:ME6J0dvP9y",
  "profilePhoto": "https://media.licdn.com/mpr/mpr/shrink_200_200/AAIAAQB_AAIAAQAAAAAAAAAgAAAAJGRlOTQ1YmU5LWY1MTQtNDAyZi05ZGM4LWE1YzcwODk1YzdlMw.jpg"
}

The r_sales_nav_profiles permission is required to access /salesNavigatorProfileAssociations. Any OAuth2 token used to make the call must have been granted the r_sales_nav_profiles scope. To learn more about OAuth2, visit our Client Credentials Flow (2-legged OAuth) documentation. To learn more about the Sales Navigator Profile Associations API, see our API Reference.

Error Handling

Requests can return errors for a variety of reasons, and responses will contain HTTP status codes, concise error messages, and service error codes if applicable to help consumers understand the root causes for failures. Your integration should utilize the Error Codes below to ensure you deliver optimal experience.

Error Codes

Response Code Service Error Code Description
400 - Bad request, missing parameter
400 40001 CRM Sync not enabled for this CRM instance.
400 40002 Cannot determine CRM Sync status for this CRM instance.
401 - Unauthorized (typically a result of token expiration)
403 - Application does not have enough access to complete the request. Application may not have the required scope to use the endpoint
404 - Match unavailable
429 - Too many requests. The application is currently being throttled due to high call volume
500 - Unhandled service error

Error Message Response Format

Error responses will be returned in the following response format. The HTTP response code in the response header will also be present in the status field:

{
    "message": "CRM Sync not enabled for this CRM instance.",
    "status": 400,
    "serviceErrorCode": 40002
}