Endorsement API

Note

Usage of this API is restricted to approved partners, subject to limitations via API agreement. All API requests are represented in protocol 2.0.0. Therefore, all API requests require the header X-Restli-Protocol-Version: 2.0.0

With the Endorsement API, you can replicate the full LinkedIn experience around endorsing skills of LinkedIn members.

Create Endorsements

Send an endorsement by issuing a POST that specifies the recipient and his/her skill. You can only send endorsements on behalf of the authenticated user.

POST https://api.linkedin.com/v2/endorsement

Request Body Fields

Field Sub-Field Description Format Required
recipient The recipient entity id Person Urn Yes
item Entity for a recipient that can be endorsed. Yes
nonStandardEntity. entityPhrase The value of the entity skill being endorsed. For example: JAVA String Yes
nonStandardEntity. entityType The type of entity. Always the enum PROFILE_SKILL String Yes
status Status of the Endorsement. Can be the following enum values:
  • ACCEPTED - Should use this state if the skill already exists.
  • PENDING - Should use this state if the skill does NOT exists.
String Yes

sample request body

{
    "item": {
        "nonStandardEntity": {
            "entityPhrase": "JAVA",
            "entityType": "PROFILE_SKILL"
        }
    },
    "recipient": "urn:li:person:123ABC",
    "status": "ACCEPTED"
}

sample response header

X-RestLi-Id: urn:li:endorsement:(urn:li:person:123ABC,123456)

Retrieve Endorsements

Once an endorsement has been created, you can retrieve that endorsement by taking the endorsement URN (urn:li:endorsement:(personUrn,12345)) value returned in the X-RestLi-Id header.

GET https://api.linkedin.com/v2/endorsement/urn:li:endorsement:(urn:li:person:123ABC,123456)

Above is the API request represented in pretty print. With X-Restli-Protocol-Version: 2.0.0, you will need to do the following:

GET https://api.linkedin.com/v2/endorsement/urn%3Ali%3Aendorsement%3A%28urn%3Ali%3Aperson%3A123ABC%2C123456%29

sample response body

{
    "created": 1486746325406,
    "endorser": "urn:li:person:456DEF",
    "id": 123456,
    "item": {
        "nonStandardEntity": {
            "entityPhrase": "Java",
            "entityType": "PROFILE_SKILL"
        }
    },
    "lastModified": 1486746325406,
    "recipient": "urn:li:person:123ABC",
    "status": "ACCEPTED"
}

For more information, refer to the Endorsement schema.

Alternatively, you can lookup multiple endorsements by doing the following:

GET https://api.linkedin.com/v2/endorsement?ids=List(urn:li:endorsement:(urn:li:person:123ABC,123456),urn:li:endorsement:(urn:li:person:123ABC,456789))

Above is the API request represented in pretty print. With X-Restli-Protocol-Version: 2.0.0, you will need to do the following:

GET https://api.linkedin.com/v2/endorsement?ids=List(urn%3Ali%3Aendorsement%3A%28urn%3Ali%3Aperson%3A123ABC%2C123456%29,urn%3Ali%3Aendorsement%3A%28urn%3Ali%3Aperson%3A123ABC%2C456789%29)

Retrieve Endorsements by Endorser

You can look up an endorser's endorsement by requesting the following API:

GET https://api.linkedin.com/v2/endorsement?q=endorser&statusFilters=List(ACCEPTED,PENDING)

Query Parameters

Field Description Required Format
statusFilters Can be of the following endorsement enum status:
  • UNKNOWN - Default State.
  • ACCEPTED - Indicates that the endorsement has been accepted and is currently visible by other members
  • REJECTED - Indicates that the endorsement has been rejected by the member.
  • HIDDEN - Indicates that the endorsement has been hidden by the recipient.
  • PENDING - Indicates that the endorsement is in a pending state and not yet accepted by the recipient.
  • DELETED - Indicates that the endorsement has been deleted by the sender.
  • CLOSED - Indicates that the endorsement has been closed by the member.
Yes List of string

sample response

