# Get a Social Post

> Read one social post, including per-account status and live post URLs

- **URL**: https://orshot.com/docs/api-reference/social-post-get

---

## Overview

Returns a single post with its per-account results — where it landed, the live URL on each platform, or why an account failed.

This is how you confirm what actually happened to a post, including confirming that a draft is still being held and has **not** been published.

```markdown tab="Endpoint"
https://api.orshot.com/v1/social/posts/{postId}
```

## Request

**Request**
```js
await fetch("https://api.orshot.com/v1/social/posts/512", {
  method: "GET",
  headers: {
    Authorization: "Bearer <ORSHOT_API_KEY>",
  },
});
```

**Response**
```json
{
  "data": {
    "id": 512,
    "status": "published",
    "content": "Our new pricing is live.",
    "media_urls": ["https://storage.orshot.com/.../launch.png"],
    "platforms": ["linkedin", "twitter"],
    "accounts": [
      {
        "account_id": 15,
        "platform": "linkedin",
        "username": "acme-inc",
        "name": "Acme Inc",
        "status": "published",
        "url": "https://linkedin.com/feed/update/urn:li:share:1234567890"
      },
      {
        "account_id": 22,
        "platform": "twitter",
        "username": "acmehq",
        "name": "Acme",
        "status": "failed",
        "error": "Account token expired — reconnect required",
        "action": "reconnect"
      }
    ],
    "is_editable": false,
    "is_discardable": false,
    "scheduled_for": null,
    "published_at": "2026-08-11T18:02:11.412+00:00",
    "created_at": "2026-08-11T17:24:09.752914+00:00",
    "render_id": 889021
  }
}
```

See [List Social Posts](https://orshot.com/docs/api-reference/social-posts-list) for the full post object reference.

## Refreshing status

Some platforms — Instagram and TikTok among them — publish asynchronously. A post sent to those sits at `processing` until the platform reports back, so a freshly created post will not immediately carry its live URLs.

To pull the current state from the platforms and update the stored post:

### `POST /social/posts/{postId}/sync`

```js
await fetch("https://api.orshot.com/v1/social/posts/512/sync", {
  method: "POST",
  headers: {
    Authorization: "Bearer <ORSHOT_API_KEY>",
  },
});
```

```json
{
  "data": {
    "post": { "id": 512, "status": "published" },
    "synced": true,
    "status": "published",
    "platforms": [
      {
        "account_id": 15,
        "platform": "linkedin",
        "status": "published",
        "url": "https://linkedin.com/feed/update/urn:li:share:1234567890"
      }
    ]
  }
}
```

`synced` is `false` when there was nothing to refresh against, in which case the stored post is returned unchanged. Syncing never changes a held draft into a published post — a draft stays a draft until you publish it.

Only sync posts that are actually in flight (`processing`, `scheduled` or `partial`). Published and failed posts are settled, and syncing them just spends rate limit.

## Error Responses

### Not found (404)

```json
{
  "error": "Post not found"
}
```

Returned both when no post has that ID and when the post belongs to a different workspace.

### Unauthorized (403)

```json
{
  "error": "Access Forbidden"
}
```

## Rate Limits

- 20 requests per minute per workspace, shared across all social endpoints