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

# Update a post

`PATCH /posts/{id}`

## Request

- Base URL: `https://api.cut.pro/api/v1`
- URL: `https://api.cut.pro/api/v1/posts/{id}`
- Auth: API key in header `X-Api-Key`

Updates a post that is still pending. Two things can change:

• `scheduled_at` — reschedule (must be at least 1 minute in the future) or set to `null` to publish immediately. Only allowed while every item is still in `pending` state.

• `items` — replace the set of pending items. Items with `item_id` are updated in place, items without are inserted, and pending items not present in the body are deleted. Items that already finished publishing are never touched.

At least one of `scheduled_at` or `items` must be provided.

## Path parameters

- `id` string, required

## Request body

- object
  - `scheduled_at` string, nullable: ISO 8601 future timestamp, or `null` to clear the schedule and publish immediately.
  - `items` object[]
    - `item_id` string: Existing pending item ID. Omit to insert a new item.
    - `edit_id` string, required
    - `connection_id` string, required
    - `metadata` object, required
      - `tumblr` object
        - `title` string
        - `text` string
        - `tags` string[]
        - `coverImageId` string
      - `slack` object
        - `channelId` string, required
        - `text` string
        - `coverImageId` string
      - `dailymotion` object
        - `title` string, required
        - `description` string
        - `channel` string, required
        - `tags` string[]
        - `visibility` 'public' | 'private'
        - `coverImageId` string
      - `telegram` object
        - `text` string
        - `silent` boolean
        - `coverImageId` string
      - `mastodon` object
        - `text` string
        - `visibility` 'public' | 'unlisted' | 'private'
        - `sensitive` boolean
        - `spoilerText` string
        - `language` string
        - `coverImageId` string
      - `discordserver` object
        - `channelId` string, required
        - `text` string
        - `coverImageId` string
      - `youtube` object
        - `title` string, required
        - `description` string
        - `categoryId` string, required
        - `privacyStatus` 'public' | 'private' | 'unlisted', required
        - `license` 'youtube' | 'creativeCommon'
        - `embeddable` boolean
        - `publicStatsViewable` boolean
        - `madeForKids` boolean
        - `selfDeclaredMadeForKids` boolean
        - `tags` string[]
        - `notifySubscribers` boolean
        - `coverImageId` string
      - `tiktok` object
        - `title` string, required
        - `photoTitle` string
        - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY', required
        - `disableDuet` boolean
        - `disableComment` boolean
        - `disableStitch` boolean
        - `coverImageId` string
        - `brandContentToggle` boolean
        - `brandOrganicToggle` boolean
        - `isAigc` boolean
      - `instagram` object
        - `caption` string
        - `captionGroups` object
          - `hook` string[]
          - `emoji` string[]
          - `body` string[]
          - `cta` string[]
          - `hashtags` string[]
        - `captionParts` string[]
        - `captionAutoEnvelope` boolean
        - `captionTemplate` string
        - `coverUrl` string
        - `coverImageId` string
        - `thumbOffset` number
        - `shareToFeed` boolean
        - `audioName` string
        - `collaborators` string[]
        - `userTags` string[]
        - `trialReel` 'off' | 'MANUAL' | 'SS_PERFORMANCE'
        - `firstComment` string
      - `facebook` object
        - `description` string
        - `postType` 'reel' | 'feed'
        - `link` string
        - `videoTitle` string
        - `coverImageId` string
        - `firstComment` string
      - `bluesky` object
        - `text` string
        - `languages` string[]
        - `coverImageId` string
      - `threads` object
        - `text` string
        - `replyControl` 'everyone' | 'accounts_you_follow' | 'mentioned_only'
        - `coverImageId` string
        - `firstComment` string
      - `linkedin` object
        - `text` string, required
        - `visibility` 'PUBLIC' | 'CONNECTIONS'
        - `coverImageId` string
      - `pinterest` object
        - `boardId` string, required
        - `title` string, required
        - `description` string, required
        - `link` string
        - `coverImageUrl` string
        - `coverImageId` string
      - `carmedia` object
        - `title` string, required
        - `description` string
        - `visibility` 'public'
        - `coverImageId` string
      - `twitter` object
        - `text` string
        - `replySettings` 'everyone' | 'following' | 'mentionedUsers'
        - `coverImageId` string

## Response `200`

Response for status 200

