Posts

Retrieve a post

Returns the full post object including text, nullable counters, author, attachments, and poll.

get/v1/{account_id}/posts/{post_id}

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/{account_id}/posts/{post_id}
  • Auth: HTTP bearer

Path parameters

account_idstring required

The account ID (acc_...) to use for the request.

post_idstring required

The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work.

Response

The requested post, with full text, nullable counters, author, attachments, and poll.

object'post'

Response type discriminator.

idstring

The post's own identifier as returned on this surface, use this value as the post_id path param on sub-resource endpoints. Its exact value can differ between two responses about the same post, so compare urn rather than id when you need to tell whether two responses describe one post.

urnstring nullable

Stable identifier for the post itself, in urn:li:activity:ID or urn:li:ugcPost:ID form. Unlike id, this value is the same however you reached the post, so compare it to decide whether two responses describe the same post; a comment's parent_post.urn joins to it directly. For a repost it names the post being reshared, so reshares of one post share a urn while each keeps its own created_at. It is also accepted as the post_id path param on every operation that takes one, reads and writes alike, exactly like id is. null when the post carries no resolvable identity, and two nulls are not a match: treat null as unknown, never as equal.

share_urlstring nullable

Shareable URL for the post.

titlestring nullable

Post title, or null if not set.

textstring nullable

Full post text (content pass-through, never stored).

created_atstring nullable

ISO-8601 UTC datetime this post was published, or null when it cannot be told reliably. Derived from the post's own activity identity, so it does not change with the route you used to reach it. null when the post carries no activity identity of its own (often a video or image post), never a guess. For a repost this is when the repost was made, not when the post it reshares was.

comment_countnumber nullable

Total comment count, or null when the platform hides it.

reaction_countnumber nullable

Total reaction count, the sum of reactions[].count, or null when the platform hides it.

repost_countnumber nullable

Total repost count, or null when the platform hides it.

impressions_countnumber nullable

Total impression count, or null if not available.

user_reacted'like' | 'celebrate' | 'support' | 'love' | 'insightful' | 'funny' | 'null' nullable

The authenticated account's own reaction (unified lowercase enum), or null if not reacted.

written_byobject nullable

The member who wrote the post (may differ from author for organization posts), or null.

is_repostboolean

true if this post is a repost of another post.

repost_idstring nullable

id of the original post if is_repost is true, else null.

reposted_byobject nullable

Profile of the account that reposted, or null.

repost_contentobject nullable

Embedded original post content for reposts, or null.

attachmentsobject[]

Media attachments on the post.

pollobject nullable

Poll data if the post contains a poll, or null.

specificsobject nullable

Job-posting or article context on the post, present only when applicable.

observed_atstring required

ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it.

source'store' | 'live' required

Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.

withdrawnboolean required

Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case.

withdrawn_atstring

ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true.

Example response

{
  "safety_warning": {
    "row": "profile_views",
    "reset_at": "2026-09-05T00:00:00.000Z",
    "hint": {
      "parameter": "profile_views.ceiling",
      "message": "This account is at its ceiling for profile_views. This action went through because profile_views.posture is warn, and it counted: 101 of 100 this window. Raise profile_views.ceiling, or wait for the window to reset at 2026-09-05T00:00:00.000Z."
    },
    "reason": "ceiling",
    "blocked": false
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.