Skip to content

Dry-run a post before creating it

POST
/posts/plan
curl --request POST \
--url https://api.dropslate.top/v1/posts/plan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "targets": { "accountIds": [ "example" ], "groupId": "example" }, "mediaIds": [ "example" ], "text": "example", "title": "example", "tags": [ "example" ], "perPlatform": { "youtube": { "visibility": "public", "madeForKids": false, "useCoverAsThumbnail": true, "category": "27", "language": "uk", "audioLanguage": "en-US", "recordingDate": "2026-09-01", "license": "youtube", "embeddable": true, "publicStatsViewable": true, "containsSyntheticMedia": false, "paidProductPlacement": false, "notifySubscribers": true, "playlistId": "PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf" }, "tiktok": {}, "instagram": { "contentType": "reels", "collaborators": [ "example" ], "shareToFeed": true, "altText": "example", "coverMs": 1 }, "facebook": { "contentType": "photo", "link": "https://example.com" }, "threads": { "topicTag": "example", "linkAttachment": "https://example.com", "altText": "example", "replyControl": "everyone" } }, "overrides": { "threads": { "text": "A shorter line for Threads." }, "youtube": { "title": "The full title", "tags": [ "dogs", "history" ] } }, "when": "now" }'

CLAUDE.md “plan before create”: no side effects, no write scope needed. Same body as POST /posts without confirm; lists a row and any issue per account. Call this first and show its table before POST /posts.

Media typeapplication/json
object
targets
required
object
accountIds
Array<string>
groupId
string
mediaIds
Array<string>
text
string
title
string
tags
Array<string>
perPlatform

Per-network settings keyed by platform. Unknown keys are refused.

object
youtube

Everything videos.insert can write. Not settable through the YouTube API (set in YouTube Studio): Test & Compare, recording location, end screens, cards, monetization, comments.

object
visibility
string
default: public
Allowed values: public unlisted private
madeForKids
boolean
useCoverAsThumbnail

The first image of the post becomes the thumbnail (the channel must be verified for custom thumbnails).

boolean
default: true
category

VideoCategories id; default 22 (People & Blogs).

string
/^[0-9]{1,3}$/
Example
27
language

BCP-47 language of the title and description.

string
/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/
Example
uk
audioLanguage

BCP-47 language spoken in the video.

string
/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/
Example
en-US
recordingDate
string format: date
Example
2026-09-01
license
string
default: youtube
Allowed values: youtube creativeCommon
embeddable
boolean
default: true
publicStatsViewable
boolean
default: true
containsSyntheticMedia

YouTube altered or synthetic content disclosure.

boolean
paidProductPlacement
boolean
notifySubscribers
boolean
default: true
playlistId

A playlist on the same channel; a refusal is reported on the post, the video still goes out.

string
/^PL(?:[A-Za-z0-9_-]{16}|[A-Za-z0-9_-]{32})$/
Example
PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf
tiktok
object
instagram
object
contentType
string
default: reels
Allowed values: reels post story carousel
collaborators

Up to 3 usernames invited as collaborators (1.3.0: was 20).

Array<string>
<= 3 items
shareToFeed

Reels only.

boolean
default: true
altText

The image of a feed post (1.3.0); not sent on carousels yet.

string
<= 1000 characters
coverMs

The Reel cover frame, milliseconds into the video (1.3.0).

integer
facebook
object
contentType
string
default: video
Allowed values: photo video reel story text
link

Text posts only (1.3.0). A video takes the post title.

string format: uri
<= 2048 characters /^https:///
threads

Base tags are not appended to a thread; it takes one topicTag. replyControl is accepted and ignored since 1.3.0.

object
topicTag
string
>= 1 characters <= 50 characters /^[^.&]+$/
linkAttachment

A link preview on a thread with no files (1.3.0).

string format: uri
<= 2048 characters /^https:///
altText

Images (1.3.0).

string
<= 1000 characters
replyControl
string
Allowed values: everyone accounts_you_follow mentioned_only
overrides

A network’s own text, title and tags instead of the post’s: each account of that network gets overrides.<network>.text ?? text, and so on. Only networks with a connector.

object
youtube
object
text
string
<= 10000 characters
title
string
<= 500 characters
tags
Array<string>
<= 50 items
instagram
object
text
string
<= 10000 characters
title
string
<= 500 characters
tags
Array<string>
<= 50 items
facebook
object
text
string
<= 10000 characters
title
string
<= 500 characters
tags
Array<string>
<= 50 items
threads
object
text
string
<= 10000 characters
title
string
<= 500 characters
tags
Array<string>
<= 50 items
tiktok
object
text
string
<= 10000 characters
title
string
<= 500 characters
tags
Array<string>
<= 50 items
Example
{
"threads": {
"text": "A shorter line for Threads."
},
"youtube": {
"title": "The full title",
"tags": [
"dogs",
"history"
]
}
}
when
One of:
string
Allowed values: now draft

One row per account, an ok flag and the quota this would use.

Media typeapplication/json
object
ok
boolean
status
string
Allowed values: draft queued
rows
Array<object>
object
quota
object
table

The same monospaced table MCP tools show.

string
Example
{
"status": "draft"
}