Update a post

Update a post that has not been published yet. Every field is optional - only the fields present in the request body are changed.

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). Platform config is merged per network: sending only tiktok leaves the stored YouTube configuration 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.

PATCH/v1/posts/{id}

Path Parameters

idstring
containers?array<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

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?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.

instagram?object

Custom and override configuration for Instagram content.

youtube?object

Custom and override configuration for YouTube content.

tiktok?object

Custom and override configuration for TikTok content.

google_business?object

Custom and override configuration for Google Business Profile content.

pinterest?object

Custom configuration for Pinterest content. board_id is required when publishing to Pinterest.

vimeo?object

Vimeo-specific video configuration

linkedin?object

Custom configuration for LinkedIn content.

facebook?object

Custom configuration for Facebook content.

scheduledAt?string | null

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.

Formatdate-time
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 Body

const body = JSON.stringify({})fetch("https://api.outstand.so/v1/posts/string", {  method: "PATCH",  headers: {    "Content-Type": "application/json"  },  body})
{
  "success": true,
  "warnings": [
    "Ignored unrecognised top-level key 'schedule_at'. Provide the post body via 'content' or 'containers', and platform config as top-level keys named after the network (e.g. 'tiktok', 'youtube')."
  ],
  "rescheduled": true,
  "post": {
    "id": "9dyJS",
    "orgId": "abc123",
    "publishedAt": null,
    "scheduledAt": "2025-09-20T14:00:00Z",
    "isDraft": false,
    "createdAt": "2025-01-15T10:30:00Z",
    "socialAccounts": [
      {
        "nickname": "My Company",
        "network": "x",
        "username": "mycompany"
      }
    ],
    "containers": [
      {
        "id": "8xKmL",
        "content": "Check out our new product launch! #excited",
        "media": [
          {
            "id": 123,
            "url": "https://media.yoursite.com/images/launch.jpg",
            "filename": "launch-photo.jpg"
          }
        ]
      }
    ]
  }
}
{
  "success": false,
  "error": "Invalid payload",
  "details": {
    "content": {
      "_errors": [
        "Required"
      ]
    }
  }
}
{
  "success": false,
  "error": "Invalid payload",
  "details": {
    "content": {
      "_errors": [
        "Required"
      ]
    }
  }
}
{
  "success": false,
  "error": "Invalid payload",
  "details": {
    "content": {
      "_errors": [
        "Required"
      ]
    }
  }
}
{
  "success": false,
  "error": "Internal server error",
  "message": "Database connection failed"
}