---
title: "Validate post"
method: POST
path: "/posts/validate"
tags: ["Posts"]
---

# Validate post

`POST /posts/validate`

## Request

- Base URL: `https://api.woopsocial.com/v1`
- URL: `https://api.woopsocial.com/v1/posts/validate`
- Auth: HTTP bearer

Validates a post without creating one.

This endpoint applies the same validation rules as `POST /posts`,
including social account resolution, platform-specific validation, and
media validation for referenced media library items.

## Request body

- CreatePostRequest
  - `autoDeleteMediaAfterPublish` boolean: When true, all media referenced by this post is automatically deleted from the media library after all social account deliveries for the post have published successfully.
  - `content` PostContentItemInput[], required: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
    - `media` PostContentMediaInput[]
      - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
      - `type` 'MEDIA_LIBRARY', required
    - `text` string: Text content for this thread item.
  - `retryPolicy` PostRetryPolicy: Automatically creates a scheduled retry post for each failed target. Successful targets are never copied. Known failures requiring user intervention, such as insufficient credits or disconnected accounts, are not automatically retried. If the platform published a post but its response was lost, retrying may produce a duplicate.
    - `delaySeconds` integer, required: Minimum wait after each failure before the retry is published.
    - `maxRetries` integer, required: Maximum automatic retries per target, excluding the original attempt.
  - `schedule` union, required: When the post should be published.
    - DraftPostSchedule
      - `type` 'DRAFT', required
    - PublishNowPostSchedule
      - `type` 'PUBLISH_NOW', required
    - ScheduleForLaterPostSchedule
      - `scheduledFor` string, date-time, required: UTC time (ISO 8601) when the post should be published. The value must be in the future.
      - `type` 'SCHEDULE_FOR_LATER', required
  - `socialAccounts` SocialAccountInput[], required: Social account targets for this post. All referenced social accounts must belong to the same project. Duplicate `socialAccountId` values are invalid.
    - union
      - FacebookInput
        - `platform` 'FACEBOOK', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `link` string
        - `locationId` string: Facebook place ID to attach to the post.
        - `postType` 'TEXT_ONLY' | 'IMAGE' | 'VIDEO' | 'REEL' | 'STORY', required
      - InstagramInput
        - `platform` 'INSTAGRAM', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `cover` PostContentMediaInput
          - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
          - `type` 'MEDIA_LIBRARY', required
        - `postType` 'POST' | 'REEL' | 'STORY', required
        - `trialParams` InstagramTrialParams
          - `graduationStrategy` 'MANUAL' | 'SS_PERFORMANCE', required: Controls how a Trial Reel graduates to followers. `MANUAL` leaves graduation to the user in Instagram. `SS_PERFORMANCE` lets Instagram graduate the Reel automatically based on its performance.
      - LinkedInInput
        - `platform` 'LINKEDIN', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `link` string: URL to publish as a LinkedIn link preview card.
      - LinkedInPagesInput
        - `platform` 'LINKEDIN_PAGES', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `link` string: URL to publish as a LinkedIn link preview card.
      - PinterestInput
        - `platform` 'PINTEREST', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `link` string: Destination URL to attach to the Pin.
        - `pinterestBoardId` string, required: Identifier of the board to pin to.
        - `title` string
      - ThreadsInput
        - `platform` 'THREADS', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
      - TikTokInput
        - `platform` 'TIKTOK', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `allowComment` boolean, required: Whether comments should be allowed for this TikTok post.
        - `allowDuet` boolean, required: Whether duets should be allowed for this TikTok post. This field applies to `postType=VIDEO`. When `postType=PHOTO`, this field is required by the API contract but is not used by TikTok.
        - `allowStitch` boolean, required: Whether stitches should be allowed for this TikTok post. This field applies to `postType=VIDEO`. When `postType=PHOTO`, this field is required by the API contract but is not used by TikTok.
        - `autoAddMusic` boolean, required: Whether TikTok should automatically add music to this post. This field applies to `postType=PHOTO`. When `postType=VIDEO`, this field is required by the API contract but is not used by TikTok.
        - `cover` PostContentMediaInput
          - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
          - `type` 'MEDIA_LIBRARY', required
        - `isAiGeneratedContent` boolean: Whether the TikTok post contains AI-generated content. This field applies to video posts.
        - `isBrandedContent` boolean, required: Whether the post should be disclosed as branded content on TikTok.
        - `isYourBrand` boolean, required: Whether the post should be disclosed as "Your brand" content on TikTok.
        - `postMode` 'DIRECT_POST' | 'MEDIA_UPLOAD'
        - `postType` 'VIDEO' | 'PHOTO', required
        - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'SELF_ONLY' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR'
      - WoopTestInput: WoopTest is a sandbox platform for testing and debugging. Posts targeting `WOOPTEST` go through the full scheduling pipeline but are never published to any real social network.
        - `platform` 'WOOPTEST', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `shouldSucceed` boolean: Whether the simulated delivery should succeed or fail. Defaults to `true`. Set to `false` to simulate a delivery failure.
      - XInput
        - `platform` 'X', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
      - YouTubeInput
        - `platform` 'YOUTUBE', required: Identifies which social media platform this data structure targets.
        - `contentOverride` PostContentItemInput[]: Post content expressed as thread items. The array exists for future thread support. Currently exactly one item is supported.
          - `media` PostContentMediaInput[]
            - `mediaId` string, required: Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).
            - `type` 'MEDIA_LIBRARY', required
          - `text` string: Text content for this thread item.
        - `socialAccountId` string, required: Connected social account identifier.
        - `category` string
        - `madeForKids` boolean
        - `privacy` 'public' | 'private' | 'unlisted', required
        - `tags` string[]
        - `title` string, required

