---
title: "Update idea"
method: PATCH
path: "/ideas/{id}"
tags: ["Ideas"]
---

# Update idea

`PATCH /ideas/{id}`

Update an existing idea by ID. All fields are optional - only include the fields you want to update. Archived ideas cannot be updated; unarchive them first.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `title` string — Idea title
  - `labelIds` string[] — Label IDs to attach to the idea (replaces existing labels)
  - `campaignId` string, uuid, nullable — Campaign ID to link the idea to (null to unlink)
  - `linkedIn` object — LinkedIn channel content updates
    - `copy` string
    - `assets` ChannelAssetRef[]
      - `assetId` string, uuid, required — Asset ID from the Uploads API
  - `x` object — X/Twitter channel content updates
    - `tweets` object[]
      - `copy` string
      - `assets` ChannelAssetRef[]
        - `assetId` string, uuid, required — Asset ID from the Uploads API
  - `tikTok` TikTokConfig — TikTok channel configuration for creating or updating posts. TikTok posts require exactly one video asset.
    - `profileId` string, uuid, required — TikTok profile ID to post from
    - `copy` string, required — Caption text. Maximum 2,200 characters.
    - `assets` ChannelAssetRef[], required — Array containing exactly one video asset.
      - `assetId` string, uuid, required — Asset ID from the Uploads API
    - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'FOLLOWER_OF_CREATOR' | 'MUTUAL_FOLLOW_FRIENDS' | 'SELF_ONLY' — Audience visibility for the TikTok video.
    - `isCommentDisabled` boolean — Disable comments on the video.
    - `isDuetDisabled` boolean — Disable Duet on the video.
    - `isStitchDisabled` boolean — Disable Stitch on the video.
    - `isPromotingBusiness` boolean — Mark the video as promoting the creator's own business (branded content disclosure).
    - `isPaidPartnership` boolean — Mark the video as a paid partnership with a third-party brand (branded content disclosure).
    - `videoCoverTimestampMs` integer, nullable — Timestamp (in milliseconds) of the video frame TikTok should use as the cover thumbnail. Defaults to the first frame when omitted or null.
  - `youTubeShorts` YouTubeShortsConfig — YouTube Shorts channel configuration for creating or updating posts. YouTube Shorts posts require exactly one video asset (1s–3min).
    - `profileId` string, uuid, required — YouTube channel profile ID to post from
    - `title` string, required — Video title. Required by YouTube. Maximum 100 characters.
    - `description` string — Video description. Maximum 5,000 characters.
    - `assets` ChannelAssetRef[], required — Array containing exactly one video asset (1s–3min duration).
      - `assetId` string, uuid, required — Asset ID from the Uploads API
    - `privacyStatus` 'public' | 'private' | 'unlisted' — Audience visibility for the YouTube Shorts video.
    - `categoryId` string — YouTube category ID for the video.
    - `notifySubscribers` boolean — Whether to notify channel subscribers when the video is published.
    - `isEmbeddable` boolean — Whether the video can be embedded on other sites.
    - `isSelfDeclaredMadeForKids` boolean — Whether the video is self-declared as made for kids.
  - `notes` string, nullable — Internal notes for the idea

## Response `200`

Idea updated successfully

- IdeaUpdateResponse — Response when updating an idea
  - `id` string, uuid
  - `url` string, uri
  - `title` string
  - `channels` string[]
  - `status` string
  - `updatedAt` string, date-time
  - `linkedIn` object, nullable
    - `copy` string
    - `assets` Asset[]
      - `id` string, uuid — Asset ID
      - `name` string — Original filename
      - `url` string, uri — URL to access the asset
      - `mimetype` string — MIME type of the file (e.g., image/jpeg, video/mp4)
      - `size` integer — File size in bytes
      - `width` integer, nullable — Width in pixels for images and videos
      - `height` integer, nullable — Height in pixels for images and videos
      - `duration` number, nullable — Duration in seconds for videos
  - `x` object, nullable
    - `tweets` object[]
      - `copy` string
      - `assets` Asset[]
        - `id` string, uuid — Asset ID
        - `name` string — Original filename
        - `url` string, uri — URL to access the asset
        - `mimetype` string — MIME type of the file (e.g., image/jpeg, video/mp4)
        - `size` integer — File size in bytes
        - `width` integer, nullable — Width in pixels for images and videos
        - `height` integer, nullable — Height in pixels for images and videos
        - `duration` number, nullable — Duration in seconds for videos
  - `tikTok` TikTokContent, nullable — TikTok content. Present when the post targets the TikTok channel.
    - `profile` ChannelProfile — Profile information for a channel (LinkedIn, X, or Instagram)
      - `id` string, uuid — Profile ID
      - `name` string, nullable — Profile name
      - `detail` string, nullable — Profile detail (vanity name for LinkedIn, @username for X)
    - `copy` string — Caption text
    - `assets` Asset[] — Assets attached to the TikTok post (one video).
      - `id` string, uuid — Asset ID
      - `name` string — Original filename
      - `url` string, uri — URL to access the asset
      - `mimetype` string — MIME type of the file (e.g., image/jpeg, video/mp4)
      - `size` integer — File size in bytes
      - `width` integer, nullable — Width in pixels for images and videos
      - `height` integer, nullable — Height in pixels for images and videos
      - `duration` number, nullable — Duration in seconds for videos
    - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'FOLLOWER_OF_CREATOR' | 'MUTUAL_FOLLOW_FRIENDS' | 'SELF_ONLY' — Audience visibility for the TikTok video.
    - `isCommentDisabled` boolean
    - `isDuetDisabled` boolean
    - `isStitchDisabled` boolean
    - `isPromotingBusiness` boolean
    - `isPaidPartnership` boolean
    - `videoCoverTimestampMs` integer, nullable — Timestamp (in milliseconds) of the video frame used as the cover thumbnail. Null when not set.
  - `youTubeShorts` YouTubeShortsContent, nullable — YouTube Shorts content. Present when the post targets the YouTube Shorts channel.
    - `profile` ChannelProfile — Profile information for a channel (LinkedIn, X, or Instagram)
      - `id` string, uuid — Profile ID
      - `name` string, nullable — Profile name
      - `detail` string, nullable — Profile detail (vanity name for LinkedIn, @username for X)
    - `title` string, nullable — Video title
    - `description` string, nullable — Video description
    - `assets` Asset[] — Assets attached to the YouTube Shorts post (one video).
      - `id` string, uuid — Asset ID
      - `name` string — Original filename
      - `url` string, uri — URL to access the asset
      - `mimetype` string — MIME type of the file (e.g., image/jpeg, video/mp4)
      - `size` integer — File size in bytes
      - `width` integer, nullable — Width in pixels for images and videos
      - `height` integer, nullable — Height in pixels for images and videos
      - `duration` number, nullable — Duration in seconds for videos
    - `privacyStatus` 'public' | 'private' | 'unlisted' — Audience visibility for the YouTube Shorts video.
    - `categoryId` string, nullable
    - `notifySubscribers` boolean
    - `isEmbeddable` boolean
    - `isSelfDeclaredMadeForKids` boolean

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Missing or invalid API key
- `404` — Not Found - Resource does not exist

---

[API](https://skmtc.net/tryordinal/apis/ordinal-api.md) · [All operations](https://skmtc.net/tryordinal/apis/ordinal-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryordinal/ordinal-api/revisions/1d0792ff454f/schema)
