---
title: "Dry-run schedule/publish checks"
method: POST
path: "/api/posts/validate"
tags: ["Posts"]
---

# Dry-run schedule/publish checks

`POST /api/posts/validate`

## Request

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

Always HTTP 200. Read data.valid and data.issues. Does not write. Facebook Pages accept text, one link, or photos (63,206 chars, images only) and do not use metadata.facebook.

## Headers

- `X-Workspace-Id` string, required

## Request body

- ValidatePostRequest
  - `socialAccountIds` string[], required
  - `content` string, required: Post body. Facebook Pages allow up to 63,206 characters.
  - `metadata` PostMetadata
    - `reddit` RedditPostOptions
      - `subreddit` string, required
      - `title` string, required
      - `kind` 'self' | 'link' | 'image' | 'video', required
      - `body` string
      - `url` string
      - `flairId` string
      - `flairText` string
      - `posterMediaAssetId` string
      - `nsfw` boolean
      - `spoiler` boolean
      - `sendReplies` boolean
      - `resubmit` boolean
    - `instagram` InstagramPostOptions
      - `format` 'feed_image' | 'carousel' | 'reel' | 'story', required
      - `caption` string
      - `altText` string
      - `shareToFeed` boolean
      - `coverMediaAssetId` string
      - `thumbOffset` number
      - `audioName` string
      - `collaborators` string[]
    - `pinterest` PinterestPostOptions
      - `boardId` string, required
      - `boardName` string
      - `title` string, required
      - `description` string, required
      - `link` string
    - `tiktok` TikTokPostOptions
      - `title` string
      - `privacyLevel` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY', required
      - `disableComment` boolean
      - `disableDuet` boolean
      - `disableStitch` boolean
      - `videoCoverTimestampMs` number
    - `discord` DiscordPostOptions
      - `channelId` string, required: Discord channel snowflake
      - `channelName` string
    - `slack` SlackPostOptions
      - `channelId` string, required: Slack channel id (C… or G…)
      - `channelName` string
  - `mediaUrls` string[]: Asset IDs, preview URLs, or storage keys. Facebook Pages are images only (no video).

## Response `200`

Validation result

- object
  - `success` true, required
  - `data` ValidatePostResult
    - `valid` boolean, required
    - `issues` ValidateIssue[], required
      - `socialAccountId` string, nullable
      - `platform` string
      - `code` string
      - `message` string
      - `next` string: One-sentence fix. Optional so older clients can ignore it.

## Other responses

- `401`: Missing or invalid bearer token
- `402`: Workspace is not on a paid plan
- `403`: Wrong workspace, missing scope, or role

---

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