- object
  - `id` string, required
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled', required
  - `scheduled_at` string, nullable, required
  - `created_at` string, required
  - `updated_at` string, required
  - `item_count` number, required
  - `items` object[], required
    - `id` string, required
    - `platform` 'youtube' | 'tiktok' | 'instagram' | 'bluesky' | 'threads' | 'linkedin' | 'pinterest' | 'facebook' | 'carmedia' | 'twitter' | 'telegram' | 'mastodon' | 'discordserver' | 'dailymotion' | 'tumblr' | 'slack', required
    - `connection_id` string, required
    - `edit_id` string, nullable, required
    - `render_id` string, nullable, required: Render backing this item. `null` once the render is gone (expired, failed or cancelled): there is no file left to download.
    - `status` 'pending' | 'rendering' | 'publishing' | 'completed' | 'failed', required
    - `published_url` string, nullable, required
    - `error_code` string, nullable, required
    - `metadata` object, nullable, required: Publishing metadata of this item (title, caption/description and per-network options), in the same shape accepted by `POST /posts`.
      - `tumblr` object
        - `title` string
        - `text` string
        - `tags` string[]
        - `coverImageId` string
      - `slack` object
        - `channelId` string
        - `text` string
        - `coverImageId` string
      - `dailymotion` object
        - `title` string
        - `description` string
        - `channel` string
        - `tags` string[]
        - `visibility` 'public' | 'private'
        - `coverImageId` string
      - `telegram` object
        - `text` string
        - `silent` boolean
        - `coverImageId` string
      - `mastodon` object
        - `text` string
        - `visibility` 'public' | 'unlisted' | 'private'
        - `sensitive` boolean
        - `spoilerText` string
        - `language` string
        - `coverImageId` string
      - `discordserver` object
        - `channelId` string
        - `text` string
        - `coverImageId` string
      - `youtube` object
        - `title` string
        - `description` string
        - `categoryId` string
        - `privacyStatus` 'public' | 'private' | 'unlisted'
        - `license` 'youtube' | 'creativeCommon'
        - `embeddable` boolean
        - `publicStatsViewable` boolean
        - `madeForKids` boolean
        - `selfDeclaredMadeForKids` boolean
        - `tags` string[]
        - `notifySubscribers` boolean
        - `coverImageId` string
      - `tiktok` object
        - `title` string
        - `photoTitle` string
        - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY'
        - `disableDuet` boolean
        - `disableComment` boolean
        - `disableStitch` boolean
        - `coverImageId` string
        - `brandContentToggle` boolean
        - `brandOrganicToggle` boolean
        - `isAigc` boolean
      - `instagram` object
        - `caption` string
        - `captionGroups` object
          - `hook` string[]
          - `emoji` string[]
          - `body` string[]
          - `cta` string[]
          - `hashtags` string[]
        - `captionParts` string[]
        - `captionAutoEnvelope` boolean
        - `captionTemplate` string
        - `coverUrl` string
        - `coverImageId` string
        - `thumbOffset` number
        - `shareToFeed` boolean
        - `audioName` string
        - `collaborators` string[]
        - `userTags` string[]
        - `trialReel` 'off' | 'MANUAL' | 'SS_PERFORMANCE'
        - `firstComment` string
      - `facebook` object
        - `description` string
        - `postType` 'reel' | 'feed'
        - `link` string
        - `videoTitle` string
        - `coverImageId` string
        - `firstComment` string
      - `bluesky` object
        - `text` string
        - `languages` string[]
        - `coverImageId` string
      - `threads` object
        - `text` string
        - `replyControl` 'everyone' | 'accounts_you_follow' | 'mentioned_only'
        - `coverImageId` string
        - `firstComment` string
      - `linkedin` object
        - `text` string
        - `visibility` 'PUBLIC' | 'CONNECTIONS'
        - `coverImageId` string
      - `pinterest` object
        - `boardId` string
        - `title` string
        - `description` string
        - `link` string
        - `coverImageUrl` string
        - `coverImageId` string
      - `carmedia` object
        - `title` string
        - `description` string
        - `visibility` 'public'
        - `coverImageId` string
      - `twitter` object
        - `text` string
        - `replySettings` 'everyone' | 'following' | 'mentionedUsers'
        - `coverImageId` string
    - `created_at` string, required
    - `updated_at` string, required
    - `posted_at` string, nullable, required

## Other responses

- `400`: Response for status 400
- `404`: Response for status 404

---

[API](https://skmtc.dev/cut/apis/cutpro-api.md) · [All operations](https://skmtc.dev/cut/apis/cutpro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cut/apis/cutpro-api/revisions/89d0bafe529c?raw)
