---
title: "Create idea"
method: POST
path: "/ideas"
tags: ["Ideas"]
---

# Create idea

`POST /ideas`

Create a new idea in the workspace. At least one channel (linkedIn, x, or tikTok) is required.

## Request body

- object
  - `title` string, required — Idea title
  - `labelIds` string[] — Label IDs to attach to the idea
  - `campaignId` string, uuid — Campaign ID to link the idea to
  - `linkedIn` object — LinkedIn channel configuration
    - `profileId` string, uuid — LinkedIn profile ID to post from
    - `copy` string — Post content text. To tag someone, use the format `@[Display Name](urn)`. See [LinkedIn Mentions](/api/linkedin-mentions) for details.
    - `assets` ChannelAssetRef[] — Array of assets to attach. Maximum 20 attachments.
      - `assetId` string, uuid, required — Asset ID from the Uploads API
    - `poll` object
      - `question` string
      - `duration` 'ONE_DAY' | 'THREE_DAYS' | 'ONE_WEEK' | 'TWO_WEEKS'
      - `options` object[]
        - `id` string
        - `text` string
    - `linkPreview` object
      - `url` string, uri
      - `title` string
      - `description` string
      - `thumbnailId` string
  - `x` object — X (Twitter) channel configuration
    - `profileId` string, uuid, required — X (Twitter) profile ID to post from
    - `tweets` object[], required — Array of tweets. For threads, include multiple tweets in order.
      - `copy` string, required — Tweet text content
      - `assets` ChannelAssetRef[] — Array of assets to attach. Maximum 4 per tweet.
        - `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 — Internal notes for the idea

## Response `200`

Idea created successfully

- IdeaCreateResponse — Response when creating an idea
  - `id` string, uuid
  - `url` string, uri
  - `title` string
  - `channels` string[]
  - `status` string
  - `createdAt` string, date-time
  - `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

---

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