> **For coding agents and LLMs:** This is one page from the Social Fetch docs (markdown export). For curated orientation and workflow guidance, start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for agent onboarding and crawl rules, use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for the full endpoint list with links to pages like this one, use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt); for one platform's parameters and curls, use [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt); use [`/llms.json`](https://www.socialfetch.dev/llms.json) when you need structured JSON for tool registration.

## This page

- **On-site (HTML):** [https://www.socialfetch.dev/docs/api/v2/linkedin/people/entityId/comments/get](https://www.socialfetch.dev/docs/api/v2/linkedin/people/entityId/comments/get)
- **Markdown (.mdx) URL:** [https://www.socialfetch.dev/docs/api/v2/linkedin/people/entityId/comments/get.mdx](https://www.socialfetch.dev/docs/api/v2/linkedin/people/entityId/comments/get.mdx)

## API base URL and authentication

- **API origin (from OpenAPI `servers`):** `https://api.socialfetch.dev`
- **Authentication:** send `x-api-key: sfk_...` on `/v1/**` and `/v2/**` routes unless the operation is explicitly anonymous (check OpenAPI `security`, the [API reference hub](https://www.socialfetch.dev/docs/api.mdx), [`/llms.txt`](https://www.socialfetch.dev/llms.txt), or [`/llms.json`](https://www.socialfetch.dev/llms.json) for each route).
- **OpenAPI JSON:** [https://www.socialfetch.dev/openapi.json](https://www.socialfetch.dev/openapi.json)

## Recommended docs entrypoints (this site)

- [Documentation overview](https://www.socialfetch.dev/docs.mdx) — top-level orientation (markdown).
- [Quickstart](https://www.socialfetch.dev/docs/quickstart.mdx) — authenticate with `x-api-key`, validate auth with `whoami`, and understand the JSON envelope.
- [SDK](https://www.socialfetch.dev/docs/sdk.mdx) — official TypeScript SDK guide, including `SocialFetchClient`, `Result`, and `unwrap()`.
- [Capability matrix](https://www.socialfetch.dev/docs/capability-matrix.mdx) — every operation with identifiers, pagination, outcomes, media download, credits, and its SDK method. Generated from OpenAPI, so use it for route selection instead of scanning individual pages.
- [Recipes](https://www.socialfetch.dev/docs/recipes.mdx) — copyable workflows (brand monitoring, transcripts, Ad Library, creator scoring, Reddit research) with credit callouts and SDK examples.
- [Integrations](https://www.socialfetch.dev/docs/integrations.mdx) — MCP for AI clients, n8n verified node, Apify Store Actors, Make custom app, SDK, and REST API connection paths.
- [MCP product page](https://www.socialfetch.dev/mcp) — hosted MCP overview, OAuth, Skills install.
- [MCP integration](https://www.socialfetch.dev/docs/integrations/mcp.mdx) — hosted `/mcp` server, OAuth, Cursor/VS Code/Claude install snippets, 232 endpoint tools, plus docs_search/docs_read for implementation help.
- [n8n integration](https://www.socialfetch.dev/docs/integrations/n8n.mdx) — install `n8n-nodes-socialfetch`, credentials, and workflow examples.
- [Apify integration](https://www.socialfetch.dev/docs/integrations/apify.mdx) — Store Actors under @social-fetch, PPE billing, dataset export, and quick start.
- [Make integration](https://www.socialfetch.dev/docs/integrations/make.mdx) — custom app modules for Make scenarios, API key credentials, and module catalog.
- [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt) — every documented operation with a direct link to that route's agent-readable markdown page (prefer this over parsing OpenAPI).
- [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt) — per-platform endpoint files generated from OpenAPI (parameters, credits, curls).
- [`/agents.txt`](https://www.socialfetch.dev/agents.txt) — agent crawl/onboarding file with capabilities, auth rules, and allowlist.
- [`/llms.json`](https://www.socialfetch.dev/llms.json) — structured machine-readable operation inventory with parameter names, pagination, outcomes, credits, and SDK mapping.
- [API reference hub](https://www.socialfetch.dev/docs/api.mdx) — human-friendly index of operations with links into generated pages.
- [Errors](https://www.socialfetch.dev/docs/errors.mdx) — shared error envelope and HTTP status guidance.
- [Credits](https://www.socialfetch.dev/docs/credits.mdx) — metering, `402`, and planning batch jobs.
- Outcome semantics such as `found`, `not_found`, and `private` are documented in [Errors](https://www.socialfetch.dev/docs/errors.mdx) and on operation pages when present in the OpenAPI contract.

## Markdown docs convention

- Every docs page has a markdown twin: append **`.mdx`** to the docs pathname (for example `/docs/quickstart` → `/docs/quickstart.mdx`).
- Agents that send `Accept: text/markdown` on `/docs/**` HTML URLs may receive markdown directly (same URL, `Vary: Accept`).
- Published blog posts use the same convention: `/blog/{slug}` → `/blog/{slug}.mdx`, or `Accept: text/markdown` on the HTML URL (`Vary: Accept`).

---
# List LinkedIn profile comments (https://www.socialfetch.dev/docs/api/v2/linkedin/people/entityId/comments/get)

## Summary

List comments authored by a LinkedIn person.

**Tags:** `LinkedIn`

## HTTP

- **Method:** GET
- **Path:** `/v2/linkedin/people/{entityId}/comments`
- **operationId:** `linkedin.live.person.comments.v2`
- **Base URL:** `https://api.socialfetch.dev`

## Capability summary

- **SDK mapping:** `client.linkedin.getProfileComments({ entityId: "1441" })`
- **Pagination:** cursor via `cursor`, next cursor: `data.page.nextCursor`, has more: `data.page.hasMore`
- **Business outcome field:** `data.lookupStatus` with values `found`, `not_found`

## Credits

- **Base:** 3 credits per successful lookup.
- **Maximum on success (200):** 3 credits.
- **Normalization failure (502):** 0 credits charged.
- **Authoritative field:** `meta.creditsCharged`.

## Authentication

- **`x-api-key`**: API key (`sfk_...`)

## Parameters

### `entityId` (path)

- **Required:** yes
- **Constraints:** type `string`; minLength: 1; maxLength: 500
- **Description:** LinkedIn person entity ID. Not a vanity handle.

### `cursor` (query)

- **Required:** no
- **Constraints:** type `string`; minLength: 1; maxLength: 16384

### `start` (query)

- **Required:** no
- **Constraints:** type `integer`; minimum: 0; maximum: 9007199254740991

## Pagination

This endpoint uses **cursor-based pagination** via the `cursor` query parameter.

- Read **hasMore** from `data.page.hasMore`.
- When that value is `true`, read **nextCursor** from `data.page.nextCursor` and pass it as the `cursor` query parameter on the **next** request (URL-encode when building a query string).
- Omit `cursor` on the **first** request.
- Stop when **hasMore** is `false` or **nextCursor** is null (end of list).

## Responses (status codes)

- **200**: LinkedIn profile comments.
- **400**: Request could not be completed.
- **401**: Request could not be completed.
- **402**: Request could not be completed.
- **413**: Response exceeds 4,000,000 bytes. No charge; request fewer URLs.
- **429**: Request could not be completed.
- **500**: Request could not be completed.
- **502**: Request could not be completed.
- **503**: Request could not be completed.

## Response body (200)

LinkedIn profile comments.

### Field outline

- **data** (required) — type `object`
  - **sourceFamily** (required) — type `string`; enum: live
  - **lookupStatus** (required) — type `string`; enum: found, not_found
  - **comments** (required) — type `array`; nullable
    - _items:_
      - **post** (required) — type `object`; nullable. Activity on which the person commented when observed.
        - **header** (required) — type `string`; nullable. Activity header when observed.
        - **text** (required) — type `string`; nullable. Activity body text when observed.
        - **textAttributes** (required) — type `array`; nullable. Entity annotations in the activity text when observed.
          - _items:_
        - **url** (required) — type `string`; nullable. Activity permalink when observed.
        - **entityId** (required) — type `string`; nullable. Activity entity identifier when observed.
        - **author** (required) — type `object`; nullable. Activity author when observed.
          - **name** (required) — type `string`; nullable. Actor display name when observed.
          - **headline** (required) — type `string`; nullable. Actor headline when observed.
          - **entityId** (required) — type `string`; nullable. Actor entity identifier when observed.
          - **id** (required) — type `string`; nullable. Actor numeric or source identifier when observed.
          - **url** (required) — type `string`; nullable. Actor LinkedIn URL when observed.
          - **profilePictureUrl** (required) — type `string`; nullable. Actor profile picture URL when observed.
          - **type** (required) — type `string`; nullable. Actor source type when observed.
        - **postedAt** (required) — type `object`; nullable. Activity publication time when observed.
          - **timestamp** (required) — type `number`; nullable. Source timestamp in milliseconds when observed.
          - **fullDate** (required) — type `string`; nullable. Formatted source date when observed.
          - **relativeDay** (required) — type `string`; nullable. Relative source date label when observed.
        - **edited** (required) — type `boolean`; nullable. Whether the activity was edited when observed.
        - **engagements** (required) — type `object`; nullable. Activity engagement totals when observed.
          - **totalReactions** (required) — type `number`; nullable. Total reaction count when observed.
          - **commentsCount** (required) — type `number`; nullable. Comment count when observed.
          - **repostsCount** (required) — type `number`; nullable. Repost count when observed.
          - **reactions** (required) — type `array`; nullable. Reaction-count breakdown when observed.
            - _items:_
        - **mediaContent** (required) — type `array`; nullable. All activity media items in source order when observed.
          - _items:_
        - **resharedPostContent** (required) — type `object`; nullable
          - **header** (required) — type `string`; nullable. Activity header when observed.
          - **text** (required) — type `string`; nullable. Activity body text when observed.
          - **textAttributes** (required) — type `array`; nullable. Entity annotations in the activity text when observed.
            - _items:_
          - **url** (required) — type `string`; nullable. Activity permalink when observed.
          - **entityId** (required) — type `string`; nullable. Activity entity identifier when observed.
          - **author** (required) — type `object`; nullable. Activity author when observed.
          - **postedAt** (required) — type `object`; nullable. Activity publication time when observed.
          - **edited** (required) — type `boolean`; nullable. Whether the activity was edited when observed.
          - **engagements** (required) — type `object`; nullable. Activity engagement totals when observed.
          - **mediaContent** (required) — type `array`; nullable. All activity media items in source order when observed.
            - _items:_
          - **resharedPostContent** (required)
      - **comment** (required) — type `object`; nullable. The person's comment when observed.
        - **author** (required) — type `object`; nullable. Comment author when observed.
          - **name** (required) — type `string`; nullable. Actor display name when observed.
          - **headline** (required) — type `string`; nullable. Actor headline when observed.
          - **entityId** (required) — type `string`; nullable. Actor entity identifier when observed.
          - **id** (required) — type `string`; nullable. Actor numeric or source identifier when observed.
          - **url** (required) — type `string`; nullable. Actor LinkedIn URL when observed.
          - **profilePictureUrl** (required) — type `string`; nullable. Actor profile picture URL when observed.
          - **type** (required) — type `string`; nullable. Actor source type when observed.
        - **comment** (required) — type `string`; nullable. Comment text when observed.
        - **createdAt** (required) — type `number`; nullable. Comment creation timestamp when observed.
        - **permalink** (required) — type `string`; nullable. Comment permalink when observed.
        - **edited** (required) — type `boolean`; nullable. Whether the comment was edited when observed.
        - **engagements** (required) — type `object`; nullable. Comment engagement totals when observed.
          - **totalReactions** (required) — type `number`; nullable. Total reaction count when observed.
          - **commentsCount** (required) — type `number`; nullable. Comment count when observed.
          - **repostsCount** (required) — type `number`; nullable. Repost count when observed.
          - **reactions** (required) — type `array`; nullable. Reaction-count breakdown when observed.
            - _items:_
  - **page** (required) — type `object`; nullable
    - **kind** (required) — type `string`; enum: cursor, offset, page
    - **nextCursor** (required) — type `string`; nullable
    - **hasMore** (required) — type `boolean`; nullable. Null when continuation is unknown for this page.
    - **start** (required) — type `integer`; minimum: 0; nullable
    - **page** (required) — type `integer`; minimum: 0; nullable
    - **count** (required) — type `integer`; minimum: 0; nullable
    - **returnedCount** (required) — type `integer`; minimum: 0
    - **total** (required) — type `integer`; minimum: 0; nullable
    - **totalPages** (required) — type `integer`; minimum: 0; nullable
  - **reportedTotal** (required) — type `number`; minimum: 0; nullable. Total reported for this page of results; not a guarantee of globally retrievable matches.
- **meta** (required) — type `object`. Metadata about the API response.
  - **requestId** (required) — type `string`; minLength: 1. Unique request identifier for tracing this API call.
  - **creditsCharged** (required) — type `integer`; minimum: 0. Credits charged for this request.
  - **version** (required) — type `string`; enum: v2. Public API version that served the response.

### Example JSON (found)

```json
{
  "data": {
    "sourceFamily": "live",
    "lookupStatus": "found",
    "comments": [
      {
        "post": {
          "header": "Ryan Roslansky commented on this",
          "text": "If I trace the dots back to how I landed in my current job, it's someone who I met years before I had any LinkedIn-related question for her. Actually before LinkedIn was even a company.\n\nThis morning on Today, I mentioned how relationships were integral to my own career as a way of talking about how essential networki…",
          "textAttributes": [
            {
              "length": 15,
              "text": "Shannon Brayton",
              "type": "profileMention",
              "entityId": "ACoAAABpjgEBCYT2tWSMA_gkzlhDEI-FuL7k3Dc"
            }
          ],
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7506439779299901440",
          "entityId": "7506439779299901440",
          "author": {
            "name": "Daniel Roth",
            "headline": "Editor in Chief, VP of Content at LinkedIn",
            "entityId": "ACoAAAAAcaQBXGiHt9S4FpkpdPe7g-Gg4KX4psQ",
            "id": "urn:li:member:29092",
            "url": "https://www.linkedin.com/in/danielroth1",
            "profilePictureUrl": "https://media.licdn.com/dms/image/v2/D4E03AQFssLpG8RItRA/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1695403450371?e=1791417600&v=beta&t=nTWwICicbILD7HDwfdChapRRir-t9jLFTFjthMmqv3g",
            "type": "PERSON"
          },
          "postedAt": {
            "timestamp": 1789674706292,
            "fullDate": "2026-09-17 19:51:46.00 +0000 UTC",
            "relativeDay": "13h"
          },
          "edited": false,
          "engagements": {
            "totalReactions": 219,
            "commentsCount": 30,
            "repostsCount": 9,
            "reactions": [
              {
                "reactionType": "LIKE",
                "reactionCount": 172
              }
            ]
          },
          "mediaContent": null,
          "resharedPostContent": null
        },
        "comment": {
          "author": {
            "name": "Eric Smith",
            "headline": "Workforce Development Professional | Mental Health–Informed Employer Partnerships | Content Noticed by Former LinkedIn CEO Ryan Roslansky",
            "entityId": "ACoAAAmwEqsBqLHHH9Xb640BYZjP41YvZqLccQQ",
            "id": "urn:li:member:162534059",
            "url": "https://www.linkedin.com/in/accessall",
            "profilePictureUrl": "https://media.licdn.com/dms/image/v2/D5603AQEdq4n87xwHZQ/profile-displayphoto-crop_800_800/B56Z8JdWNYIUAI-/0/1782570118078?e=1791417600&v=beta&t=KXg7ad1ozaFWcp7TXn8ZMCffCUZ73WEMFYONiHU7FGk",
            "type": null
          },
          "comment": "Ryan Roslansky and Daniel Roth, thank you for inspiring, encouraging, and engaging people across the globe to invest in one another and learn from each other. Humanity‑driven networking remains one of the simplest and most powerful conduits for meaningful job placement.",
          "createdAt": 1789690325766,
          "permalink": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7506438631293755393?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A7506438631293755393%2C7506439720252411905%29&replyUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A7506438631293755393%2C7506505292118032385%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287506439720252411905%2Curn%…",
          "edited": false,
          "engagements": {
            "totalReactions": 0,
            "commentsCount": 0,
            "repostsCount": 0,
            "reactions": null
          }
        }
      }
    ],
    "page": {
      "kind": "cursor",
      "nextCursor": "eyJ2IjoxLCJvcGVyYXRpb24iOiJsaXZlLmFjdGl2aXR5LmNvbW1lbnRzQnlBdXRob3IiLCJpZGVudGl0eSI6IkFDb0FBQUFLWEJ3QmlrZmJOSnd3NjhlWXZjdTJkcURZSmhIYnA0ZyIsImZpbHRlcnMiOiJ7fSIsIm5leHQiOnsiY3Vyc29yIjoiZFhKdU9teHBPbUZqZEdsMmFYUjVPamN6TURneE5ERXpOall6T0RFNE5UUTNNakF0TVRjME1qTTVOalkzTmpjM01BPT0ifX0",
      "hasMore": true,
      "start": null,
      "page": null,
      "count": null,
      "returnedCount": 83,
      "total": null,
      "totalPages": null
    },
    "reportedTotal": null
  },
  "meta": {
    "requestId": "fixture",
    "creditsCharged": 3,
    "version": "v2"
  }
}
```

## Error handling & retries

Interpret HTTP status codes using the descriptions below. Do not assume a JSON body unless the OpenAPI schema defines one for that status.

- **400**: Request could not be completed. **Retry:** Fix the request; retrying the same invalid payload will not help.
- **401**: Request could not be completed. **Retry:** Fix the API key first; retrying without changes will not help.
- **402**: Request could not be completed. **Retry:** Do not retry without resolving billing/credits (retrying the same request will not help).
- **413**: Response exceeds 4,000,000 bytes. No charge; request fewer URLs.
- **429**: Request could not be completed.
- **500**: Request could not be completed.
- **502**: Request could not be completed. **Retry:** May be transient; a few retries with backoff are reasonable.
- **503**: Request could not be completed. **Retry:** Usually safe to retry with exponential backoff and jitter.

### Suggested client defaults

- Send the API key using the `x-api-key` header on every request.
- On `503` (and sometimes `502`), retry with backoff; cap retries and surface a clear error to the user.
- On `402`, surface an actionable billing message rather than blind retries.

## Examples

### TypeScript SDK

```typescript
import { SocialFetchClient } from "@socialfetch/sdk";

const client = new SocialFetchClient({
  apiKey: process.env.SOCIALFETCH_API_KEY!,
});

const result = await client.linkedin.getProfileComments({
  entityId: "ACoAAAAKXBwBikfbNJww68eYvcu2dqDYJhHbp4g",
});

if (!result.ok) {
  console.error(result.error);
} else {
  console.log(result.value.data);
}
```

### Node.js

```javascript
const response = await fetch(
  "https://api.socialfetch.dev/v2/linkedin/people/ACoAAAAKXBwBikfbNJww68eYvcu2dqDYJhHbp4g/comments",
  {
    headers: {
      "x-api-key": "YOUR_API_KEY"
    }
  }
);

const data = await response.json();
console.log(data);
```

### cURL

```bash
curl "https://api.socialfetch.dev/v2/linkedin/people/ACoAAAAKXBwBikfbNJww68eYvcu2dqDYJhHbp4g/comments" \
  -H "x-api-key: YOUR_API_KEY"
```

### Python

```python
import requests

response = requests.get(
    "https://api.socialfetch.dev/v2/linkedin/people/ACoAAAAKXBwBikfbNJww68eYvcu2dqDYJhHbp4g/comments",
    headers={"x-api-key": "YOUR_API_KEY"},
)
data = response.json()
print(data)
```

### Example: next page (pagination)

After a successful response, if pagination is not finished, request the next page using `cursor` (URL-encode when composing the query string):

```javascript
const previous = await response.json();
const nextCursor = previous?.data?.page?.nextCursor;
const hasMore = previous?.data?.page?.hasMore;
if (!hasMore || nextCursor == null) {
  // no more pages
} else {
  const nextUrl = new URL("https://api.socialfetch.dev/v2/linkedin/people/abc123/comments");
  nextUrl.searchParams.set("cursor", nextCursor);
  // optionally preserve sort: nextUrl.searchParams.set("sortBy", "latest");
  const nextResponse = await fetch(nextUrl.toString(), {
    headers: { "x-api-key": "YOUR_API_KEY" },
  });
  const nextData = await nextResponse.json();
}
```