---
title: "Dry run: would each network accept this post?"
method: POST
path: "/platforms/validate"
tags: ["Validation"]
---

# Dry run: would each network accept this post?

`POST /platforms/validate`

## Request

- Base URL: `https://preflight.social/v1`
- URL: `https://preflight.social/v1/platforms/validate`
- Auth: HTTP bearer

The same checks POST /posts runs, without creating anything: text length the way each network counts it, hashtags, mentions, files, video length, fps, aspect ratio, per-network options and the plan's allowance. Any scope.

## Request body

- object
  - `content` string
  - `mediaIds` string[]
  - `mediaItems` object[]: The files' facts, when they are not uploaded yet.
    - `kind` 'image' | 'video', required
    - `sizeBytes` integer
    - `durationSeconds` number
    - `fps` number
    - `mimeType` string
    - `width` integer
    - `height` integer
  - `altTexts` string[]
  - `targets` TargetInput[], required
    - `platform` 'youtube' | 'tiktok' | 'instagram' | 'facebook' | 'threads' | 'twitter' | 'linkedin' | 'pinterest' | 'bluesky' | 'mastodon' | 'telegram' | 'discord' | 'tumblr', required: A network's name. twitter (X) is text-only and not offered to new accounts.
    - `accountId` string, uuid: Which connected account, when the workspace has several for one network.
    - `options` object: Per-network settings: youtube.title, tags, categoryId, privacy, playlistId, thumbnailMediaId, subtitles, firstComment; tiktok.privacy (required), allowComments, asDraft; instagram.placement (feed, reel, story), shareToFeed, collaborators; facebook.asReel, firstComment; threads.poll, thread; pinterest.boardId (required), title; bluesky/mastodon/twitter.thread; mastodon.visibility, spoilerText; discord.threadName; tumblr.tags; linkedin.firstComment; caption to override the text for this network. See /documentation#options.

## Response `200`

The issues, if any; ok is false when any is an error.

- object
  - `ok` boolean
  - `issues` ValidationIssue[]
    - `platform` 'youtube' | 'tiktok' | 'instagram' | 'facebook' | 'threads' | 'twitter' | 'linkedin' | 'pinterest' | 'bluesky' | 'mastodon' | 'telegram' | 'discord' | 'tumblr': A network's name. twitter (X) is text-only and not offered to new accounts.
    - `severity` 'error' | 'warning', required
    - `message` string, required
    - `code` string: For a plan limit: post_limit, upload_limit or channel_limit.

## Other responses

- `400`: The body did not validate (invalid_request; field says which).
- `401`: Missing, expired or unrecognised key.

---

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