curl --request GET \
--url https://api.fetchin.io/api/v1/profile/reactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/profile/reactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.fetchin.io/api/v1/profile/reactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fetchin.io/api/v1/profile/reactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fetchin.io/api/v1/profile/reactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fetchin.io/api/v1/profile/reactions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/profile/reactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"reactions": [
{
"reactionType": "LIKE",
"createdAt": "2026-10-14T16:09:24.638Z",
"activityUrn": "urn:li:activity:7516168292718338048",
"post": {
"id": "urn:li:ugcPost:7515053347670855680",
"shareUrn": "urn:li:ugcPost:7515053347670855680",
"content": "Early treatment can reduce the years spent with severe dementia by about one-third...",
"date": "2026-10-11T14:19:01.024Z",
"reactionCount": 119,
"commentCount": 3,
"sharesCount": 8,
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"name": "Dana P Goldman",
"headline": "Founding Director, USC Schaeffer Institute",
"url": "https://www.linkedin.com/in/danapgoldman",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "article",
"shareUrl": "https://www.linkedin.com/posts/danapgoldman_alzheimer-ugcPost-7515053347670855680-yqWn",
"reactionsByType": { "like": 108, "empathy": 3, "praise": 3, "interest": 3, "appreciation": 2 },
"author": {
"id": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"publicIdentifier": "danapgoldman",
"type": "profile",
"name": "Dana P Goldman",
"url": "https://www.linkedin.com/in/danapgoldman",
"info": "Founding Director, USC Schaeffer Institute"
},
"authorType": "Person",
"authorProfileId": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0"
}
},
{
"reactionType": "LIKE",
"createdAt": "2026-10-16T23:02:02.948Z",
"activityUrn": "urn:li:activity:7516996912328384512",
"post": {
"id": "urn:li:activity:7516616960122617857",
"shareUrn": "urn:li:share:7516616935774666753",
"content": "The Office of Nuclear Energy visited the site of the Kemmerer Unit 1 project today...",
"date": "2026-10-15T21:52:15.283Z",
"reactionCount": 161,
"commentCount": 12,
"sharesCount": 9,
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_company:11474536",
"name": "Office of Nuclear Energy",
"headline": "121,161 followers",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "image",
"author": {
"id": "11474536",
"universalName": "nuclearenergygov",
"type": "company",
"name": "Office of Nuclear Energy",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"info": "121,161 followers",
"followerCount": 121161
},
"authorType": "Company"
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0MDI5Njk4NzAyODU1NjU5NTItMTc2NTAwNTU1NzUzOA==",
"hasMore": true
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Get Profile Reactions
Fetch posts that a professional profile has reacted to
curl --request GET \
--url https://api.fetchin.io/api/v1/profile/reactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/profile/reactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.fetchin.io/api/v1/profile/reactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fetchin.io/api/v1/profile/reactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fetchin.io/api/v1/profile/reactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fetchin.io/api/v1/profile/reactions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/profile/reactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"reactions": [
{
"reactionType": "LIKE",
"createdAt": "2026-10-14T16:09:24.638Z",
"activityUrn": "urn:li:activity:7516168292718338048",
"post": {
"id": "urn:li:ugcPost:7515053347670855680",
"shareUrn": "urn:li:ugcPost:7515053347670855680",
"content": "Early treatment can reduce the years spent with severe dementia by about one-third...",
"date": "2026-10-11T14:19:01.024Z",
"reactionCount": 119,
"commentCount": 3,
"sharesCount": 8,
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"name": "Dana P Goldman",
"headline": "Founding Director, USC Schaeffer Institute",
"url": "https://www.linkedin.com/in/danapgoldman",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "article",
"shareUrl": "https://www.linkedin.com/posts/danapgoldman_alzheimer-ugcPost-7515053347670855680-yqWn",
"reactionsByType": { "like": 108, "empathy": 3, "praise": 3, "interest": 3, "appreciation": 2 },
"author": {
"id": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"publicIdentifier": "danapgoldman",
"type": "profile",
"name": "Dana P Goldman",
"url": "https://www.linkedin.com/in/danapgoldman",
"info": "Founding Director, USC Schaeffer Institute"
},
"authorType": "Person",
"authorProfileId": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0"
}
},
{
"reactionType": "LIKE",
"createdAt": "2026-10-16T23:02:02.948Z",
"activityUrn": "urn:li:activity:7516996912328384512",
"post": {
"id": "urn:li:activity:7516616960122617857",
"shareUrn": "urn:li:share:7516616935774666753",
"content": "The Office of Nuclear Energy visited the site of the Kemmerer Unit 1 project today...",
"date": "2026-10-15T21:52:15.283Z",
"reactionCount": 161,
"commentCount": 12,
"sharesCount": 9,
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_company:11474536",
"name": "Office of Nuclear Energy",
"headline": "121,161 followers",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "image",
"author": {
"id": "11474536",
"universalName": "nuclearenergygov",
"type": "company",
"name": "Office of Nuclear Energy",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"info": "121,161 followers",
"followerCount": 121161
},
"authorType": "Company"
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0MDI5Njk4NzAyODU1NjU5NTItMTc2NTAwNTU1NzUzOA==",
"hasMore": true
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Endpoint
GET /api/v1/profile/reactions
Authentication
Include your API key in the request header:X-API-Key: your-api-key-here
Parameters
- Profile URN, recommended for consistency: a profile’s public identifier (slug) can change over time, the URN does not. Example:
urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc - Public identifier (slug), also fine. Example:
williamhgates - Profile URL. Example:
https://www.linkedin.com/in/williamhgates(a trailing slash makes no difference)
linkedin.com/in/<slug>). Pass just the slug, not the /in/ prefix.Member profiles only: a company page URL or URN is rejected with a 400 error, free of charge.- Minimum: 1
- Maximum: 100
- Default: 10
start is rejected with 400 rather than silently
returning the first page again. Use paginationToken.paginationToken from the previous
response, unchanged; omit it to start from the beginning. A value this API did
not issue is rejected with 400. Keep paging while hasMore is true.Response
Show Reaction object
Show Reaction object
LIKE, EMPATHY (Love), ENTERTAINMENT (Funny), INTEREST (Insightful), PRAISE (Celebrate), APPRECIATION (Support).urn:li:activity:…): the reaction itself
as it appears in the profile’s activity. Not the post’s, which is post.id.GET /api/v1/posts: postType,
author, authorType, authorProfileId, resharedPostUrn (and
resharedPost), shareUrl, reactionsByType, images, video,
mentions, permissions… The fields below are the ones specific to this
endpoint.Show Post object
Show Post object
urn:li:activity:…) when the source
provides it, otherwise its content URN (urn:li:ugcPost:…, the same
value as shareUrn). Always the post itself, never the reaction. Either
form is accepted by GET /api/v1/post/comments and
GET /api/v1/post/reactions.urn:li:share:… or urn:li:ugcPost:…). It is
the same value as on GET /api/v1/posts, so it is the key to match a
post across the two endpoints.createdAt on the reaction.Show Profile object
Show Profile object
urn:li:fsd_profile:<profile id> for a
person, urn:li:fsd_company:<company id> for an organization page
(company, showcase or school).type. Same
object as on GET /api/v1/posts: type (profile or company), id
(the profile id ACoAA… for a person, the numeric company id for a
page), name, url, info, plus publicIdentifier for a person or
universalName for a page.Person when a member published the post, Company when an
organization page did.profileId
returned by Fetch Profile. Absent
when a page published the post; read author.id.resharedPost.
Absent on an original post, so !resharedPostUrn selects originals.Example Request
curl -X GET "https://api.fetchin.io/api/v1/profile/reactions?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates&count=5" \
-H "X-API-Key: your-api-key-here"
const response = await fetch(
'https://api.fetchin.io/api/v1/profile/reactions?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates&count=5',
{
headers: {
'X-API-Key': 'your-api-key-here'
}
}
);
const data = await response.json();
console.log(data.reactions);
import requests
headers = {
'X-API-Key': 'your-api-key-here'
}
params = {
'profileUrlOrUrn': 'https://www.linkedin.com/in/williamhgates',
'count': 5
}
response = requests.get(
'https://api.fetchin.io/api/v1/profile/reactions',
headers=headers,
params=params
)
data = response.json()
print(data['reactions'])
<?php
$apiKey = 'your-api-key-here';
$profileUrl = 'https://www.linkedin.com/in/williamhgates';
$count = 5;
$url = "https://api.fetchin.io/api/v1/profile/reactions?profileUrlOrUrn=" . urlencode($profileUrl) . "&count=" . $count;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: ' . $apiKey
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data['reactions']);
?>
Example Response
{
"reactions": [
{
"reactionType": "LIKE",
"createdAt": "2026-10-14T16:09:24.638Z",
"activityUrn": "urn:li:activity:7516168292718338048",
"post": {
"id": "urn:li:ugcPost:7515053347670855680",
"shareUrn": "urn:li:ugcPost:7515053347670855680",
"content": "Early treatment can reduce the years spent with severe dementia by about one-third...",
"date": "2026-10-11T14:19:01.024Z",
"reactionCount": 119,
"commentCount": 3,
"sharesCount": 8,
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"name": "Dana P Goldman",
"headline": "Founding Director, USC Schaeffer Institute",
"url": "https://www.linkedin.com/in/danapgoldman",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "article",
"shareUrl": "https://www.linkedin.com/posts/danapgoldman_alzheimer-ugcPost-7515053347670855680-yqWn",
"reactionsByType": { "like": 108, "empathy": 3, "praise": 3, "interest": 3, "appreciation": 2 },
"author": {
"id": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0",
"publicIdentifier": "danapgoldman",
"type": "profile",
"name": "Dana P Goldman",
"url": "https://www.linkedin.com/in/danapgoldman",
"info": "Founding Director, USC Schaeffer Institute"
},
"authorType": "Person",
"authorProfileId": "ACoAAAFa9ggBrrsaw5MFpYeJA5EuiV89izxDht0"
}
},
{
"reactionType": "LIKE",
"createdAt": "2026-10-16T23:02:02.948Z",
"activityUrn": "urn:li:activity:7516996912328384512",
"post": {
"id": "urn:li:activity:7516616960122617857",
"shareUrn": "urn:li:share:7516616935774666753",
"content": "The Office of Nuclear Energy visited the site of the Kemmerer Unit 1 project today...",
"date": "2026-10-15T21:52:15.283Z",
"reactionCount": 161,
"commentCount": 12,
"sharesCount": 9,
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_company:11474536",
"name": "Office of Nuclear Energy",
"headline": "121,161 followers",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"postType": "image",
"author": {
"id": "11474536",
"universalName": "nuclearenergygov",
"type": "company",
"name": "Office of Nuclear Energy",
"url": "https://www.linkedin.com/showcase/nuclearenergygov/",
"info": "121,161 followers",
"followerCount": 121161
},
"authorType": "Company"
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0MDI5Njk4NzAyODU1NjU5NTItMTc2NTAwNTU1NzUzOA==",
"hasMore": true
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Errors
See Error Handling for the full list of error codes and recommended handling.400MISSING_PARAMETER/INVALID_PARAMETER/INVALID_URN401INVALID_API_KEY404PROFILE_NOT_FOUND402QUOTA_EXHAUSTED429RATE_LIMITED500INTERNAL_ERROR503SERVICE_UNAVAILABLE
Pagination
To fetch all reactions from a profile, use pagination:- Make an initial request without
paginationToken - If
hasMoreistrue, use the returnedpaginationTokenin your next request - Continue until
hasMoreisfalse
async function fetchAllReactions(profileUrl) {
const allReactions = [];
let paginationToken = null;
let hasMore = true;
while (hasMore) {
const params = new URLSearchParams({
profileUrlOrUrn: profileUrl,
count: '20'
});
if (paginationToken) {
params.set('paginationToken', paginationToken);
}
const response = await fetch(
`https://api.fetchin.io/api/v1/profile/reactions?${params}`,
{ headers: { 'X-API-Key': 'your-api-key-here' } }
);
const data = await response.json();
allReactions.push(...data.reactions);
paginationToken = data.paginationToken;
hasMore = data.hasMore;
}
return allReactions;
}
Reaction Types
| Value | Platform Label | Description |
|---|---|---|
LIKE | Like | Standard like reaction |
EMPATHY | Love | Heart/love reaction |
ENTERTAINMENT | Funny | Laughing face reaction |
INTEREST | Insightful | Lightbulb/insightful reaction |
PRAISE | Celebrate | Clapping/celebrate reaction |
APPRECIATION | Support | Hands/support reaction |
Notes
count parameter value. Errors are free — with one exception: a 404 not found costs 1 credit. See Quotas.createdAt decreases down the page while post.date need not. The post object within each reaction has the same shape as items from GET /api/v1/posts, so you can reuse the same types in your client code. To match a post across the two endpoints, compare shareUrn.paginationToken to efficiently paginate through a profile’s reaction history without re-fetching already retrieved reactions.Use Cases
Competitive intelligence
Interest analysis
Content research
Lead scoring
Authorizations
Query Parameters
The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc), a public identifier/slug (also fine; example williamhgates), or a full profile URL (example https://www.linkedin.com/in/williamhgates; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the /in/ prefix. Member profiles only: a company page URL or URN is rejected with a 400 error, free of charge.
"urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
Number of reactions to fetch (default: 10)
1 <= x <= 100Not supported on this endpoint. This feed is cursor-paginated and ignores offsets, so a non-zero value is rejected with 400 rather than silently returning the first page again. Page with paginationToken instead.
x >= 0Cursor for the next page: pass back the paginationToken from the previous response, unchanged. Omit it to start from the beginning. A value this API did not issue is rejected with 400. Keep paging while hasMore is true.