curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments"
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments', 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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments",
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments"
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments")
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{
"status": "success",
"message": "<string>",
"data": {
"post": {
"id": 123,
"publishingPostId": 123,
"identityId": 123,
"url": "<string>"
},
"answeredBy": 123,
"threads": [
{
"commentId": 123,
"commentUrn": "<string>",
"parentCommentId": 123,
"parentCommentUrn": "<string>",
"author": {
"name": "<string>",
"headline": "<string>",
"profileUrl": "<string>",
"identityId": 123,
"isPostAuthor": true
},
"text": "<string>",
"createdAt": "<string>",
"firstSeenAt": "<string>",
"editedObservedAt": "<string>",
"reactionsCount": 123,
"isDeleted": true,
"isQuestion": true,
"mentionsPostAuthor": true,
"threadUrl": "<string>",
"answered": true,
"queue": {
"state": "OPEN",
"claimedByUserId": 123,
"claimExpiresAt": "<string>",
"resolution": "<string>",
"resolvedAt": "<string>"
},
"replies": [
{
"commentId": 123,
"commentUrn": "<string>",
"parentCommentId": 123,
"parentCommentUrn": "<string>",
"author": {
"name": "<string>",
"headline": "<string>",
"profileUrl": "<string>",
"identityId": 123,
"isPostAuthor": true
},
"text": "<string>",
"createdAt": "<string>",
"firstSeenAt": "<string>",
"editedObservedAt": "<string>",
"reactionsCount": 123,
"isDeleted": true,
"isQuestion": true,
"mentionsPostAuthor": true,
"threadUrl": "<string>"
}
]
}
],
"total": 123,
"nextCursor": "<string>",
"coverage": {
"fetchedAt": "<string>",
"fetchedCount": 123,
"reportedCommentsCount": 123,
"storedCount": 123,
"complete": true,
"stale": true
},
"hiddenByBlocklistCount": 123,
"latestObservedAt": "<string>"
}
}List Social Selling post comments
List the comment threads of a tracked Social Selling post: top-level comments oldest first with their replies nested (LinkedIn threads are one level deep), each with stable ids (commentId, LinkedIn commentUrn, parentCommentId), the author (profile link, whether they are one of your identities or the post author), text, LinkedIn creation time, reactions, deletion state and a threadUrl that opens it on LinkedIn. Comments come from Enginy’s last read of the post on LinkedIn (the daily sync, or sync_social_selling_post_comments), not a live read: check coverage for when that was and whether it was complete. filter=unanswered keeps the threads the answeredBy identity (default: the post author) has not replied to; mentions and questions keep threads naming the author or asking something; since (pass the previous latestObservedAt) keeps threads with something new. Comments by people on your blocklist are left out and counted in hiddenByBlocklistCount. Paginated by thread with cursor/nextCursor. Read-only.
Required scope:
SOCIAL_SELLING_READRate limit: 100 requests per minute
curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments"
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments', 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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments",
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments"
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://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/comments")
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{
"status": "success",
"message": "<string>",
"data": {
"post": {
"id": 123,
"publishingPostId": 123,
"identityId": 123,
"url": "<string>"
},
"answeredBy": 123,
"threads": [
{
"commentId": 123,
"commentUrn": "<string>",
"parentCommentId": 123,
"parentCommentUrn": "<string>",
"author": {
"name": "<string>",
"headline": "<string>",
"profileUrl": "<string>",
"identityId": 123,
"isPostAuthor": true
},
"text": "<string>",
"createdAt": "<string>",
"firstSeenAt": "<string>",
"editedObservedAt": "<string>",
"reactionsCount": 123,
"isDeleted": true,
"isQuestion": true,
"mentionsPostAuthor": true,
"threadUrl": "<string>",
"answered": true,
"queue": {
"state": "OPEN",
"claimedByUserId": 123,
"claimExpiresAt": "<string>",
"resolution": "<string>",
"resolvedAt": "<string>"
},
"replies": [
{
"commentId": 123,
"commentUrn": "<string>",
"parentCommentId": 123,
"parentCommentUrn": "<string>",
"author": {
"name": "<string>",
"headline": "<string>",
"profileUrl": "<string>",
"identityId": 123,
"isPostAuthor": true
},
"text": "<string>",
"createdAt": "<string>",
"firstSeenAt": "<string>",
"editedObservedAt": "<string>",
"reactionsCount": 123,
"isDeleted": true,
"isQuestion": true,
"mentionsPostAuthor": true,
"threadUrl": "<string>"
}
]
}
],
"total": 123,
"nextCursor": "<string>",
"coverage": {
"fetchedAt": "<string>",
"fetchedCount": 123,
"reportedCommentsCount": 123,
"storedCount": 123,
"complete": true,
"stale": true
},
"hiddenByBlocklistCount": 123,
"latestObservedAt": "<string>"
}
}Authorizations
Path Parameters
Tracked post id (id of the posts list).
Query Parameters
unanswered: threads the answeredBy identity has not replied to (no non-deleted reply by it, not resolved or dismissed in the reply queue, not started by it). mentions: threads naming the post author. questions: threads with a question.
all, unanswered, mentions, questions Identity whose replies count as answers for unanswered and answered. Defaults to the post author.
Only threads with a comment or reply Enginy first read after this ISO instant. Pass the previous latestObservedAt to get only what is new.
"2026-10-26T10:00:00Z"
Include comments that disappeared from LinkedIn (marked isDeleted).
nextCursor of the previous page.
1 - 200Threads per page (1–100).
1 <= x <= 100