---
title: "Update a post"
method: PATCH
path: "/v1/posts/{id}"
tags: ["Posts"]
---

# Update a post

`PATCH /v1/posts/{id}`

## Request

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

Update a post that has not been published yet. Every field is optional - only the fields present in the request body are changed. Editable fields are the post body (`content` or `containers`, including each container's `media`), the publish time (`scheduledAt`), the `isDraft` flag, and the platform-specific configuration provided as top-level keys named after the network (`tiktok`, `youtube`, `instagram`, `threads`, `google_business`, `pinterest`, `linkedin`, `facebook`, `vimeo`, `reddit`, `x`, `bluesky`), including each block's per-network `content` override. Platform config is merged per network and per field within a network: sending only `tiktok` leaves the stored YouTube configuration alone, and sending only `tiktok.disableComment` leaves the stored TikTok `postMode` and `privacyLevel` alone. Sending `content` or `containers` **replaces** the post's containers and their media entirely - there is no per-container patching. The set of social accounts a post targets cannot be changed (the accounts carry per-account publish state); delete the post and create a new one to publish to different accounts. Changing `scheduledAt` reschedules the queued publishing job: the existing job is cancelled and a new one is created for the new time, and the response reports `rescheduled: true`. Setting `isDraft` to true cancels the queued job without creating a new one. Posts that are already published (fully or for any single account) are rejected with 409, because editing the stored post does not change anything already live on the platforms. When the request replaces the containers of a post that targets a Threads account, each container must be 500 characters or fewer or the request is rejected with 400 (a `threads.content` override is checked in place of the shared body); a request that leaves the containers alone only length-checks the `<network>.content` overrides it sends. To retry a quota-denied YouTube destination on a partially published post, create a new YouTube-only post targeting that failed account. Rescheduling does not reserve upload capacity; admission is checked when the new attempt executes. Google Business EVENT and OFFER posts require an event title, startDate, startTime, endDate and endTime. CALL buttons omit callToAction.url; other action types require it. Google ignores callToAction on OFFER posts.

## Path parameters

- `id` string, required

## Request body

- object: Schema for updating an existing Post. All fields are optional - only the fields present in the request are changed. Sending 'content' or 'containers' fully replaces the post's containers and their media. The set of social accounts a post targets cannot be changed.
  - `containers` object[]: Array of post containers. Each container represents a combo for the post content with its own text and media. Use this if you want to create a post with an automated reply to the root container. Otherwise, use the 'content' field.
    - `content` string: The text content of this post container. Optional when the container carries media - omit it for a media-only post, and for Facebook/Instagram Stories, which are published without a caption. Can include platform-specific formatting (e.g., hashtags, mentions) but it's not guaranteed to be rendered correctly by all platforms. Threads rejects containers longer than 500 characters, so a post targeting a Threads account (including when cross-posting alongside other networks) is rejected with 400 if any container exceeds it.
    - `media` object[]: Array of media attachments for this container. Multiple media files can be attached per container.
      - `url` string, uri, required: Publicly accessible HTTPS URL to the media file. Requirements: (1) Must be publicly accessible - Outstand downloads media server-side, (2) Must use HTTPS, (3) Must return valid Content-Type header, (4) Must be available at publish time - media is fetched when publishing, not when creating the post, (5) Must not require authentication. Supported formats vary by platform: Facebook/X/LinkedIn support JPEG, PNG, GIF; Instagram/Threads support JPEG, PNG; Videos (MP4, MOV) supported on most platforms.
      - `filename` string, required: Clean filename with extension (e.g., 'photo.jpg', 'video.mp4'). Do not include query parameters or URL fragments. The extension helps determine media type for platform-specific processing.
      - `altText` string: Per-image alternative text for accessibility. Currently applied on Bluesky, which supports alt text per image (app.bsky.embed.images). Other platforms use their own network-specific alt-text configuration and ignore this field.
  - `content` string: Simple text content for the post. Use this for single-container posts. Either 'content' or 'containers' must be provided. If you use 'containers', the first container will be the root container and the rest will be published as replies to the root container. Threads rejects content longer than 500 characters, so a post targeting a Threads account (including when cross-posting alongside other networks) is rejected with 400 if it exceeds that - unless `threads.content` supplies a Threads-only body, which is what gets checked instead. To publish different text on one network, put `content` inside that network's block (e.g. `linkedin.content`); this field is then the fallback for every network without one.
  - `threads` object: Custom and override configuration for Threads content. Not to be confused with threaded content or anything other than the Threads By Instagram - the social network.
    - `content` string: Text to publish on Threads instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Threads accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. The 500-character Threads limit is checked against this override instead of the shared body, so a longer shared body can still cross-post to Threads.
    - `countries` string[]: A list of valid ISO 3166-1 alpha-2 country codes that represents the countries where this media should be shown. If this parameter is passed in, the post will not be shown to Threads profiles in countries outside of this list.
    - `reply_control` 'everyone' | 'accounts_you_follow' | 'mentioned_only': Controls who can reply to this Threads post. Set at publish time only - it cannot be changed after the post goes live. Defaults to 'everyone'.
  - `instagram` object: Custom and override configuration for Instagram content.
    - `content` string: Text to publish on Instagram instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Instagram accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Takes precedence over the older 'caption' field.
    - `publishAsStory` boolean: When true, publish as an Instagram Story instead of a feed post. Stories support a single image or video (no carousel), no caption, and expire after 24 hours. Recommended aspect ratio: 9:16.
    - `locationId` string: The ID of the location to publish the post to.
    - `reelThumbOffset` number: The offset in milliseconds for the thumbnail of the Reel. Not setting this will use the default thumbnail offset for the Reel, which is 500msec. Ignored if reelCoverUrl is set.
    - `reelCoverUrl` string, uri: Public URL of a JPEG image to use as the cover image of the Reel. Reels only - not supported for images, carousels or Stories. Instagram fetches the image server-side, so it must be publicly reachable. Max 8MB, sRGB, 9:16 aspect ratio recommended. Takes precedence over reelThumbOffset.
    - `userTags` object[]: Array of user tags to add to the post
      - `username` string, required
      - `x` number, required
      - `y` number, required
    - `altText` string: The alt text for the post - overrides the alt text in the post content/first container.
    - `caption` string: The caption for the post - overrides the caption in the post content/first container.
    - `collaborators` string[]: Array of up to 3 public Instagram usernames to invite as collaborators. Collaborators receive an invite; once accepted, the post appears on both profiles. Only supported for feed posts (IMAGE) and Reels, not Stories.
    - `isAiGenerated` boolean: Self-disclosure that the media is AI-generated, surfaced as Instagram's "AI info" label. Applies to feed posts, Reels, carousels and Stories. For carousels the flag is set on the carousel itself, not the individual items.
    - `trialReel` object: Publish this Reel as a Trial Reel, shared only to non-followers until graduated. Requires a single video published as a Reel - not supported for Stories, carousels, or images.
      - `graduationStrategy` 'MANUAL' | 'SS_PERFORMANCE', required: MANUAL: the creator graduates the trial reel to followers manually in the Instagram app. SS_PERFORMANCE: Meta automatically graduates the trial reel if it performs well with non-followers.
  - `youtube` object: Custom and override configuration for YouTube content.
    - `content` string: Text to publish on YouTube instead of the shared post body. Replaces the top-level 'content' (the first container's text) for YouTube accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Becomes the video description; 'title' still applies.
    - `isShort` boolean: Whether the video is a YouTube Short.
    - `categoryId` string: The ID of the category to publish the post to.
    - `privacyStatus` 'public' | 'private' | 'unlisted': The privacy status of the post.
    - `madeForKids` boolean: Whether the video is made for kids.
    - `containsSyntheticMedia` boolean: Self-disclosure that the video contains realistic altered or synthetic content, for example AI-generated video. Maps to YouTube's status.containsSyntheticMedia and surfaces as an altered-content label on the video. Omitted from the upload entirely when not set - Outstand never declares this on your behalf. Cannot be changed through Outstand once the video is published.
    - `tags` string[]: The tags for the post.
    - `title` string: The title of the post.
    - `thumbnailUrl` string, uri: Public URL of a JPEG or PNG image to set as the video's custom thumbnail. Max 50MB; 16:9 recommended for videos (3840x2160, at least 640px wide) and 9:16 for Shorts. The image is downloaded and checked before the video is uploaded, so an unreachable, oversized or non-JPEG/PNG image fails the publish. Setting it on YouTube is best-effort: if YouTube rejects it - for example because the channel is not verified for custom thumbnails - the video is still published with an auto-generated thumbnail. YouTube may ignore custom thumbnails on Shorts.
  - `tiktok` object: Custom and override configuration for TikTok content.
    - `content` string: Text to publish on TikTok instead of the shared post body. Replaces the top-level 'content' (the first container's text) for TikTok accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. For photo posts, 'title' and 'description' still take precedence when set.
    - `postMode` 'DIRECT_POST' | 'MEDIA_UPLOAD': The posting mode for TikTok. Defaults to MEDIA_UPLOAD when omitted. MEDIA_UPLOAD delivers the media to the creator's TikTok inbox as a draft - they finish the caption, visibility and settings in the TikTok app and publish it themselves - and is not subject to TikTok's 24-hour cap on distinct publishing creators per app. DIRECT_POST publishes straight to the profile, requires privacyLevel, and does count against that cap (reached_active_user_cap).
    - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY': The privacy level for the TikTok post. Required when postMode is DIRECT_POST - must come from the creator_info privacy_level_options. Ignored for MEDIA_UPLOAD, where the creator picks visibility in the TikTok app.
    - `title` string: Photo post title (the bold header), mapped to TikTok's post_info.title. Max 90 UTF-16 runes. Photo posts only. When omitted, the post content is used and truncated to 90 characters.
    - `description` string: Photo post description (the caption), mapped to TikTok's post_info.description. Max 4000 UTF-16 runes. Photo posts only. When omitted, the post content is used.
    - `disableComment` boolean: Whether to disable comments on the TikTok post. Applies to both video and photo posts.
    - `disableDuet` boolean: Whether to disable duets on the TikTok post. Video posts only - ignored for photo posts (TikTok does not support Duet on photos).
    - `disableStitch` boolean: Whether to disable stitches on the TikTok post. Video posts only - ignored for photo posts (TikTok does not support Stitch on photos).
    - `videoCoverTimestampMs` integer: Timestamp in milliseconds of the video frame to use as the cover, mapped to TikTok's post_info.video_cover_timestamp_ms. DIRECT_POST video posts only - ignored for MEDIA_UPLOAD (the creator picks the cover in the TikTok app) and for photo posts. When omitted, TikTok picks the default cover.
    - `autoAddMusic` boolean: Whether TikTok should automatically add recommended music to the post. Applies to photo posts only (ignored for video posts). Defaults to false when not set.
    - `brandContentToggle` boolean: Branded content disclosure - marks the post as a paid partnership (TikTok UX Guideline Point 3).
    - `brandOrganicToggle` boolean: Your brand disclosure - marks the post as promotional content for your own brand (TikTok UX Guideline Point 3).
    - `isAigc` boolean: Whether the content is AI-generated.
  - `google_business` object: Custom and override configuration for Google Business Profile content.
    - `content` string: Text to publish on Google Business instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Google Business accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks.
    - `topicType` 'STANDARD' | 'EVENT' | 'OFFER': The type of Google Business post. STANDARD is a regular post, EVENT includes event details, OFFER includes promotional offer details.
    - `callToAction` object: Call-to-action button configuration. Google ignores this for OFFER posts.
      - `actionType` 'BOOK' | 'ORDER' | 'SHOP' | 'LEARN_MORE' | 'SIGN_UP' | 'CALL', required: The type of call-to-action button.
      - `url` string, uri: Required for non-CALL actions. Omit for CALL; any supplied URL is ignored when publishing.
    - `event` object: Event details with all four schedule fields. Required when topicType is EVENT or OFFER.
      - `title` string, required: The title of the event.
      - `startDate` object, required: The start date of the event.
        - `year` number, required
        - `month` number, required
        - `day` number, required
      - `startTime` object, required: The start time of the event.
        - `hours` number, required
        - `minutes` number, required
      - `endDate` object, required: The end date of the event.
        - `year` number, required
        - `month` number, required
        - `day` number, required
      - `endTime` object, required: The end time of the event.
        - `hours` number, required
        - `minutes` number, required
    - `offer` object: Offer details. Used when topicType is OFFER.
      - `couponCode` string: The coupon code for the offer.
      - `redeemOnlineUrl` string, uri: URL where the offer can be redeemed online.
      - `termsConditions` string: Terms and conditions for the offer.
  - `pinterest` object: Custom configuration for Pinterest content. board_id is required when publishing to Pinterest.
    - `content` string: Text to publish on Pinterest instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Pinterest accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Becomes the pin description; 'title' still applies.
    - `board_id` string, required: The ID of the Pinterest board to pin to. Required for Pinterest.
    - `cover_image_url` string, uri: Cover image URL for video pins. Pinterest requires a cover image for videos; if omitted, the first frame of the video is used automatically.
    - `link` string, uri: Destination URL when the pin is clicked.
    - `alt_text` string: Alt text for the pin image (max 500 chars).
    - `title` string: Pin title (max 100 chars). Defaults to first 100 chars of content.
  - `vimeo` object: Vimeo-specific video configuration
    - `content` string: Text to publish on Vimeo instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Vimeo accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Becomes the video description; 'title' and 'description' still take precedence when set.
    - `title` string
    - `description` string
    - `privacyView` 'anybody' | 'unlisted' | 'nobody' | 'password' | 'contacts' | 'users' | 'disable'
    - `privacyEmbed` 'public' | 'private' | 'whitelist'
  - `linkedin` object: Custom configuration for LinkedIn content.
    - `content` string: Text to publish on LinkedIn instead of the shared post body. Replaces the top-level 'content' (the first container's text) for LinkedIn accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Mentions are resolved against this text.
    - `article` object: Publish the post as a LinkedIn article link card instead of a plain feed post. The container content becomes the commentary above the card.
      - `source` string, uri, required: The URL the article card links to. Required. LinkedIn uses this as the primary link for the card.
      - `title` string: Title shown on the article card (max 400 chars). Overrides LinkedIn's OG title scraping.
      - `description` string: Short description shown beneath the title on the card (max 4000 chars).
      - `thumbnailUrl` string, uri: Public image URL to use as the card thumbnail. We upload this to LinkedIn's Images API and use the resulting URN. LinkedIn does not accept raw URLs as thumbnails.
    - `mentions` object[]: Tag LinkedIn members or organizations by mentioning them inline. For each mention, the matching text in the post content is rewritten into LinkedIn's annotation format. Organization text must be the entity's exact, case-sensitive full name - pass the wrong name and the API will reject the request before publishing.
      - `urn` string, required: The URN of the LinkedIn entity to mention. Organizations use 'urn:li:organization:<id>'; members use 'urn:li:person:<id>'.
      - `text` string, required: The entity's exact, case-sensitive registered name as it appears on LinkedIn (e.g. 'Outstand.so', not 'Outstand'). This string must also appear verbatim in the post content - the first occurrence is converted into a clickable mention. If the text does not match the entity's full registered name, the API returns an error rather than publishing a silently-broken tag.
    - `caption` string: Caption shown directly beneath the media in the LinkedIn feed. When omitted no caption is shown - LinkedIn does not add one of its own. Only visible on single-image and single-video posts; multi-image posts accept it but LinkedIn does not render a per-image caption. Ignored for PDF/document posts, which always carry a title, and for article-card posts, which have no media.
  - `facebook` object: Custom configuration for Facebook content.
    - `videoCoverUrl` string, uri: Public JPEG cover URL, maximum 10,000,000 bytes. Requires one video; unavailable for Stories. Match the video aspect ratio. Validated before video upload; applying the cover after publication is best-effort and failure leaves the video published.
    - `content` string: Text to publish on Facebook instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Facebook accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Stories reject any caption, so it cannot be combined with publishAsStory.
    - `mentions` object[]: Tag other Facebook Pages by mentioning them inline in a comment. IMPORTANT: Meta's Graph API only supports @[pageId] page mentions in comments, not in the main post body. Mentions are applied to comment containers (containers[1+]) - you must include at least one comment container whose text contains the anchor. Only Pages can be tagged; tagging personal profiles is not supported. Meta may silently suppress tags for pages your account has no relationship with.
      - `pageId` string, required: The numeric Facebook Page ID to tag (e.g. '107934268209008'). The API verifies that this page exists and is accessible before publishing - an invalid or inaccessible ID will cause the post to fail with a clear error.
      - `text` string, required: The anchor text that marks where the @[pageId] tag is inserted. This string must appear verbatim in the content of a comment container (not the post body) - if it is missing from all comments, the API rejects the request rather than silently skipping the tag. Note: Meta may still not render the tag as a clickable link for pages you do not manage or if the app's 'Page Mentioning' feature has not been approved (a platform limitation that cannot be detected before publishing).
    - `publishAsStory` boolean: When true, publish to the Page's Story instead of the feed. Stories take exactly one image or video (no carousel), no caption, no comments and no mentions - the request is rejected rather than silently dropping them, so a Story cannot be cross-posted in the same call as captioned content for other networks. Stories expire after 24 hours, after which analytics return null. Recommended aspect ratio: 9:16 (1080x1920).
    - `publishAsReel` boolean: When true, publish the video as a Page Reel instead of a plain Page video. Requires exactly one video; the post content is used as the Reel description and comment containers are published as comments. Recommended aspect ratio: 9:16 (1080x1920), 3-90 seconds. Cannot be combined with publishAsStory.
  - `reddit` object: Custom configuration for Reddit content. subreddit and title are required when publishing to Reddit. Only text (self) and link posts are supported - media containers are rejected.
    - `content` string: Text to publish on Reddit instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Reddit accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Ignored for link posts (when 'url' is set).
    - `subreddit` string, required: The subreddit to post to, without the 'r/' prefix (e.g. 'programming'). Required for Reddit. Use 'u_<username>' to post to a user profile.
    - `title` string, required: The post title (max 300 chars). Required for Reddit - every Reddit post has a title separate from its body.
    - `url` string, uri: When set, the post is published as a link post pointing at this URL and the container content is ignored (Reddit does not allow a body on link posts). When omitted, the post is a text (self) post with the container content as its markdown body.
    - `flairId` string: Flair template ID to apply to the post. Some subreddits require flair and auto-remove posts without it.
    - `flairText` string: Custom flair text (max 64 chars), used together with flairId when the flair template allows editable text.
    - `nsfw` boolean: Mark the post as NSFW. Defaults to false.
    - `spoiler` boolean: Mark the post as a spoiler. Defaults to false.
    - `sendReplies` boolean: Whether the author receives inbox notifications for replies. Defaults to true.
  - `x` object: Custom configuration for X content. Currently only the per-network content override.
    - `content` string: Text to publish on X instead of the shared post body. Replaces the top-level 'content' (the first container's text) for X accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. X's own length limit is not checked at request time.
  - `bluesky` object: Custom configuration for Bluesky content. Currently only the per-network content override.
    - `content` string: Text to publish on Bluesky instead of the shared post body. Replaces the top-level 'content' (the first container's text) for Bluesky accounts only - every other network still publishes the shared text, and the top-level 'content' acts as the fallback. Media, first comments and thread replies are not overridden; they stay shared across all networks. Bluesky's 300-character limit is not checked at request time.
  - `processMedia` boolean: Opt in to automatic video processing. When true, video media is inspected and re-encoded to each target network's requirements (container, codec, resolution, frame rate and file size) before publishing, and the correct rendition is sent to each network. Leave unset to publish the file exactly as supplied. Billed per rendition produced, by output duration in 10-second blocks (rounded up, minimum one block per rendition); validation and inspection are always free. Has no effect on posts without video media.
  - `scheduledAt` string, date-time, nullable: New ISO 8601 timestamp for when the post should be published. Changing this cancels the queued publishing job and creates a new one for the new time. Pass null to clear the schedule - the post is then published on the next queued run. Omit the field to leave the schedule untouched. The maximum time in the future is 30d - a later timestamp is rejected with 400 and the post is left unchanged.
  - `isDraft` boolean: Whether the post is a draft. Setting this to true cancels any queued publishing job; setting it back to false re-queues the post for its scheduled time (or immediately when there is no scheduledAt).

## Response `200`

Post updated successfully

- object: Successful post update response
  - `success` boolean, required: Whether the post update was successful
  - `warnings` string[]: Non-fatal warnings about the request. Used to report keys in the request body that were not recognised and were therefore ignored - both top-level keys and keys inside a platform-config block. Unrecognised keys are dropped before the post is stored, so a warning here means the change you sent is not in effect. Present only when there is at least one warning.
  - `rescheduled` boolean: Present when the update changed the publishing schedule. True when the queued publishing job was cancelled and re-created for the new time. Absent when the schedule was untouched.
  - `post` object, required: The post object
    - `id` string, required: Unique identifier for the created post (sqids encoded)
    - `orgId` string, required: Organization ID that owns this post
    - `publishedAt` string, date-time, nullable, required: When the post was published, null if not yet published
    - `scheduledAt` string, date-time, nullable, required: When the post is scheduled to be published. If empty, the post is immediately published.
    - `isDraft` boolean, required: Whether this is a draft post
    - `createdAt` string, date-time, required: ISO 8601 timestamp when the post was created
    - `socialAccounts` object[], required: Array of social accounts where this post will be published
      - `id` string, required: The account's encoded id - the same value GET /v1/social-accounts returns and the same value you put in the request's `accounts` array. This array lists exactly the accounts that resolved, so comparing these ids against the ids you sent is how you detect entries that were silently ignored. Note this is targeting, not publishing: per-account publish status arrives on GET /v1/posts/:id, not here.
      - `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
    - `containers` object[], required: Array of post containers with content and media
      - `id` string, required: Unique identifier for the container (sqids encoded)
      - `content` string, required: The text content of this post container
      - `media` object[], required: Array of media attachments for this container
        - `id` number, required: Unique identifier for the media file
        - `url` string, uri, required: Publicly accessible HTTPS URL to the media file
        - `filename` string, required: Clean filename with extension
    - `networkOverrideConfiguration` object, nullable: The stored platform-specific configuration, keyed by network (e.g. 'tiktokConfiguration', 'youtubeConfiguration'). Echoed back from what was persisted - note the request accepts these as top-level keys named after the network ('tiktok', 'youtube', ...), so the request and response shapes differ. Null when no platform config was provided.
    - `scheduled` boolean, required: Whether a publishing job is actually queued for this post. This is the field to check to confirm a post will publish - `true` means the job exists, `false` means nothing will publish it until it is rescheduled (PATCH a `scheduledAt`). Drafts are never queued, so they report `false` by design. Prefer this over inspecting internal fields.

## Other responses

- `400`: Invalid post id, invalid request payload, a container that exceeds a targeted network's character limit (Threads: 500), or an attempt to change immutable fields such as the target accounts
- `404`: Post not found
- `409`: The post has already been published and can no longer be edited
- `500`: Internal server error or failed to reschedule publishing

---

[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)
