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",
"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",
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"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
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Unable to find company slug from urn",
"code": "COMPANY_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED"
}
{
"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",
"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",
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"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
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Unable to find company slug from urn",
"code": "COMPANY_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED"
}
{
"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
https://www.linkedin.com/in/usernameurn:li:member:123456789
- Minimum: 1
- Maximum: 50
- Default: 10
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, 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 somebody else’s content
and are never returned here.text, image, document,
article or linkedinVideo.{ "like": 4139, "empathy": 159, "praise": 104 }. Only the types the post
actually received are present, and they sum to reactionCount.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.{
"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",
"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",
"authorType": "Person",
"authorProfileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"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
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "Unable to find company slug from urn",
"code": "COMPANY_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED"
}
{
"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—COMPANY_NOT_FOUND402—QUOTA_EXHAUSTED429—RATE_LIMITED500—INTERNAL_ERROR503—SERVICE_UNAVAILABLE
Notes
count parameter value. Failed requests (errors) do not count against your quota.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)
1 <= x <= 50Not 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.
Response
Successfully fetched posts
Posts on this page. Reposts without commentary are filtered out, 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