---
title: "Get post details"
method: GET
path: "/v1/posts/{id}"
tags: ["Posts"]
---

# Get post details

`GET /v1/posts/{id}`

## Request

- Base URL: `https://api.outstand.so`
- URL: `https://api.outstand.so/v1/posts/{id}`
- Auth: none declared

Get detailed information about a specific post by its ID, including all containers (content segments), attached media files, scheduling status, and publishing state. The post ID is the encoded string identifier returned when creating or listing posts. The response includes the full container hierarchy with media URLs for each segment.

Media URLs are always the file you uploaded. When a post opts into `processMedia`, videos are normalized in the background and the publish path substitutes the encoded file per network - it never rewrites the source URL stored on the post. Use `containers[].media[].processing` to see that pipeline: the roll-up `status`, the ffprobe reading, each rendition and its public URL, and the per-network `issues` the source would otherwise hit. It is `null` for images and for videos on posts that did not opt in.

## Path parameters

- `id` string, required

## Response `200`

Post retrieved successfully

- object
  - `success` boolean, required
  - `post` object, required
    - `id` string, required
    - `orgId` string, required
    - `publishedAt` string, date-time, nullable, required
    - `scheduledAt` string, date-time, nullable, required
    - `isDraft` boolean, required
    - `createdAt` string, date-time, required
    - `socialAccounts` object[], required
      - `id` string, required: Unique identifier for the social account
      - `nickname` string, required: User-defined nickname for this social account
      - `network` string, required: Social network identifier (e.g., 'facebook', 'x', 'instagram', 'linkedin', 'threads', 'youtube', 'tiktok')
      - `username` string, required: Username or handle on the social network
      - `status` 'pending' | 'published' | 'failed' | 'deleted', required: Publishing status for this account. 'pending': awaiting publish (post created or scheduled), 'published': successfully published to this account, 'failed': publishing failed (check error field), 'deleted': post was deleted from the social network platform. Note: A post can partially succeed - some accounts may publish while others fail.
      - `error` string, nullable, required: Error message if publishing failed. Contains the platform-specific error message. Common errors include: expired access tokens, rate limits, invalid media format, content policy violations. Null if status is not 'failed'.
      - `platformPostId` string, nullable, required: The platform-specific post ID after successful publish. Use this for analytics, fetching comments, or deep-linking to the post on the platform. Null if not yet published or if publishing failed.
      - `platformPostUrl` string, nullable, required: The public URL of the post on the social network. Currently populated for Instagram only; null for other networks or for posts created before this feature.
      - `publishedAt` string, date-time, nullable, required: ISO 8601 timestamp when the post was successfully published to this account. Null if pending or failed. Each account has its own publishedAt since they are processed sequentially.
    - `containers` object[], required
      - `id` string, required
      - `content` string, required
      - `media` object[], required
        - `url` string, required
        - `filename` string, required
        - `processing` object, nullable, required: Video processing state for this file, or null when it is not a tracked video.
          - `status` 'pending' | 'processing' | 'ready' | 'failed', required: Roll-up of the probe and every rendition. `ready` means publishing will use the best available file and will not wait. `pending`/`processing` means a publish attempt defers until the encode settles or the deadline passes. `failed` means the probe or an encode gave up, and publishing falls back to the file you uploaded.
          - `sourceStatus` 'pending' | 'probing' | 'probed' | 'probe_failed', required: State of the source inspection. `probe_failed` means we could not read the file at all, so no renditions were planned.
          - `error` string, nullable, required: Why the probe failed, when sourceStatus is `probe_failed`.
          - `probe` object, nullable, required: What ffprobe read off the source. Null until the probe completes.
            - `containerFormat` string, required
            - `durationMs` number, required
            - `width` number, required: Stored width, before any container rotation is applied.
            - `height` number, required
            - `fps` number, required
            - `videoCodec` string, required
            - `audioCodec` string, nullable, required: Null for a silent video.
            - `sizeBytes` number, required
            - `rotation` number, required: Display rotation in degrees from container metadata: 0, 90, 180 or 270.
            - `moovAtFront` boolean, required: Instagram rejects files whose moov atom trails the media data.
            - `hasEditLists` boolean, required: Instagram rejects files with edit lists.
          - `renditions` object[], required: An empty array is a success, not a gap: it means the source already satisfied every target network and nothing needed re-encoding.
            - `kind` string, required: `master` is the network-agnostic normalized encode. Any other value is a network name, produced because the master would still breach that network's caps.
            - `status` 'queued' | 'processing' | 'ready' | 'failed', required
            - `url` string, nullable, required: Public URL of the encoded file, once ready. This is what the publish path sends to the network in place of your original.
            - `error` string, nullable, required
          - `issues` object[], required: What the post's target networks object to, derived from the probe. Recomputed on read, so it reflects the accounts the post targets now.
            - `level` 'error' | 'warning', required: `error` blocks post creation. `warning` does not - either a rendition fixes it, or you chose to publish as-is.
            - `code` string, required
            - `message` string, required
            - `network` string, required
            - `fixableByTranscode` boolean, required: False for duration and aspect-ratio breaches - fixing those would mean trimming or cropping your content, which we do not do on your behalf.
      - `publishResults` object[], required: Per-account publish outcome for non-root containers (first comments/replies). Empty for the root container, whose status is reflected by the post's socialAccounts.
        - `accountId` string, required: The social account this outcome belongs to.
        - `status` 'published' | 'failed', required
        - `platformCommentId` string, nullable, required: Platform-specific ID of the posted comment/reply.
        - `error` string, nullable, required: Error message if this container failed to publish for the account.
        - `publishedAt` string, date-time, required: When this outcome was recorded.

## Other responses

- `403`: Unauthorized - post does not belong to your organization
- `404`: Post not found
- `500`: Internal server error

---

[API](https://skmtc.dev/outstand/apis/outstand-posts-v1.md) · [All operations](https://skmtc.dev/outstand/apis/outstand-posts-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/outstand/apis/outstand-posts-v1/revisions/9cf3d8976019?raw)
