Skip to content

Edit a post

PATCH
/posts/{id}
curl --request PATCH \
--url https://api.dropslate.top/v1/posts/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "text": "example", "title": "example", "tags": [ "example" ], "mediaIds": [ "example" ], "settings": { "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" } }, "when": "now", "status": "queued" }'

Content fields (text/title/tags/mediaIds/settings) only on a draft. when reschedules a queued post or times a draft. status: "queued" sends a draft through the same checks and quota as POST /posts. settings replaces the stored block as a whole: send every field you want kept. Requires write.

id
required
string
Media typeapplication/json
object
text
string
title
string
nullable
tags
Array<string>
mediaIds
Array<string>
settings

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
when
One of:
string
Allowed values: now
status
string
Allowed values: queued

The post as edited.

Media typeapplication/json
object
id
string
accountId
string
platform
string
mediaIds
Array<string>
text
string
title
string
nullable
tags
Array<string>
publishAt
string format: date-time
nullable
tz
string
status
string
Allowed values: draft queued live failed
externalId
string
nullable
externalUrl
string
nullable
error
object
code
string
message
string
hint
string
nullable
attempts
integer
createdVia
string
Allowed values: ui api mcp
createdAt
string format: date-time
updatedAt
string format: date-time
statusLine

The post in one sentence, the same one the dashboard and an MCP agent show.

string
Example
{
"tz": "Europe/Kiev",
"status": "draft",
"createdVia": "ui",
"statusLine": "Queued. YouTube · What We Made · 12 Sep, 18:00 (Kyiv)."
}

Monthly post quota exceeded queueing a draft.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

The key is missing the “write” scope, or this route needs a signed-in session instead of a key.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

Does not exist, or belongs to a different workspace - the two look identical from here.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

Content fields on a queued post, or reschedule/cancel while the worker holds it.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}

More than 600 requests in ten minutes for this key, or the workspace hit 60 post requests in an hour.

Media typeapplication/json
object
code
required
string
message
required
string
hint
string
Example
{
"code": "not_found",
"message": "The post does not exist.",
"hint": "Check the id and try again."
}
Retry-After
integer

Seconds to wait.