{
  "elements": [
    {
      "status": "ACCEPTED",
      "created": 1486746325406,
      "lastModified": 1486746325406,
      "endorser": "urn:li:person:456DEF",
      "item": {
        "nonStandardEntity": {
          "entityType": "PROFILE_SKILL",
          "entityPhrase": "Java"
        }
      },
      "recipient": "urn:li:person:123ABC",
      "id": 123456
    },
    {
      "status": "ACCEPTED",
      "created": 1486746325406,
      "lastModified": 1486746325406,
      "endorser": "urn:li:person:456DEF",
      "item": {
        "nonStandardEntity": {
          "entityType": "PROFILE_SKILL",
          "entityPhrase": "C++"
        }
      },
      "recipient": "urn:li:person:123ABC",
      "id": 234567
    },
    ...
  ],
  "paging": {
    "count": 5,
    "start": 5,
    "total": 11,
    "links": [
      {
        "href": "/v2/endorsement?q=endorser&count=5&start=0&statusFilters=List(ACCEPTED)",
        "type": "application/json",
        "rel": "prev"
      },
      {
        "href": "/v2/endorsement?q=endorser&count=5&start=10&statusFilters=List(ACCEPTED)",
        "type": "application/json",
        "rel": "next"
      }
    ]
  }
}

Note

To paginate through all the endorsement data, please use the href link referenced in the paging section.

Due to performance reasons, we recommend fetching 100 elements per request, hence setting count=100. In addition, please disregard the total number since it is incorrect.

Retrieve Endorsements by Recipient

You can look up an endorser's endorsement by requesting the following API:

GET https://api.linkedin.com/v2/endorsement?q=recipient&statusFilters=List(ACCEPTED,PENDING)

Query Parameters

Field Description Required Format
statusFilters Can be of the following endorsement enum status:
  • UNKNOWN - Default State.
  • ACCEPTED - Indicates that the endorsement has been accepted and is currently visible by other members
  • REJECTED - Indicates that the endorsement has been rejected by the member.
  • HIDDEN - Indicates that the endorsement has been hidden by the recipient.
  • PENDING - Indicates that the endorsement is in a pending state and not yet accepted by the recipient.
  • DELETED - Indicates that the endorsement has been deleted by the sender.
  • CLOSED - Indicates that the endorsement has been closed by the member.
Yes List of string

sample response

{
  "elements": [
    {
      "status": "ACCEPTED",
      "created": 1486746325406,
      "lastModified": 1486746325406,
      "endorser": "urn:li:person:456DEF",
      "item": {
        "nonStandardEntity": {
          "entityType": "PROFILE_SKILL",
          "entityPhrase": "Java"
        }
      },
      "recipient": "urn:li:person:123ABC",
      "id": 123456
    },
    {
      "status": "ACCEPTED",
      "created": 1486746325406,
      "lastModified": 1486746325406,
      "endorser": "urn:li:person:456DEF",
      "item": {
        "nonStandardEntity": {
          "entityType": "PROFILE_SKILL",
          "entityPhrase": "C++"
        }
      },
      "recipient": "urn:li:person:123ABC",
      "id": 234567
    },
    ...
  ],
  "paging": {
    "count": 5,
    "start": 5,
    "total": 11,
    "links": [
      {
        "href": "/v2/endorsement?q=recipient&count=5&start=0&statusFilters=List(ACCEPTED)",
        "type": "application/json",
        "rel": "prev"
      },
      {
        "href": "/v2/endorsement?q=recipient&count=5&start=10&statusFilters=List(ACCEPTED)",
        "type": "application/json",
        "rel": "next"
      }
    ]
  }
}

Note

To paginate through all the endorsement data, please use the href link referenced in the paging section.

Due to performance reasons, we recommend fetching 100 elements per request, hence setting count=100. In addition, please disregard the total number since it is incorrect.

Update Endorsements

You can update an endorsement status of one you have given or received by doing the following:

POST https://api.linkedin.com/v2/endorsement/urn:li:endorsement:(urn:li:person:123ABC,123456)

Above is the API request represented in pretty print. With X-Restli-Protocol-Version: 2.0.0, you will need to do the following:

POST https://api.linkedin.com/v2/endorsement/urn%3Ali%3Aendorsement%3A%28urn%3Ali%3Aperson%3A123ABC%2C123456%29

sample request

{
    "patch": {
        "$set": {
            "status": "HIDDEN"
        }
    }
}

The only field that can be updated is the status. The updated status can only be ACCEPTED, HIDDEN, or REJECTED for the recipient. The endorser can only update the status to DELETED (unendorse action). The partial update will not succeed for any other type of updates.