Platforms
9 destinations, connected once and then addressed by account id. Publishing is the same call everywhere — create_post — and SuperGen shapes the payload for whichever platform the account belongs to.
The list
| Platform | Connect by | What it requires |
|---|---|---|
| X (Twitter) | OAuth | Nothing beyond text or media. Threads go as additional_posts. |
| YouTube | OAuth | A title is required. Optional thumbnail, playlist, made-for-kids flag. |
| OAuth | Nothing required. Pass page_id to post as a company page instead of a person. | |
| Aggregator | Nothing required. Optional media_type, collaborators, alt text, cover image, audio name. | |
| TikTok | Aggregator | privacy_level is required. Duet, stitch and branded-content flags optional. |
| Aggregator | page_id is required — Facebook has no personal-profile posting here. | |
| Threads | Aggregator | Nothing required. reply_control optional. |
| Telegram | Bot | Add our bot to the channel as an admin, then connect_telegram_channel. |
| Bluesky | App password | An app password from your Bluesky settings, not your account password. |
Why the connect methods differ
Not every platform will sell you a normal API. OAuth is the direct route and is what X, YouTube and LinkedIn get. Aggregator platforms reach the network through a partner, because their own APIs are gated behind app review that is not self-serve. Telegram works through a bot you make an admin of your channel, and Bluesky uses an app password because that is what the protocol offers.
None of this leaks into how you publish. The difference shows up once, when connecting.
Per-platform fields are validated, not guessed
Pass an option a platform does not accept and the call is refused up front, naming the field and what is allowed — rather than being accepted and then rejected by the platform after the render has been paid for. The full field list per platform is served by the same spec the validator uses, and every choice the UI offers is one the validator accepts.
AI disclosure is automatic
Where a platform requires synthetic media to be declared — TikTok and YouTube — a post built from a generated job carries that flag without you passing anything, and you cannot override it to false for media we made. Undeclared AI media is down-ranked hard, so this is not left to the caller. Footage you supplied yourself can be declared non-synthetic, because it is.
Partial failure stays partial
Posting to several accounts at once reports each one separately. Four successes and one typed error come back as exactly that — not a single failure — so you are never left hunting for posts that already went out. Errors are listed on Errors.