Skip to main content
Every network wants something slightly different. X wants to know who may reply, Reddit wants a flair decision even when the answer is no, TikTok wants eight fields and refuses a shorter object. This page has a command you can paste for each of them, and says what that network will reject you for. Every example here is ready to run once you have swapped in your own channel id. Nothing on this page is a sketch.
These commands publish. -s takes a real date, and nothing checks that it is in the future: a date in the past is accepted and the post goes out on the next pass. The examples use a date a week out. If you want to try one safely, add -t draft and it lands on your calendar without being sent.

First, your channel ids

Every command below ends with -i and a channel id. That id is not the network name and not the handle, it is the id PostQueen gave the channel when you connected it. Get the list once:
The identifier tells you which network it is. To pull one straight into a variable:
Throughout this page, replace x-id, reddit-id and the rest with the real values.
Not sure what a network accepts? postqueen integrations:settings <channel-id> prints its rules, character limit and settings schema. Integrations shows the output.

Checking it worked

After any command on this page:
Your new post is in the list with a state. QUEUE means it is waiting for its time, PUBLISHED means it has gone out, ERROR means the network refused it. If you see ERROR, the reason is on the post, and Troubleshooting covers the common ones.

X (Twitter)

Simple post

Thread

Repeat -c once per tweet. -d is the delay in minutes between them.

Reply controls

who_can_reply_post takes one of everyone, following, mentionedUsers, subscribers or verified. Leave the setting out and X applies its own default.

Reddit

Post with a flair

is_flair_required is not optional. Leave it out and the call is refused before the post is created. Say false when the subreddit does not need a flair, and drop the flair object with it. restrictions answers with an object, not a list: .output.flairs[] holds the flairs, and .output.is_flair_required tells you whether the subreddit insists on one. A flair you send needs both its id and its name.

Scripted

One post can target several subreddits: subreddit is an array. The comment feature is the exception, it only works when you target a single subreddit. Reddit explains why.

YouTube

title and type are both required and neither has a default. type must be exactly public, private or unlisted.
Tags share a 500-character budget, counted across all of them together rather than per tag. A tag containing a space costs two extra characters, because YouTube wraps it in quotes. Go over and the whole post is refused with “The maximum allowed is 500 characters in total for all tags.”
selfDeclaredMadeForKids (yes or no) and thumbnail are optional.

TikTok

TikTok is the strictest settings block in the CLI. Eight of these fields are required and there are no defaults, so a shorter object is refused rather than filled in: content_posting_method, privacy_level, duet, stitch, comment, autoAddMusic, brand_content_toggle and brand_organic_toggle. Only title and video_made_with_ai are optional. TikTok applies these settings only when content_posting_method is "DIRECT_POST". With "UPLOAD", which sends the video to the TikTok app inbox instead of publishing it, every setting except the post content is silently discarded. duet and stitch apply to video posts only.
An unapproved TikTok app can only post privately. If your posts come back with App not approved for public posting, contact support, that is TikTok’s audit gate rather than anything in this command. TikTok covers it.

Instagram

Story

Reel

A single video with post_type: "post" is published as a Reel:

Reel with audio

Search the Instagram audio catalog and attach a track to the Reel (Facebook Business-linked channels only, and an empty q returns trending audio):
Instagram fetches your media from a URL rather than accepting the file from PostQueen, so /uploads has to be reachable over public HTTPS. On a laptop install it will not be, and the post fails. Uploads and Storage explains the options.

LinkedIn

Every LinkedIn setting is optional, so the plain command above works as it is.
post_as_images_carousel turns the images into a document carousel; carousel_name is the title shown on it. Both are optional, and without the first one the images post as an ordinary gallery.

Pinterest

board is required and must be the board’s id, not its name. Sending the name is the usual reason a Pinterest post is rejected with “Board is required” even though you clearly set one. The boards trigger above returns { id, name } pairs.
title caps at 100 characters. link has to be a valid URL if you send it. Both are optional, as is dominant_color.

Discord

channel is required and is an id, not the #name you see in the sidebar. The channels trigger lists the ones the PostQueen bot can post to; a channel missing from that list is a permissions question on the Discord side.

Batch scheduling

Schedule several posts across different dates:

Multi-platform campaign

Post different content per platform in one command using a JSON file:
Example campaign.json:
Every entry in posts needs its own integration.id, drafts included. The full field reference for this file is in Managing Posts.

Next steps

What the CLI cannot do

The gaps, and which surface covers each one

Command reference

Every command and flag, including the two that mean different things

Troubleshooting

What the errors mean and how to clear them

Provider setup

Creating the OAuth app each network needs