Create a post
Schedule a post, publish it now or save a draft, on one channel or several, with media and threads.
type, date, shortLink, tags and posts. One date applies to every channel in the request: a date inside an entry of posts is ignored. To give channels different times, send one request per time. Each entry in posts is one channel, and each item in its value list is one part of the post: the first is the post, the rest are its thread or comments. The request examples on this page show whole requests for Bluesky, Nostr, WordPress and DEV.
A step-by-step guide, from finding the channel id to checking the result, is Schedule a post with the API.
type
schedule, now and update), and again when you move a draft to schedule with Change post status. So a draft that was accepted can still be refused then.Two fields that are easy to miss
imageis required on every item ofvalue. Send[]for text only. Leaving it out answers400withposts.0.value.0.image must be an array.groupdeletes. Leave it out for a new post. When it names an existing group, every post of that group that the request does not resend is deleted.shortLinkchanges nothing today. It is required, but PostQueen has no link shortener set up, so links stay as written withtruetoo.
.png, .jpg, .jpeg, .gif, .webp or .mp4, and a video must be ready: see Upload a file.
Link to another post
Write(post:ID) in a content, with the id of another post of your workspace, and PostQueen replaces it with that post’s address on its network when this post is published. Use it to point a new post or a comment at an earlier one:
postId from this endpoint’s answer or an id from List posts. The address is read at publish time, so the other post has to be published first. When it has no address by then, or the id is not a post of your workspace, the placeholder is removed and the rest of the text goes out.
Settings by network
settings.__type is always set from the channel, so you may leave it out; what matters is the shape of the rest. Networks without required settings need no settings at all. Every field of every network, with examples: Posting settings by network.
What comes back
A201 with one row per channel entry. Keep the postIds: the other post endpoints take them.
400 before anything is saved, naming the network and the channel:
400 with Integration with id <id> not found, and nothing is saved. Take the ids from List channels.
Every status the endpoint returns, and what to do about it, is on Limits and errors.
Changing or copying a post
-
Change a scheduled post. Send it again with
value[].idset to the id of each part you keep, and itsgroupfrom List posts so the parts you leave out are deleted. Useupdatewith the post’s currentdateto change its text or media without touching the schedule, orschedulewith a newdateto move it. To change only its settings, Update post settings is simpler. -
updateneeds the id of the main post. In each entry ofposts,value[0].idmust be the id of a post in your workspace, and of the post itself, not of one of its comments. A missing, mistyped or deleted id is refused with400before anything is saved:Take the ids from List posts. Later items ofvaluewith a new id, or none, are added to the post as new comments or thread items. -
Publish a post again.
scheduleornowwith the id of a post that was already published is refused with400. Add"republish": trueif you mean it. -
Copy a post. There is no copy endpoint. Read the post with List posts, parse its
settingsandimage(they come back as JSON strings), and send the content as a new post without any post ids orgroup.
Size and rate limits
POST /posts requests an hour. A request refused with 400 during validation, such as a missing setting or a post that is too long, gets its slot back. A refusal once the posts are being created, such as a republish without republish or “Media not found”, counts. One request can carry many channels and a whole thread, and it counts once. See Limits and errors.Authorizations
Your API key from Connections > API Keys, or an OAuth access token (pos_...). Send it as it is, with no Bearer prefix.
Body
schedule queues the post for date, and publishes it at once when date has already passed. now publishes at once. draft saves it without publishing. update changes posts named by value[].id without starting a new publish. Its value[0].id must be the id of a main post of the workspace, not of a comment, or the request is refused with 400
draft, schedule, now, update Publish date and time in UTC, ISO 8601. Required for every type; now uses the current minute instead. A date in the past with schedule publishes at once. It applies to every entry in posts: a date inside an entry is ignored
Replace links in the text with PostQueen short links. Required; send false to keep links as they are. PostQueen has no link shortener set up today, so true leaves links as they are too
Tags to attach. Required: send [] for none
One entry per channel. Each entry becomes its own post with its own group
1Accepted and not used
Repeat the post every this many days. Leave it out for a post that goes out once
x >= 1Needed to publish again a post that was already published (schedule or now with a value[].id of a published post). Without it the request is refused with 400