Update a post
Update a post that has not been published yet.
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.
Permissions: Requires posts:update. Access is limited by the API key creator's current organization membership and stored key ceiling. See Organization permissions. Scheduled or published content additionally requires posts:publish; processing media additionally requires media:process.
id*stringapplication/json- body
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?array<>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?stringSimple 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?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.
instagram?Custom and override configuration for Instagram content.
youtube?Custom and override configuration for YouTube content.
tiktok?Custom and override configuration for TikTok content.
google_business?Custom and override configuration for Google Business Profile content.
pinterest?Custom configuration for Pinterest content. board_id is required when publishing to Pinterest.
vimeo?Vimeo-specific video configuration
linkedin?Custom configuration for LinkedIn content.
facebook?Custom configuration for Facebook content.
reddit?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.
x?Custom configuration for X content. Currently only the per-network content override.
bluesky?Custom configuration for Bluesky content. Currently only the per-network content override.
processMedia?booleanOpt 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?|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.
date-timeisDraft?booleanWhether 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).
Post updated successfully
application/json- response
Successful post update response
success*booleanWhether the post update was successful
warnings?array<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?booleanPresent 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*The post object
curl -X PATCH 'https://api.outstand.so/v1/posts/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "success": true, "warnings": [ "string" ], "rescheduled": true, "post": { "id": "string", "orgId": "string", "publishedAt": "2019-08-24T14:15:22Z", "scheduledAt": "2019-08-24T14:15:22Z", "isDraft": true, "createdAt": "2019-08-24T14:15:22Z", "socialAccounts": [ { "id": "string", "nickname": "string", "network": "string", "username": "string" } ], "containers": [ { "id": "string", "content": "string", "media": [ { "id": 0, "url": "http://example.com", "filename": "string" } ] } ], "networkOverrideConfiguration": { "property1": null, "property2": null }, "scheduled": true }}