Skip to main content
Every post names the channels it goes to, by their IDs. This page starts with the channel commands, then covers the life of a post: create, list, change, delete. Every command and flag is also on the command reference.

Find your channels

id is what -i takes. identifier is the network, such as bluesky, wordpress or devto. customer appears when the channel is sorted into a customer. A channel with "disabled": true is turned off in the app and does not publish.
integrations:groups lists your customers as id and name.

Read what a network needs

The answer is an output object: Bluesky and Nostr need no settings. WordPress needs a title and a post type, and DEV needs a title. Read the schema before you post to a network for the first time: examples by network shows the settings each one takes.

Look up a value

Some settings take a value only the network knows, such as a WordPress post type or a DEV tag. Run the helper that integrations:settings lists under tools:
Pass a helper’s inputs with -d as JSON, for example -d '{"word":"baking"}' for a Lemmy community search. A name the channel does not offer fails with Tool not found.

Create a post

-s is required: the publish time in ISO 8601. The post is scheduled for that time. The answer lists one postId for each channel.
A draft keeps its date and waits on your calendar until you schedule it with posts:status. PostQueen checks a draft’s required settings too, so pass them now. The network’s rules on length and media are checked only when you schedule it, so a draft that was accepted can still be refused then.
Upload each file first, then pass the returned path with -m. Separate several files with commas:
A video has to finish processing first: see upload media.
Repeat -c. The first is the post, and each one after it is a reply or a comment. -m pairs with the -c in the same position, and -d sets the minutes to wait between items:
An item may start with -, such as -c "- a smaller size": it is posted as written.The extra items become a thread on Bluesky, Nostr, X and Threads, and comments on Facebook, Instagram and Lemmy. YouTube, TikTok, WordPress, DEV, Hashnode and Listmonk publish the first item only. More in comments and threads.Because -m pairs by position, give every item before the last one with media its own -m, and -m "" to an item that has none. Leaving one out moves every later file onto the wrong item:
List the IDs with commas. Each channel gets its own post:
An empty ID, such as the one after a trailing comma in -i "bluesky-id,", is refused before anything is sent.One --settings object goes to every channel in -i, so mix only channels that take the same settings. For different text or settings per channel, use a --json file.
Wrap the JSON in single quotes. PostQueen adds the network’s type marker (__type) itself, so leave it out.
The file is the request body the API receives. It needs type, date, shortLink and tags at the top, and one entry in posts per channel, each with its own text and settings. Every item in value needs an image list, empty when there is no media, and each image is the id and path from postqueen upload.
campaign.json
type also takes now, which publishes at once. The flags only offer schedule and draft.

Good to know

  • Before it saves anything, PostQueen checks each post the way the app does: the settings, the length and the media. A draft gets only the settings check and the check that each item has text or media. A refused post names the channel and the reason; see troubleshooting.
  • --shortLink is on by default, which lets PostQueen swap links in the text for short links. PostQueen has no link shortener set up today, so links stay as written either way. Pass --no-shortLink to keep every link exactly as written.
  • The date is required even for a draft: it is the time the post goes out once you schedule it. A date that has already passed publishes the post at once.
  • (post:ID) in the text, with the ID of another post of your workspace, becomes that post’s address on its network when this post is published. If that post has no address yet, the placeholder is removed.

List posts

Without dates it lists 30 days back to 30 days ahead. Narrow it with --startDate and --endDate in ISO 8601, and to one customer with --customer. The answer is an object with a posts list:
Each post has its id, content, publishDate, state (QUEUE, DRAFT, PUBLISHED or ERROR), settings (as a JSON string), releaseURL once published, error when it failed, and its integration.

Change a post

Only the keys you pass change, and the text and time stay as they are. It works on drafts and on scheduled posts whose time has not passed. Pass the ID of the post itself, not of one of its comments. If you copy settings from posts:list, leave out __type.
To change a post’s text or time, edit it on the calendar in the app.

Delete a post

This deletes the post and its comments or thread items on that channel, and stops it from going out. When one posts:create went to several channels, each channel has its own post, and the others stay. A post that was already published stays on the network: delete it there.

Connect a published post

Sometimes a network does not return a post’s ID after publishing, and analytics cannot find the post. This happens with TikTok. postqueen analytics:post then answers {"missing": true}. Analytics shows how to connect the post with posts:missing and posts:connect.

Next steps

Examples by network

A command for each network, with the settings it needs.

Upload media

Images and videos, and waiting for a video to be ready.

Command reference

Every command and flag on one page.

Troubleshooting agents

What each error means and how to fix it.
Last modified on September 23, 2026