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
}