# st.openPost

This action allows you to open a post to retrieve its data and perform additional post-related actions if needed.

## Constraints

> ⏺️ **Root Start:** allowed, when `postUrl` parameter is provided.

> ⬆️ **Parent Actions:** [st.doForPosts](/docs/action-st-do-for-posts).

> ⬇️ **Child Actions:** [st.reactToPost](/docs/action-st-react-to-post), [st.commentOnPost](/docs/action-st-comment-on-post), [st.retrievePostComments](/docs/action-st-retrieve-post-comments), [st.retrievePostReactions](/docs/action-st-retrieve-post-reactions).

## Parameters

```json
{
  "actionType": "st.openPost",
  "label": "post1",
  "postUrl": "https://www.linkedin.com/posts/post1",
  "basicInfo": true,
  "then": { ... }
}
```

- `label` (optional) – custom label for tracking this action in workflow completion.
- `postUrl` (required for root start, forbidden for parent start) – LinkedIn URL of the post.
- `basicInfo` (optional, default: `false`) – when set to `true`, the action includes basic post information in the results.
- `then` (optional) – object or array of child actions to be executed within this action.

## Result options

1. **Successful post opening with `basicInfo` set to `true`:**

```json
{
  "actionType": "st.openPost",
  "label": "post1",
  "success": true,
  "data": {
    "url": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
    "activityUrn": "urn:li:activity:1234567890123456789",
    "time": "2023-01-02T12:30:00Z",
    "type": "original",
    "author": {
      "type": "person",
      "name": "Example Person",
      "profileUrl": "https://www.linkedin.com/in/example-person",
      "headline": "Product Marketing Lead"
    },
    "reposter": null,
    "text": "Check out our latest product launch!",
    "repostText": null,
    "hashtags": ["product", "launch"],
    "mentions": ["https://www.linkedin.com/company/example-company"],
    "externalLinks": ["https://example.com/launch"],
    "images": [
      "https://static.linkedin.com/image1.jpg",
      "https://static.linkedin.com/image2.jpg"
    ],
    "documentSlides": [],
    "hasVideo": false,
    "videoThumbnail": null,
    "hasPoll": false,
    "reactionsCount": 27,
    "commentsCount": 8,
    "repostsCount": 12,
    "then": { ... }
  }
}
```

- `label` – included only if specified in the action parameters.
- `data` – basic information about the post and results of child actions execution.
  - `url` – URL of the post.
  - `activityUrn` – LinkedIn activity or UGC URN of the post, if available.
  - `time` – timestamp when the post was published.
  - `type` – type of the post. Enum with possible values:
    - `original` – for original posts.
    - `repost` – for reposts.
  - `author` – original content creator. Can be `null` if the actor cannot be parsed.
    - For person authors: `type`, `name`, `profileUrl`, `headline`.
    - For company authors: `type`, `name`, `companyUrl`.
  - `reposter` – person or company that reshared the post. Non-null only when `type` is `repost`.
    - For person reposters: `type`, `name`, `profileUrl`, `headline`.
    - For company reposters: `type`, `name`, `companyUrl`.
  - `text` – original author's post text, if available.
  - `repostText` – text added by the reposter on a repost with comment, if available.
  - `hashtags` – array of hashtags found in the post text, without leading `#`.
  - `mentions` – array of person and company profile URLs found in the post text.
  - `externalLinks` – array of outbound URLs found in the post text.
  - `images` – array of up to 3 preview image URLs, if available.
  - `documentSlides` – array of carousel or document slide image URLs, if available.
  - `hasVideo` – boolean indicating if the post contains a video.
  - `videoThumbnail` – URL of the video thumbnail, if available.
  - `hasPoll` – boolean indicating if the post contains a poll.
  - `reactionsCount` – number of reactions on the post.
  - `commentsCount` – number of comments on the post.
  - `repostsCount` – number of reposts on the post.
  - `then` – results of child actions execution.

2. **Successful repost opening with `basicInfo` set to `true`:**

```json
{
  "actionType": "st.openPost",
  "label": "post1",
  "success": true,
  "data": {
    "url": "https://www.linkedin.com/feed/update/urn:li:activity:2345678901234567890",
    "activityUrn": "urn:li:activity:2345678901234567890",
    "time": "2023-01-03T09:15:00Z",
    "type": "repost",
    "author": {
      "type": "company",
      "name": "Example Company",
      "companyUrl": "https://www.linkedin.com/company/example-company"
    },
    "reposter": {
      "type": "person",
      "name": "Example Reposter",
      "profileUrl": "https://www.linkedin.com/in/example-reposter",
      "headline": null
    },
    "text": "Original post content about the webinar.",
    "repostText": "A useful summary for anyone planning a launch.",
    "hashtags": [],
    "mentions": [],
    "externalLinks": [],
    "images": [],
    "documentSlides": [],
    "hasVideo": true,
    "videoThumbnail": "https://media.licdn.com/dms/image/video-cover.jpg",
    "hasPoll": false,
    "reactionsCount": 6,
    "commentsCount": 0,
    "repostsCount": 1,
    "then": { ... }
  }
}
```

3. **Successful post opening with `basicInfo` set to `false`:**

```json
{
  "actionType": "st.openPost",
  "label": "post1",
  "success": true,
  "data": {
    "then": { ... }
  }
}
```

- `label` – included only if specified in the action parameters.
- `data.then` – results of child actions execution.

4. **Failed post opening:**

```json
{
  "actionType": "st.openPost",
  "label": "post1",
  "success": false,
  "error": {
    "type": "postNotFound",
    "message": "The provided URL is not an existing LinkedIn post."
  }
}
```

- `label` – included only if specified in the action parameters.
- `error.type` – enum with the following possible values:
  - `postNotFound` – provided URL is not an existing LinkedIn post.