## Response `200`

Validation result.

- ValidatePostResponse
  - `errors` ValidationError[], required: Blocking validation errors. Empty when the request is valid.
    - `field` 'DESCRIPTION' | 'MEDIA' | 'LINK' | 'PINTEREST_BOARD' | 'CONTENT' | 'TITLE' | 'FIRST_COMMENT' | 'INSTAGRAM_TRIAL_PARAMS' | 'TIKTOK_POST_MODE' | 'TIKTOK_PRIVACY_LEVEL' | 'TIKTOK_CONTENT_DISCLOSURE' | 'YOUTUBE_PRIVACY' | 'YOUTUBE_CATEGORY' | 'YOUTUBE_TAGS' | 'SCHEDULE'
    - `message` string, required
    - `path` string, required: JSON path to the invalid input.
  - `isValid` boolean, required: Whether the request passed validation.
  - `warnings` ValidationWarning[], required: Non-blocking validation warnings. Empty when there are no warnings.
    - `field` 'DESCRIPTION' | 'MEDIA' | 'LINK' | 'PINTEREST_BOARD' | 'CONTENT' | 'TITLE' | 'FIRST_COMMENT' | 'INSTAGRAM_TRIAL_PARAMS' | 'TIKTOK_POST_MODE' | 'TIKTOK_PRIVACY_LEVEL' | 'TIKTOK_CONTENT_DISCLOSURE' | 'YOUTUBE_PRIVACY' | 'YOUTUBE_CATEGORY' | 'YOUTUBE_TAGS' | 'SCHEDULE'
    - `message` string, required
    - `path` string, required: JSON path related to the warning.

## Other responses

- `429`: Too many requests are already in progress for this API key.
- `500`: Internal server error.

---

[API](https://skmtc.dev/woopsocial/apis/woopsocial-api.md) · [All operations](https://skmtc.dev/woopsocial/apis/woopsocial-api/llms.txt) · [OpenAPI document](https://skmtc.dev/woopsocial/apis/woopsocial-api/revisions/578a984c20d9?raw)
