curl --request GET \
--url https://api.fetchin.io/api/v1/posts \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/posts"
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/posts', 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/posts",
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/posts"
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/posts")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/posts")
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{
"posts": [
{
"id": "urn:li:activity:7486820978292072449",
"shareUrn": "urn:li:ugcPost:7486820977411145728",
"content": "My time in Rwanda reminded me how much progress is possible when innovation reaches the people who need it most...",
"date": "2026-07-25T16:33:39.632Z",
"reactionCount": 4490,
"commentCount": 425,
"sharesCount": 230,
"reactionsByType": {
"like": 4139,
"empathy": 159,
"praise": 104,
"appreciation": 63,
"interest": 23
},
"postType": "image",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_my-time-in-rwanda-...",
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"images": [
{
"url": "https://media.licdn.com/dms/image/...",
"width": 2048,
"height": 1365
}
],
"video": null,
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [
{
"type": "company",
"id": "1563",
"universalName": "gates-foundation",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
],
"contentAttributes": [
{
"start": 120,
"length": 16,
"type": "COMPANY_NAME",
"company": {
"id": "1563",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
}
],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
},
{
"id": "urn:li:activity:7489894675928027136",
"shareUrn": "urn:li:share:7489894675324166145",
"content": "I'll raise a glass for lower emissions.",
"date": "2026-08-03T04:07:26.255Z",
"reactionCount": 1064,
"commentCount": 140,
"sharesCount": 51,
"reactionsByType": {
"like": 938,
"praise": 46,
"interest": 35,
"empathy": 27,
"appreciation": 13
},
"postType": "text",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_...",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"images": [],
"video": null,
"resharedPostUrn": "urn:li:activity:7486499153456369664",
"resharedPost": {
"id": "urn:li:activity:7486499153456369664",
"shareUrn": "urn:li:share:7486499152613302272",
"content": "Our new report on cutting emissions from cement and steel is out today...",
"date": "2026-07-24T19:14:53.120Z",
"postType": "text",
"author": {
"id": "40896",
"universalName": "breakthrough-energy",
"type": "company",
"name": "Breakthrough Energy",
"url": "https://www.linkedin.com/company/breakthrough-energy/",
"info": "412,880 followers",
"followerCount": 412880
},
"mentions": []
},
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": false
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0ODk4OTQ2NzU5MjgwMjcxMzY=",
"hasMore": true,
"pageSize": 10
}
{
"posts": [
{
"id": "urn:li:activity:7491203348811735040",
"shareUrn": "",
"entityId": "7491203348811735040",
"content": "",
"date": "2026-08-07T09:12:40.517Z",
"postType": "repost",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "",
"url": "https://www.linkedin.com/in/williamhgates",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates",
"info": ""
},
"repostedBy": {
"name": "Bill Gates",
"publicIdentifier": "williamhgates",
"url": "https://www.linkedin.com/in/williamhgates"
},
"resharedPostUrn": "urn:li:ugcPost:7490877120461164544",
"resharedPost": {
"id": "urn:li:ugcPost:7490877120461164544",
"shareUrn": "urn:li:ugcPost:7490877120461164544",
"content": "Malaria deaths fell again last year. Here is what made the difference...",
"date": "2026-08-06T11:36:21.904Z",
"reactionCount": 2210,
"commentCount": 96,
"sharesCount": 140,
"reactionsByType": { "like": 1904, "praise": 201, "empathy": 105 },
"postType": "image",
"author": {
"id": "1563",
"universalName": "gates-foundation",
"type": "company",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/",
"info": "1,204,331 followers",
"followerCount": 1204331
},
"mentions": []
},
"mentions": []
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0OTEyMDMzNDg4MTE3MzUwNDA=",
"hasMore": true,
"pageSize": 10
}
{
"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 Posts
Fetch posts from a professional profile with engagement metrics
curl --request GET \
--url https://api.fetchin.io/api/v1/posts \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/posts"
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/posts', 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/posts",
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/posts"
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/posts")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/posts")
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{
"posts": [
{
"id": "urn:li:activity:7486820978292072449",
"shareUrn": "urn:li:ugcPost:7486820977411145728",
"content": "My time in Rwanda reminded me how much progress is possible when innovation reaches the people who need it most...",
"date": "2026-07-25T16:33:39.632Z",
"reactionCount": 4490,
"commentCount": 425,
"sharesCount": 230,
"reactionsByType": {
"like": 4139,
"empathy": 159,
"praise": 104,
"appreciation": 63,
"interest": 23
},
"postType": "image",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_my-time-in-rwanda-...",
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"images": [
{
"url": "https://media.licdn.com/dms/image/...",
"width": 2048,
"height": 1365
}
],
"video": null,
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [
{
"type": "company",
"id": "1563",
"universalName": "gates-foundation",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
],
"contentAttributes": [
{
"start": 120,
"length": 16,
"type": "COMPANY_NAME",
"company": {
"id": "1563",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
}
],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
},
{
"id": "urn:li:activity:7489894675928027136",
"shareUrn": "urn:li:share:7489894675324166145",
"content": "I'll raise a glass for lower emissions.",
"date": "2026-08-03T04:07:26.255Z",
"reactionCount": 1064,
"commentCount": 140,
"sharesCount": 51,
"reactionsByType": {
"like": 938,
"praise": 46,
"interest": 35,
"empathy": 27,
"appreciation": 13
},
"postType": "text",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_...",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"images": [],
"video": null,
"resharedPostUrn": "urn:li:activity:7486499153456369664",
"resharedPost": {
"id": "urn:li:activity:7486499153456369664",
"shareUrn": "urn:li:share:7486499152613302272",
"content": "Our new report on cutting emissions from cement and steel is out today...",
"date": "2026-07-24T19:14:53.120Z",
"postType": "text",
"author": {
"id": "40896",
"universalName": "breakthrough-energy",
"type": "company",
"name": "Breakthrough Energy",
"url": "https://www.linkedin.com/company/breakthrough-energy/",
"info": "412,880 followers",
"followerCount": 412880
},
"mentions": []
},
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": false
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0ODk4OTQ2NzU5MjgwMjcxMzY=",
"hasMore": true,
"pageSize": 10
}
{
"posts": [
{
"id": "urn:li:activity:7491203348811735040",
"shareUrn": "",
"entityId": "7491203348811735040",
"content": "",
"date": "2026-08-07T09:12:40.517Z",
"postType": "repost",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "",
"url": "https://www.linkedin.com/in/williamhgates",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates",
"info": ""
},
"repostedBy": {
"name": "Bill Gates",
"publicIdentifier": "williamhgates",
"url": "https://www.linkedin.com/in/williamhgates"
},
"resharedPostUrn": "urn:li:ugcPost:7490877120461164544",
"resharedPost": {
"id": "urn:li:ugcPost:7490877120461164544",
"shareUrn": "urn:li:ugcPost:7490877120461164544",
"content": "Malaria deaths fell again last year. Here is what made the difference...",
"date": "2026-08-06T11:36:21.904Z",
"reactionCount": 2210,
"commentCount": 96,
"sharesCount": 140,
"reactionsByType": { "like": 1904, "praise": 201, "empathy": 105 },
"postType": "image",
"author": {
"id": "1563",
"universalName": "gates-foundation",
"type": "company",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/",
"info": "1,204,331 followers",
"followerCount": 1204331
},
"mentions": []
},
"mentions": []
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0OTEyMDMzNDg4MTE3MzUwNDA=",
"hasMore": true,
"pageSize": 10
}
{
"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/posts
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.- Minimum: 1 —
0or a negative value is rejected with400 - Maximum: 100 — a higher value is clamped, not rejected
- Default: 10
resharedPost — the same shape a quote repost has:postTypeis"repost",idis the repost’s own activity URN anddateis when it was reposted;contentis"", and the item carries no counts of its own (reactionCount,commentCount,sharesCountandreactionsByTypeare omitted);authorandprofileare the reposting profile, whichrepostedBynames too;resharedPostis the original post, with its own author, text, media and counts.
true / false
(or 1 / 0); any other value is a free 400. The price does not change.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.start is rejected with 400 rather than silently
returning the first page again. Use paginationToken.Pagination
Request the first page withoutpaginationToken, then pass the token from each
response into the next request. Stop when hasMore is false.
The feed also carries reposts, which are filtered out of posts unless you pass
includeReposts=true, so a page can contain fewer posts than you asked for while
more still remain — always trust hasMore rather than the number of items
returned.
Response
Show Post object
Show Post object
urn:li:activity:...).urn:li:share:... or urn:li:ugcPost:... depending on post type). References the same post as id but in a different URN namespace.content holds
the author’s own text. Absent on an original post, so !resharedPostUrn
selects originals only.Posts the profile reshared without commentary are not returned unless you
pass includeReposts=true; they then come back with postType: "repost"
and resharedPostUrn set as well.resharedPostUrn is set: the same
shape as a post on this page (its own id, date, content, author,
media, mentions…). Its reactionCount, commentCount, sharesCount,
reactionsByType and reactionTypeCounts are omitted when the source did
not provide them, which is usually the case for a quoted post — never
reported as 0.postType: "repost" item: who reposted, as name, url and
publicIdentifier (a person) or universalName (a page).text, image, document,
article, linkedinVideo, job (a shared job, see job), event (a
shared event, see event), celebration (see celebration), or repost
(only with includeReposts=true).Posts with no text of their own are included, so expect content to be
"" on a caption-less image, video or document post and read postType to
tell them apart.article means the post has a link preview card attached. Long-form
articles the member published are not returned by this endpoint and are
not what this value reports; a link share only appears here when the member
wrote something alongside it.postType: "job": id, url, title, companyName,
companyId, companyUrl, location and companyLogoUrl, each present
when the card carries it.postType: "event": id, name, dateText,
location, url and bannerUrl. dateText is the date line exactly as
displayed, time zone included — e.g. "Sun, Sep 6, 5:30 AM - 6:30 AM UTC".
No timestamp is available for the event.postType: "celebration": headline, subtitle
and imageUrl, each present when the card carries it.- A person:
{ type: "person", id, publicIdentifier, firstName, lastName, name, url }, whereidis the profile id (ACoAA…). - A company:
{ type: "company", id, universalName, name, url }, whereidis the numeric company id.
start and length (an offset into content) and a type such as
COMPANY_NAME, PROFILE_MENTION, HASHTAG or HYPERLINK. A
COMPANY_NAME range carries the resolved company (id, name, url), a
PROFILE_MENTION the resolved profile (id, firstName, lastName,
url, publicIdentifier), a link its hyperlink.type. On a
repost item it is the reposting profile; inside resharedPost, the
original author.Show Author object
Show Author object
profile or company.ACoAA…) for a person, the numeric company id for a page./posts
suffix)."29,282,565 followers"), as the feed renders it.info states, as a number./in/ prefix.url, width, height), largest rendition.{ "like": 4139, "empathy": 159, "praise": 104 }. Only the types the post
actually received are present, and they sum to reactionCount. Keys:
like, praise, empathy, interest, appreciation, entertainment,
superLike.url, width, height). Empty
for posts without images. imageUrl is the first entry, kept for
backward compatibility.null. Holds url, duration
(milliseconds), thumbnail and progressiveStreams (the available
bitrate/resolution renditions). videoUrl mirrors video.url.profileId returned by
Fetch Profile, so posts can be joined
to profiles.Person when a member published the post, Company when an organization
page did.canReact, canPostComments,
canShare, commentingDisabled, allowedCommentersScope,
shareAudience, isActivity, rootShare (false when the post quotes
another one).paginationToken to fetch the next page.true — see Pagination.count this page was requested with.Example Request
curl -X GET "https://api.fetchin.io/api/v1/posts?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/posts?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates&count=5',
{
headers: {
'X-API-Key': 'your-api-key-here'
}
}
);
const posts = await response.json();
console.log(posts);
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/posts',
headers=headers,
params=params
)
posts = response.json()
print(posts)
<?php
$apiKey = 'your-api-key-here';
$profileUrl = 'https://www.linkedin.com/in/williamhgates';
$count = 5;
$url = "https://api.fetchin.io/api/v1/posts?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);
$posts = json_decode($response, true);
curl_close($ch);
print_r($posts);
?>
Example Response
Posts come back in a page object, not a bare array. The second tab shows a repost without commentary, as returned withincludeReposts=true (trimmed to the
fields that differ from an ordinary post).
{
"posts": [
{
"id": "urn:li:activity:7486820978292072449",
"shareUrn": "urn:li:ugcPost:7486820977411145728",
"content": "My time in Rwanda reminded me how much progress is possible when innovation reaches the people who need it most...",
"date": "2026-07-25T16:33:39.632Z",
"reactionCount": 4490,
"commentCount": 425,
"sharesCount": 230,
"reactionsByType": {
"like": 4139,
"empathy": 159,
"praise": 104,
"appreciation": 63,
"interest": 23
},
"postType": "image",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_my-time-in-rwanda-...",
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrl": null,
"carouselPdfUrl": null,
"images": [
{
"url": "https://media.licdn.com/dms/image/...",
"width": 2048,
"height": 1365
}
],
"video": null,
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [
{
"type": "company",
"id": "1563",
"universalName": "gates-foundation",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
],
"contentAttributes": [
{
"start": 120,
"length": 16,
"type": "COMPANY_NAME",
"company": {
"id": "1563",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
}
}
],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": true
}
},
{
"id": "urn:li:activity:7489894675928027136",
"shareUrn": "urn:li:share:7489894675324166145",
"content": "I'll raise a glass for lower emissions.",
"date": "2026-08-03T04:07:26.255Z",
"reactionCount": 1064,
"commentCount": 140,
"sharesCount": 51,
"reactionsByType": {
"like": 938,
"praise": 46,
"interest": 35,
"empathy": 27,
"appreciation": 13
},
"postType": "text",
"shareUrl": "https://www.linkedin.com/posts/williamhgates_...",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"images": [],
"video": null,
"resharedPostUrn": "urn:li:activity:7486499153456369664",
"resharedPost": {
"id": "urn:li:activity:7486499153456369664",
"shareUrn": "urn:li:share:7486499152613302272",
"content": "Our new report on cutting emissions from cement and steel is out today...",
"date": "2026-07-24T19:14:53.120Z",
"postType": "text",
"author": {
"id": "40896",
"universalName": "breakthrough-energy",
"type": "company",
"name": "Breakthrough Energy",
"url": "https://www.linkedin.com/company/breakthrough-energy/",
"info": "412,880 followers",
"followerCount": 412880
},
"mentions": []
},
"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",
"info": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"numericId": "251749025"
},
"mentions": [],
"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",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"permissions": {
"canReact": true,
"canPostComments": true,
"canShare": true,
"commentingDisabled": false,
"allowedCommentersScope": "ALL",
"shareAudience": "PUBLIC",
"isActivity": false,
"rootShare": false
}
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0ODk4OTQ2NzU5MjgwMjcxMzY=",
"hasMore": true,
"pageSize": 10
}
{
"posts": [
{
"id": "urn:li:activity:7491203348811735040",
"shareUrn": "",
"entityId": "7491203348811735040",
"content": "",
"date": "2026-08-07T09:12:40.517Z",
"postType": "repost",
"imageUrl": null,
"videoUrl": null,
"carouselPdfUrl": null,
"profile": {
"urn": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"name": "Bill Gates",
"headline": "",
"url": "https://www.linkedin.com/in/williamhgates",
"imageUrl": "https://media.licdn.com/dms/image/..."
},
"author": {
"id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"publicIdentifier": "williamhgates",
"type": "profile",
"name": "Bill Gates",
"url": "https://www.linkedin.com/in/williamhgates",
"info": ""
},
"repostedBy": {
"name": "Bill Gates",
"publicIdentifier": "williamhgates",
"url": "https://www.linkedin.com/in/williamhgates"
},
"resharedPostUrn": "urn:li:ugcPost:7490877120461164544",
"resharedPost": {
"id": "urn:li:ugcPost:7490877120461164544",
"shareUrn": "urn:li:ugcPost:7490877120461164544",
"content": "Malaria deaths fell again last year. Here is what made the difference...",
"date": "2026-08-06T11:36:21.904Z",
"reactionCount": 2210,
"commentCount": 96,
"sharesCount": 140,
"reactionsByType": { "like": 1904, "praise": 201, "empathy": 105 },
"postType": "image",
"author": {
"id": "1563",
"universalName": "gates-foundation",
"type": "company",
"name": "Gates Foundation",
"url": "https://www.linkedin.com/company/gates-foundation/",
"info": "1,204,331 followers",
"followerCount": 1204331
},
"mentions": []
},
"mentions": []
}
],
"paginationToken": "dXJuOmxpOmFjdGl2aXR5Ojc0OTEyMDMzNDg4MTE3MzUwNDA=",
"hasMore": true,
"pageSize": 10
}
{
"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.400—MISSING_PARAMETER/INVALID_PARAMETER/INVALID_URN401—INVALID_API_KEY404—PROFILE_NOT_FOUND/COMPANY_NOT_FOUND402—QUOTA_EXHAUSTED429—RATE_LIMITED500—INTERNAL_ERROR503—SERVICE_UNAVAILABLE
Notes
count parameter value. Errors are free — with one exception: a 404 not found costs 1 credit. See Quotas.companyUrlOrUrn as Get Company
and so accepts a company name on its own.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.
"urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
Number of posts to fetch (default: 10). A higher value is clamped to 100; 0 or a negative value is a 400.
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.
Also return the reposts WITHOUT commentary, which are otherwise filtered out. Each one comes back as the repost itself: postType: "repost", id = the repost's own activity URN, date = when it was reposted, content = "", no counts of its own (reactionCount, commentCount, sharesCount, reactionsByType omitted), the reposting profile or page as author and profile, repostedBy, and the original post nested under resharedPost with its own counts - the same shape a quote repost has. Collaborative posts are also returned when this is on. Accepts true/false (or 1/0); any other value is a free 400. The price does not change.
Response
Successfully fetched posts
Posts on this page. Reposts without commentary are filtered out unless includeReposts=true, so a page can hold fewer items than count while more remain — trust hasMore.
Show child attributes
Show child attributes
Cursor to pass back as paginationToken to fetch the next page.
"dXJuOmxpOmFjdGl2aXR5Ojc0ODk4OTQ2NzU5MjgwMjcxMzY="
Whether the feed holds more posts behind this page. Keep paging while true.
The count this page was requested with.
10