curl --request GET \
--url https://api.fetchin.io/api/v1/post \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/post"
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/post', 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/post",
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/post"
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/post")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/post")
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{
"id": "urn:li:activity:7524292314127810561",
"shareUrn": "urn:li:ugcPost:7524292224508096512",
"content": "Andrew travels far and wide to sit with families, hear their stories of loss, and document deaths that would otherwise go unreported. What he learns helps save lives.",
"date": "2026-11-06T02:11:22.279Z",
"reactionCount": 2786,
"commentCount": 271,
"sharesCount": 237,
"reactionsByType": {
"like": 2541,
"empathy": 103,
"appreciation": 61,
"praise": 57,
"interest": 23,
"entertainment": 1
},
"postType": "linkedinVideo",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_andrew-travels-far-and-wide-to-sit-with-families-activity-7524292314127810561-j6rb",
"imageUrl": null,
"videoUrl": "https://dms.licdn.com/playlist/vid/v2/...",
"carouselPdfUrl": null,
"images": [],
"video": {
"url": "https://dms.licdn.com/playlist/vid/v2/...",
"duration": 60066,
"thumbnail": "https://media.licdn.com/dms/image/v2/..."
},
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"contentAttributes": [],
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"imageUrl": "https://media.licdn.com/dms/image/v2/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
}
{
"error": "Invalid post URL or URN: 'williamhgates'. Expected urn:li:activity:<id>, urn:li:ugcPost:<id>, urn:li:share:<id> or a post URL.",
"code": "INVALID_URN"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Post not found: 7526000000000000000",
"code": "POST_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 Post
Fetch a single professional post by its URL or URN, with the same fields as Get Posts
curl --request GET \
--url https://api.fetchin.io/api/v1/post \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/post"
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/post', 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/post",
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/post"
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/post")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/post")
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{
"id": "urn:li:activity:7524292314127810561",
"shareUrn": "urn:li:ugcPost:7524292224508096512",
"content": "Andrew travels far and wide to sit with families, hear their stories of loss, and document deaths that would otherwise go unreported. What he learns helps save lives.",
"date": "2026-11-06T02:11:22.279Z",
"reactionCount": 2786,
"commentCount": 271,
"sharesCount": 237,
"reactionsByType": {
"like": 2541,
"empathy": 103,
"appreciation": 61,
"praise": 57,
"interest": 23,
"entertainment": 1
},
"postType": "linkedinVideo",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_andrew-travels-far-and-wide-to-sit-with-families-activity-7524292314127810561-j6rb",
"imageUrl": null,
"videoUrl": "https://dms.licdn.com/playlist/vid/v2/...",
"carouselPdfUrl": null,
"images": [],
"video": {
"url": "https://dms.licdn.com/playlist/vid/v2/...",
"duration": 60066,
"thumbnail": "https://media.licdn.com/dms/image/v2/..."
},
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"contentAttributes": [],
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"imageUrl": "https://media.licdn.com/dms/image/v2/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
}
{
"error": "Invalid post URL or URN: 'williamhgates'. Expected urn:li:activity:<id>, urn:li:ugcPost:<id>, urn:li:share:<id> or a post URL.",
"code": "INVALID_URN"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Post not found: 7526000000000000000",
"code": "POST_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/post
Authentication
Include your API key in the request header:X-API-Key: your-api-key-here
Parameters
- Activity URN:
urn:li:activity:7524292314127810561 - ugcPost or share URN (the
shareUrnof a post):urn:li:ugcPost:7524292224508096512,urn:li:share:7526456101387657217 - Post URL:
https://www.linkedin.com/feed/update/urn:li:activity:7524292314127810561/orhttps://www.linkedin.com/posts/username_post-slug-activity-7524292314127810561-j6rb
id set to its activity
URN. Anything that is not a post URL or URN is rejected with a free 400
INVALID_URN.Response
The post itself (not wrapped in a list), with the same fields as a post returned by Get Posts: see the Post object there for the full reference. The main ones:text, image, document, article, linkedinVideo, job, event,
celebration, or repost (see Reposts).profile shape. profile.urn is
urn:li:fsd_profile:<profileId> for a member and
urn:li:fsd_company:<companyId> for an organization page.ACoAA…), the same value as profileId in
Fetch Profile. Members only: omitted
when an organization page published the post.resharedPostUrn is then set too). Its reactionCount, commentCount and
sharesCount are included when the source provides them, which it usually
does on this endpoint.Reposts
A repost without commentary has an activity URN of its own. Pass it and it comes back exactly as Get Posts returns it withincludeReposts=true: postType is "repost", content is "",
author and profile are the reposter (also named in repostedBy), the item
carries no counts of its own, and the original post is under resharedPost.
A repost with commentary is a post of its own: its text is in content
and the post it quotes is under resharedPost.
Example Request
curl -X GET "https://api.fetchin.io/api/v1/post?postUrlOrUrn=urn:li:activity:7524292314127810561" \
-H "X-API-Key: your-api-key-here"
const params = new URLSearchParams({
postUrlOrUrn: 'https://www.linkedin.com/feed/update/urn:li:activity:7524292314127810561/'
});
const response = await fetch(`https://api.fetchin.io/api/v1/post?${params}`, {
headers: {
'X-API-Key': 'your-api-key-here'
}
});
const post = await response.json();
console.log(post);
import requests
headers = {
'X-API-Key': 'your-api-key-here'
}
params = {
'postUrlOrUrn': 'urn:li:activity:7524292314127810561'
}
response = requests.get(
'https://api.fetchin.io/api/v1/post',
headers=headers,
params=params
)
post = response.json()
print(post)
<?php
$apiKey = 'your-api-key-here';
$postUrlOrUrn = 'urn:li:activity:7524292314127810561';
$url = "https://api.fetchin.io/api/v1/post?postUrlOrUrn=" . urlencode($postUrlOrUrn);
$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);
$post = json_decode($response, true);
curl_close($ch);
print_r($post);
?>
Example Response
Trimmed to the fields documented above; the response carries every field of a Get Posts item.{
"id": "urn:li:activity:7524292314127810561",
"shareUrn": "urn:li:ugcPost:7524292224508096512",
"content": "Andrew travels far and wide to sit with families, hear their stories of loss, and document deaths that would otherwise go unreported. What he learns helps save lives.",
"date": "2026-11-06T02:11:22.279Z",
"reactionCount": 2786,
"commentCount": 271,
"sharesCount": 237,
"reactionsByType": {
"like": 2541,
"empathy": 103,
"appreciation": 61,
"praise": 57,
"interest": 23,
"entertainment": 1
},
"postType": "linkedinVideo",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_andrew-travels-far-and-wide-to-sit-with-families-activity-7524292314127810561-j6rb",
"imageUrl": null,
"videoUrl": "https://dms.licdn.com/playlist/vid/v2/...",
"carouselPdfUrl": null,
"images": [],
"video": {
"url": "https://dms.licdn.com/playlist/vid/v2/...",
"duration": 60066,
"thumbnail": "https://media.licdn.com/dms/image/v2/..."
},
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"contentAttributes": [],
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"url": "https://www.linkedin.com/in/williamhgates?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"imageUrl": "https://media.licdn.com/dms/image/v2/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
}
{
"error": "Invalid post URL or URN: 'williamhgates'. Expected urn:li:activity:<id>, urn:li:ugcPost:<id>, urn:li:share:<id> or a post URL.",
"code": "INVALID_URN"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Post not found: 7526000000000000000",
"code": "POST_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.400—MISSING_PARAMETER,INVALID_URN401—INVALID_API_KEY404—POST_NOT_FOUND: the post does not exist, was deleted, or is not publicly visible402—QUOTA_EXHAUSTED429—RATE_LIMITED500—INTERNAL_ERROR503—SERVICE_UNAVAILABLE
Notes
404 not found costs 1 credit. See Quotas.postUrlOrUrn to
Get Post Comments,
Get Post Reactions or
Get Post Reposts.Query Parameters
Professional post URL or URN: urn:li:activity:<id>, urn:li:ugcPost:<id>, urn:li:share:<id>, or any post URL containing one. All three URNs of a post return the same post, with id set to its activity URN. Anything else is a free 400 INVALID_URN.
"urn:li:activity:7524292314127810561"
Response
The post, as one item of GET /api/v1/posts
Set when the author reshared someone else's post WITH their own commentary: the URN of the quoted post, which is also returned in full as resharedPost. Absent on an original post, so !resharedPostUrn selects originals only. Also set on a repost item (includeReposts=true).
"urn:li:activity:7123456789012345670"
Kind of content attached to the post. 'article' means a link preview card is attached; long-form articles the member published are NOT returned by this endpoint. 'job', 'event' and 'celebration' are shared cards, detailed in the object of the same name. 'repost' is a repost without commentary, returned only with includeReposts=true.
text, image, document, article, linkedinVideo, job, event, celebration, repost "image"
Reaction counts broken down by type. Only the types the post actually received are present, and they sum to reactionCount. Keys: like, praise, empathy, interest, appreciation, entertainment, superLike. Omitted on a repost item, and on a quoted post whose counts the source did not provide.
Show child attributes
Show child attributes
{
"like": 4139,
"empathy": 159,
"praise": 104,
"appreciation": 63,
"interest": 23
}
The quoted post in full, whenever resharedPostUrn is set: the same shape as an item of posts. Its reactionCount, commentCount, sharesCount, reactionsByType and reactionTypeCounts are OMITTED when the source did not provide them - usually the case for a quoted post - never reported as 0.