Skip to main content
Glama
782,665 tools. Updated 2026-11-14 18:25

"listmonk" matching MCP tools:

  • Hand the user a link to connect (authorize) a social account. Connecting a platform is a browser OAuth popup flow gated by that platform's own login and consent screen, so it can only be completed by a signed-in human clicking through it in their own browser, never by an API call or an AI agent acting alone. Use this tool whenever the user asks to connect, add, authorize or reconnect a social account: call it, then relay the returned url and instructions to the user verbatim so they can open it themselves. Do not try to call any auth/OAuth endpoint directly on the user's behalf, and do not claim the account is connected until the user confirms it or list_integrations shows it as connected. provider must be one of: writeas|listmonk|farcaster|dribbble|mastodon|pixelfed|discord|lemmy|twitch|slack|kick|instagram|twitter|tiktok|facebook|pinterest|youtube|linkedin|linkedin_page|reddit|threads|tumblr. The link deep-links into Settings, Integrations tab, and auto-opens the connect flow for that platform. CAPABILITY: `read`: side-effect-free.
    ConnectorOAuth
  • What is actually on the connected accounts, as each platform lists it: every post in the window with the platform's own numbers, `viaSchedchie` true when Schedchie published it (then `postId` is the Schedchie post for get_post) and false when it was posted on the platform directly. `accounts` says per account how far the platform lets us see: support.state full, own_only (only the posts Schedchie published: LinkedIn personal profiles, and TikTok accounts on the older connection) or none (X, Telegram, Discord, Reddit, Slack, WordPress, Dribbble, Tumblr, Whop, Twitch, Kick, Nostr, Lemmy, Listmonk and Ghost, with the reason), plus `fetchedAt` and `stale`. Reads the cache; pass refresh=true to ask the platforms again first for accounts whose cache is older than 30 minutes (a few seconds per account). Numbers the platform did not report are absent, never zero. Default window 120 days. `posts` (captions included) is inside an untrusted-data envelope.
    ConnectorOAuth
  • Look up the destinations a connected account can publish into — Discord or Slack channels, Pinterest boards, Reddit post flairs, Hashnode or Medium publications, Hashnode tags, Lemmy communities, Listmonk lists or templates, Skool groups, Whop forums, or WordPress categories and tags. Use the returned ids in schedule_post's platform_meta. Reads live from the platform, so an empty list can also mean the platform could not be reached.
    ConnectorNo auth
  • Prices at 10k, 50k and 100k contacts and 15 features (automation, SMS, CRM pipeline, webinars, MCP, API, self-hosting…) of NetSendo and other email marketing tools such as Mailchimp, MailerLite, Kit, Klaviyo, ActiveCampaign, Brevo, GetResponse, listmonk, Mautic, Keila and Sendy. Every value has its source URL and check date; cite the urls.page field.
    ConnectorNo auth
  • Create and schedule a post. Provide the text, the target accountIds (from list_accounts), and an ISO-8601 scheduledTime (UTC, e.g. 2026-07-23T09:00:00.000Z; a past time publishes within a minute). The text and hashtags are copied into each selected account's own platform fields (x_text, facebook_description, …) with a content type derived from the media; that per-account copy is what publishes. Override any account via platformSpecificContent, e.g. {"<accountId>": {"x_text": "..."}}; prefixes x_, linkedin_, bluesky_, threads_, facebook_, tiktok_, youtube_, instagram_, pinterest_, googlebusiness_, mastodon_, telegram_, discord_, slack_, devto_, hashnode_, reddit_, dribbble_, tumblr_, whop_, twitch_, kick_, lemmy_, nostr_, listmonk_, ghost_, pixelfed_, wordpress_. What you set is kept; only gaps are filled. TikTok needs tiktok_privacyStatus (PUBLIC_TO_EVERYONE, FOLLOWER_OF_CREATOR, MUTUAL_FOLLOW_FRIENDS, SELF_ONLY); TikTok's rules make it the creator's own choice, and without it the call is refused. Exception: a video on a TikTok Business account may pass null (the account's own setting); a narrower one is refused unless the account can keep it. YouTube needs youtube_title (at most 100 characters, no < or >) and youtube_privacyStatus (public, unlisted or private), both the user's own: ask the user for each. Schedchie never makes a title up from the text and never picks a visibility, so without either the call is refused. MEDIA: `media` takes the descriptors upload_media returns, one per file (or their "uploads/…" names). Every file goes to every account; a video descriptor may carry a `cover` (see that field). Refused here, by account name: text+hashtags over that platform's caption limit (X 280, Bluesky 300, Threads 500); a file count no platform shape allows; media-less Instagram/TikTok/YouTube/Pinterest; Pinterest without pinterest_boardId (lookup_platform_options, kind pinterest_boards). Sizes, ratios, durations (IG Story video: 60 s max; facebook_contentType "story": 1 image or 1 video, 60 s max) are checked by the publish pipeline. Each call is a new post; one left unanswered hands out the idempotencyKey to repeat it with. A member who needs approval gets the post held as pending_approval. Plain X posts are included under fair use, per X account. A post whose text contains a link uses 10 credits, and before the first paid month every X post uses credits. Call get_x_usage before scheduling X posts with links or many X posts: a post that will not go out on X is saved, and the result's `warnings` carry x_fair_use_reached, x_starts_with_plan, x_link_needs_credits or x_needs_credits. AI-content labels, true|false per account: youtube_containsSyntheticMedia (YouTube's "altered or synthetic content" disclosure), instagram_is_ai_generated (Instagram's AI info label, every content type), x_made_with_ai (X's made-with-AI disclosure) and tiktok_is_aigc (TikTok's AI-generated label). They disclose realistic content made or altered with AI. tiktok_is_aigc labels VIDEO posts only: TikTok has no AI label for photo posts, so it is ignored there and the result's notes say so. Threads has no AI label in its API. A Discord account is one connected channel, and the post goes to that channel: discord_text with up to 2000 characters including hashtags, up to 10 files at 20 MiB each and 25 MiB in all. discord_options: threadName (a forum channel's post title, up to 100 characters; the text's first line otherwise), silent (true sends it without a notification), allowMentions (true lets the text ping; off otherwise), poll ({question up to 300 characters, answers: 2-10 up to 55 characters each, durationHours 1-768, allowMultiselect}, sent only with discord_contentType "POLL" and no files). A Slack account is one channel in a workspace, and the post goes to that channel as the Schedchie app: slack_text with up to 4000 characters including hashtags, up to 10 files at 1 GB each with the text as their message. slack_options: unfurlLinks (false posts links without a preview; on otherwise). Dev.to and Hashnode publish articles. Each needs its title: devto_title (up to 128 characters) or hashnode_title (up to 250); Schedchie never takes one from the text. The text is the article body in markdown, up to 100000 characters, sent as written except that single line breaks are kept as line breaks (plain markdown would join the two lines). hashtags become the article's tags (devto_tags, hashnode_tags) and are never added to the body: Dev.to takes up to 4, letters and digits only, each up to 30 characters (lowercased at publish, so Next.js becomes nextjs), Hashnode up to 5. The first image is the cover: at most 1 image, no video. Dev.to also takes devto_description (a short summary of the article), devto_canonical_url (the http(s) address where it first appeared) and devto_series (the name of the series it belongs to). Hashnode also takes hashnode_subtitle (up to 250 characters, shown under the title) and hashnode_canonical_url. A Hashnode account is one blog, and Hashnode publishes through its API only on a Pro blog. A WordPress account is one site (list_accounts gives wordpressKind and wordpressSiteUrl), and the post goes out there as a published post at the scheduled time: wordpress_title (optional, up to 300 characters; the text's first line otherwise, cut at a word near 100 characters when longer), wordpress_text sent as HTML (blank lines make paragraphs, line breaks stay, bare links become links), wordpress_hashtags become tags and are never added to the body, wordpress_categories and wordpress_tags take names (matched to the site's own, created when missing; up to 20 each, hashtags counted with the tags), wordpress_excerpt (up to 1000 characters), and up to 10 images, no video: the first is the featured image, the rest follow the text. A Reddit account is one Reddit user. Each post goes to ONE subreddit, named in reddit_subreddit without r/; a second subreddit is a separate post (another call), never one call sending a link to many subreddits. reddit_title is required (up to 300 characters). reddit_contentType: TEXT (body in reddit_text, up to 40000 characters including hashtags), LINK (reddit_url, no files), IMAGE (one image) or VIDEO (one video); the body goes out on TEXT posts only. reddit_flair_id and reddit_flair_text (text only where the flair is editable): a subreddit may require flair, and the publish is refused without it. reddit_nsfw, reddit_spoiler, reddit_sendreplies (true|false), reddit_first_comment (up to 10000 characters, posted by the same user under the post). A Dribbble account is one Dribbble user; a team is a per-post choice: dribbble_teamId, the id of one of the account's dribbbleTeams in list_accounts, posts the shot to that team, and without it the shot goes out as the user. A shot needs dribbble_title, its title; Schedchie never takes one from the text. The text is the shot's description, plain text up to 10000 characters, and hashtags become its tags (dribbble_tags, up to 12 once a leading # is dropped and a repeat in any case counts once), never added to the description. dribbble_lowProfile true asks Dribbble to mark the shot low profile; accounts without Dribbble Pro have been seen to ignore it. A shot is exactly 1 image: GIF, JPG or PNG of exactly 800x600 or 400x300 pixels and at most 8 MB, no video. It is never resized, so crop it to 800x600 first. Each shot is scheduled on its own with schedule_post; schedule_posts refuses Dribbble. A Tumblr account is one blog: tumblr_text up to 40960 characters including tags (sent as text blocks of 4096), tumblr_hashtags as Tumblr tags (no #, spaces allowed, no commas), up to 30 images or one video (never both), tumblr_alt_texts with one alt text per image in media order. tumblr_options: state ("published", the default, or "draft" to save it as a draft on the blog), sourceUrl (an http or https URL). Tumblr does not allow the same post on several blogs, so each blog needs its own text. A Whop account is one Whop company you own or administer; a post goes to one of its forums, named by whop_options.experienceId (the forum's exp_ id, required; no forum is the default: copy it from an earlier post to that forum via get_post, or pick the forum in the Schedchie composer). whop_text is the body, in Markdown, up to 50000 characters including hashtags; up to 10 images or videos; a body or a file is needed. whop_options: title (optional headline, up to 255 characters), pinned (true pins it to the top of the forum), forumName (display only). whop_first_comment is posted as a reply under the post. A Twitch account is one channel: the broadcaster who connected it. twitch_contentType "CHAT" (the default) sends twitch_text as a chat message in the channel, "ANNOUNCEMENT" as an announcement in its chat, and "SCHEDULE" adds a stream to the channel's schedule. twitch_text takes up to 500 characters including hashtags; on a SCHEDULE post it is the stream's title, optional, up to 140 characters, hashtags not added. twitch_options: announcementColor for an announcement (primary, blue, green, orange, purple; primary, the channel's own accent colour, is the default). A SCHEDULE post needs scheduleStartTime (RFC 3339, after the post's scheduledTime; a start already past at publish is refused then), scheduleTimezone (an IANA name such as Europe/Bratislava) and scheduleDurationMinutes (a whole number from 30 to 1380); scheduleRecurring true repeats it every week, and a one-time stream needs an affiliate or partner channel; scheduleCategoryId (the category's Twitch id) or scheduleCategoryName (matched by name, ignoring case, when it publishes) sets its category. Text only: Twitch refuses a post with files. A Kick account is one channel: the broadcaster who connected it. kick_text goes out as a chat message in the channel, up to 500 characters including hashtags, counted as a reader sees them (an emoji is one), and at most 2,048 bytes of UTF-8. Text only: Kick refuses a post with files. A Lemmy account is one user on one instance; the community is chosen per post in lemmy_community: its name (technology) for one on the account's own instance, or name@instance (technology@lemmy.world); !name@instance and an https://instance/c/name link work too. lemmy_title is required (3 to 200 characters). lemmy_text is the Markdown body, up to 50000 characters including hashtags. lemmy_url makes it a link post and one image an image post (no video, never a link and an image together); lemmy_contentType (TEXT, LINK or IMAGE) follows from them. lemmy_nsfw (true|false); lemmy_first_comment (up to 10000 characters) is posted by the same user under the post. Each post goes to ONE community: a second community is a separate post (another call). A Nostr account is one npub, connected through the user's own remote signer (NIP-46). Schedchie never holds the private key: every note is signed by that signer at publish time, so it must be online then; if it is not, the post fails and can be retried. A post is a kind 1 text note, up to 8,000 characters, links inline. No images or video. A first comment is posted as a reply note. A Listmonk account is one self-hosted listmonk instance. Each post is one email campaign to the lists in listmonk_listIds (ids from list_accounts), with listmonk_subject as the subject; it is started at the scheduled time and mails every subscriber of those lists once. listmonk_subject is required, up to 200 characters. listmonk_listIds is required: 1 to 20 ids from the account's listmonkLists. listmonk_text is the body, up to 100000 characters; without it the text is used. listmonk_format is markdown (the default, sent as written) or richtext (blank lines make paragraphs, bare links become links). Hashtags are never put into the email. Up to 10 images, no video; they go after the text. The instance's default template and from address are used. A Ghost account is one Ghost site (5.0 or later, self-hosted or Ghost(Pro); list_accounts gives ghostSiteUrl and ghostNewsletters), and the post is published there at the scheduled time: ghost_title (optional, up to 255 characters; the text's first line otherwise; a post needs a title or text), ghost_text sent as HTML (blank lines make paragraphs, line breaks stay, bare links become links), ghost_excerpt (up to 300 characters), ghost_tags take names (matched to the site's own, created when missing) and ghost_hashtags become tags too, never added to the body: up to 20 in all, each up to 191 characters. ghost_visibility is public (the default), members (members only) or paid (paying members only). Up to 10 images, no video: the first is the feature image, the rest follow the text. ghost_newsletter (a slug from ghostNewsletters) also emails the post to that newsletter's members: ghost_emailSegment picks who gets it (all, the default; status:free; status:-free), and ghost_emailOnly true mails it without putting it on the site; both need ghost_newsletter. A newsletter is sent once and never resent, and deleting the post on the site never unsends the email. A Pixelfed account is one user on one Pixelfed server (name@host). A post is photos or a video with a caption: one photo, one video, or an album of several, up to the server's limit (20 files on pixelfed.social, often fewer elsewhere). Text-only posts are refused: every Pixelfed post needs at least one photo or video. pixelfed_text is the caption, up to 2000 characters including hashtags on pixelfed.social; each server sets its own limits and refuses past them. pixelfed_visibility is public (the default), unlisted or private (followers only). pixelfed_sensitive (true|false) puts the media behind a warning, and pixelfed_spoiler_text (up to 140 characters) is the warning's text, sent only with pixelfed_sensitive true. pixelfed_comments_disabled (true|false) turns comments off. pixelfed_alt_text, or pixelfed_alt_texts with one per file, describes the media. pixelfed_first_comment (up to 2000 characters on pixelfed.social) is posted by the same user as a reply under the post, and is refused when comments are off. pixelfed_contentType (PHOTO, ALBUM or VIDEO) follows from the files. Publish options, per account, alongside that platform's other fields: instagram (beta): instagram_first_comment (text posted as a comment on the new post the moment it publishes. Skipped for instagram_contentType "STORY" (an Instagram story has no comment edge). Needs instagram_business_manage_comments (instagram_manage_comments on a Facebook-connected account) on the account's connection: without it the comment is skipped and the post still publishes); instagram_audio_name (REEL only: names the reel's original audio (the sound already in the uploaded video). Instagram allows exactly one rename per audio. Ignored when instagram_audio_id is set: attached music replaces the original audio); instagram_audio_id (REEL only: an audio_id from lookup_platform_options (kind instagram_audio); the reel publishes with that song attached. Facebook-connected Instagram accounts only: on an account connected with Instagram sign-in the post is refused (400) with the fix. A song Instagram no longer offers at publish time is left off and the reel publishes without it, reported as a partial publish. Refused on any other content type); instagram_audio_title (display-only carry of the chosen track's title, so the composer can re-show the choice); instagram_audio_artist (display-only carry of the chosen track's artist); instagram_audio_volume (0-100: the attached track's volume (default 100). Only meaningful with instagram_audio_id); instagram_video_volume (0-100: the video's own sound level under an attached track; 0 mutes it. Only meaningful with instagram_audio_id); instagram_trial_reel (REEL only: true publishes a TRIAL reel: Instagram shows it to non-followers first and promotes it to everyone automatically once it performs (graduation strategy SS_PERFORMANCE). The same test a creator would run by hand in the app. Instagram only offers it to accounts with at least 1,000 followers; below that the reel publishes as a regular reel and the publish is reported as partial with that reason); instagram_collaborators (up to 3 Instagram usernames, comma-separated (with or without @), invited as collaborators on a feed image, reel or carousel; the post appears on their profile once they accept. Not for instagram_contentType "STORY". A username Instagram cannot resolve is dropped (reported as a publish step) rather than failing the post); instagram_user_tags (BETA. up to 20 Instagram usernames, comma-separated (with or without @), tagged on the media as people tags (clickable). Works on instagram_contentType "STORY", "POST", "REEL" and "CAROUSEL" (tagged on every carousel item). Only PUBLIC Instagram accounts can be tagged. No positions: feed images get default spots, stories and reels tag by username. If Instagram refuses the tags the post publishes without them (reported as a publish step) rather than failing) | tiktok (beta, except tiktok_first_comment): tiktok_title (PHOTO posts only: a title published with the photos, up to 90 characters (never shortened). TikTok videos have no title; their caption is the text); tiktok_auto_add_music (photo posts only: when true TikTok automatically adds recommended music to the published photos. The track is TikTok's pick; tiktok_music_id chooses one instead); tiktok_music_id (video or photo: an id from lookup_platform_options (kind tiktok_music); the post publishes with that track. Only for accounts whose get_tiktok_creator_info says musicSelectable, and not on a Followers/Friends/Only me video (refused with the fix)); tiktok_music_title (display-only carry of the chosen track's title); tiktok_music_artist (display-only carry of the chosen track's artist); tiktok_music_cover (display-only carry of the chosen track's coverUrl); tiktok_music_volume (VIDEO only, 0-100: the track's volume (default 100)); tiktok_original_volume (VIDEO only, 0-100: the video's own sound under the track; 0 mutes it (default 100)); tiktok_music_start_ms (VIDEO only: ms into the track where it starts (default 0)); tiktok_upload_to_draft (video or photo: true sends the post to the account's TikTok app inbox as a draft instead of publishing it; the creator finishes and posts it in the TikTok app. A draft carries no music, and a video draft no caption. Its publishResults entry then carries inboxFallback and draft: delivered, not published); tiktok_first_comment (text posted as the account's own comment on the new post once TikTok makes it public, up to 1,200 characters. Public posts only: never on Followers/Friends/Only me, an inbox draft, or with comments turned off. Needs the account's TikTok Business connection with the comment permission; without it the post publishes and the comment is skipped with that reason) | facebook (beta): facebook_first_comment (text posted as the Page, as a comment on the new post, the moment it publishes. Skipped for facebook_contentType "story" (a Page story has no comments). Needs pages_manage_engagement on the account's connection: without it the comment is skipped and the post still publishes) | threads: threads_reply_control (who may reply: one of everyone | accounts_you_follow | mentioned_only | parent_post_author_only | followers_only, LOWERCASE (Threads hands this back UPPERCASE when a post is read, and refuses that same value on the way in). Threads accepts it only when the post is created, never afterwards. Omit the field to keep the account's own Threads setting); threads_location_id (a Threads place id, published as the post's location: an `id` from lookup_platform_options (kind threads_locations) (schedchie:library) or one the user supplies; place ids are Threads' own and cannot be derived from a name); threads_location_name (the label Schedchie displays for that place. Display only: it is never sent to Threads, which offers no way to read a published post's location back); threads_crossreshare_to_ig (true|false: also share the Thread to Instagram as a STORY, not a feed post. It needs a linked Instagram account; without one Threads refuses it and the cross-post is dropped so the Thread still publishes on its own); threads_enable_reply_approvals (true|false: hold replies for approval: every reply to the Thread stays hidden from everyone else until it is approved or ignored in the Schedchie dashboard, in the post's Comments tab (Live view)); threads_first_comment (text posted as the account's own reply on the new Thread the moment it publishes, up to 500 characters. Needs threads_manage_replies: an account connected before 2026-10-18 skips it until reconnected. On a post that went out as a thread it replies to the last part); threads_thread (true|false: a threads_text over 500 characters goes out as a thread: the first part is the post with its media, each next part a reply to the one before, split between paragraphs, then sentences, then words, at most 20 parts and 9,000 characters. On unless false (false refuses a text over 500). true also splits at lines holding only ---. Needs threads_manage_replies: an account connected before 2026-10-18 must reconnect first, or a long post fails before anything is published); threads_thread_numbering (true|false: when a post goes out as a thread, end each part with its number, as 1/3. Off unless true) | youtube: youtube_first_comment (text posted as the channel's own comment on the new video right after it uploads, up to 10,000 characters. Skipped on a private or made-for-kids video, and on a channel that must reconnect to allow comments, until it is reconnected) | linkedin: linkedin_first_comment (text posted as the account's own comment on the new post the moment it publishes, up to 1,250 characters) | bluesky: bluesky_first_comment (text posted as the account's own reply in the new post's thread the moment it publishes, up to 300 characters, counted as Bluesky counts a post) | mastodon: mastodon_first_comment (text posted as the account's own reply to the new status the moment it publishes, up to the instance's character limit (500 on mastodon.social)) | slack: slack_first_comment (text posted as the Schedchie app's reply in the new message's thread the moment it publishes. Skipped on a file post when Slack does not return the message in time; the post's publish steps then say so) | whop: whop_first_comment (text posted as the account's own reply under the new forum post the moment it publishes, up to 50,000 characters) | nostr: nostr_first_comment (text posted as the account's own reply note to the new note the moment it publishes, signed by the same remote signer, up to 8,000 characters). Some need a permission the connected account may not have been granted; an ungranted option is dropped at publish with the reason logged, and the rest of the post still goes out. Invalid values are refused here by account name.
    ConnectorOAuth
  • List Schedchie account groups and the accounts inside them (platform, username, accountId, connection/token health). Finds accountIds for schedule_post and the analytics tools, groupIds for the group/team tools. publishBlocked and health.status together say whether an accountId can publish. publishBlocked true means a known blocker (blockedReason says which, and how it clears) and posts scheduled onto that account are expected to fail until then. False is not a promise the next publish succeeds: any health.status other than 'active' is a problem too. 'addon_required' is not a block, but X posts do fail under it (an old X state that clears once the owner can post to X; get_x_usage says whether they can). A tokenExpiry marked stale is a date already in the past. Platforms: youtube, instagram, tiktok, facebook, pinterest, threads, bluesky, linkedin, x, mastodon, telegram, googlebusiness, discord (a Discord account is one connected channel), slack (a Slack account is one channel in one workspace; slackTeamName names the workspace, slackChannelName the channel), devto, hashnode (a Hashnode account is one blog), reddit (a Reddit account is one Reddit user), dribbble (a Dribbble account is one Dribbble user; dribbbleTeams lists its teams as {id, name, login}, and a post picks one with dribbble_teamId), tumblr (a Tumblr account is one blog), whop (a Whop account is one Whop company), twitch (a Twitch account is one channel), kick (a Kick account is one channel), lemmy (a Lemmy account is one user on one instance; its username is name@host), nostr (a Nostr account is one npub), listmonk (a Listmonk account is one listmonk instance; listmonkUrl is its address, and listmonkLists lists its lists as {id, name, subscriberCount} for listmonk_listIds), ghost (a Ghost account is one Ghost site; ghostSiteUrl is its address, and ghostNewsletters lists its newsletters as {slug, name, memberCount} for ghost_newsletter), pixelfed (a Pixelfed account is one user on one Pixelfed server; its username is name@host), wordpress (a WordPress account is one site; wordpressKind says selfhosted or wpcom, and wordpressSiteUrl is its address).
    ConnectorOAuth

Matching MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables managing lists, subscribers, campaigns, templates, bounces and transactional email on a self-hosted Listmonk instance through Claude tools, with an optional read-only mode that limits access to read operations.
    32
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to manage a self-hosted Listmonk instance, covering subscribers, lists, campaigns, templates, bounces, system diagnostics, and transactional email sending. Ships with an optional read-only mode that registers only the read tools.
    32
    MIT
  • The comment thread on one live post, read from the platform as the account. `state` says what happened: ok, unsupported (Pinterest, X, Telegram, Discord, Slack, WordPress, Dribbble, Tumblr, Whop, Twitch, Kick, Nostr, Listmonk, Ghost, Google Business Profile, with the reason), permissions_required, reconnect_required, unavailable or throttled (TikTok is rate-limiting the account; `retryAfter` is in seconds); `message` explains a state that is not ok, which is not an empty thread. `capabilities.reply` says whether reply_to_live_post will work (a YouTube channel connected before comments were allowed must reconnect first). Each comment carries `author.own` when the account itself wrote it, and nested `replies`. Nothing is invented: a null author is a private account the platform did not name.
    ConnectorOAuth
  • Edit a pending, failed, or pending-approval post. Change any of: text, hashtags, target accounts, scheduled time, per-account platform-specific content, media. Fields you omit keep their current value. New text/hashtags REPLACE the per-account copies (x_text, facebook_description, …) an earlier call wrote, so the edit reaches every platform and not just universalContent; one account's own wording goes in platformSpecificContent in the same call; that map is kept verbatim and replaces the stored one. Caption limits apply as in schedule_post. A TikTok account the post did not have needs tiktok_privacyStatus, the creator's own choice, and a YouTube one needs youtube_title and youtube_privacyStatus, the user's own; a stored TikTok or YouTube visibility and a stored YouTube title are kept. MEDIA: omit `media` to keep the post's existing media; pass `media` to REPLACE it entirely (old blobs are deleted server-side). Mix fresh upload_media descriptors with existing assets from get_post (cover kept); IG/TikTok/YouTube/Pinterest keep ≥1 file. Editing a FAILED post re-queues it (successful accounts are never double-posted). Editing a held post as the owner approves it; a member's edit keeps/re-establishes the hold. Published or currently-publishing posts cannot be edited. A post that is in a queue (it carries `queue`) LEAVES the queue when this changes its time, and keeps the time you gave it; the rest of that group's queue closes the gap. Saving it at the time it already had leaves it queued. AI-content labels, true|false per account: youtube_containsSyntheticMedia (YouTube's "altered or synthetic content" disclosure), instagram_is_ai_generated (Instagram's AI info label, every content type), x_made_with_ai (X's made-with-AI disclosure) and tiktok_is_aigc (TikTok's AI-generated label). They disclose realistic content made or altered with AI. tiktok_is_aigc labels VIDEO posts only: TikTok has no AI label for photo posts, so it is ignored there and the result's notes say so. Threads has no AI label in its API. A Discord account is one connected channel, and the post goes to that channel: discord_text with up to 2000 characters including hashtags, up to 10 files at 20 MiB each and 25 MiB in all. discord_options: threadName (a forum channel's post title, up to 100 characters; the text's first line otherwise), silent (true sends it without a notification), allowMentions (true lets the text ping; off otherwise), poll ({question up to 300 characters, answers: 2-10 up to 55 characters each, durationHours 1-768, allowMultiselect}, sent only with discord_contentType "POLL" and no files). A Slack account is one channel in a workspace, and the post goes to that channel as the Schedchie app: slack_text with up to 4000 characters including hashtags, up to 10 files at 1 GB each with the text as their message. slack_options: unfurlLinks (false posts links without a preview; on otherwise). Dev.to and Hashnode publish articles. Each needs its title: devto_title (up to 128 characters) or hashnode_title (up to 250); Schedchie never takes one from the text. The text is the article body in markdown, up to 100000 characters, sent as written except that single line breaks are kept as line breaks (plain markdown would join the two lines). hashtags become the article's tags (devto_tags, hashnode_tags) and are never added to the body: Dev.to takes up to 4, letters and digits only, each up to 30 characters (lowercased at publish, so Next.js becomes nextjs), Hashnode up to 5. The first image is the cover: at most 1 image, no video. Dev.to also takes devto_description (a short summary of the article), devto_canonical_url (the http(s) address where it first appeared) and devto_series (the name of the series it belongs to). Hashnode also takes hashnode_subtitle (up to 250 characters, shown under the title) and hashnode_canonical_url. A Hashnode account is one blog, and Hashnode publishes through its API only on a Pro blog. A WordPress account is one site (list_accounts gives wordpressKind and wordpressSiteUrl), and the post goes out there as a published post at the scheduled time: wordpress_title (optional, up to 300 characters; the text's first line otherwise, cut at a word near 100 characters when longer), wordpress_text sent as HTML (blank lines make paragraphs, line breaks stay, bare links become links), wordpress_hashtags become tags and are never added to the body, wordpress_categories and wordpress_tags take names (matched to the site's own, created when missing; up to 20 each, hashtags counted with the tags), wordpress_excerpt (up to 1000 characters), and up to 10 images, no video: the first is the featured image, the rest follow the text. A Reddit account is one Reddit user. Each post goes to ONE subreddit, named in reddit_subreddit without r/; a second subreddit is a separate post (another call), never one call sending a link to many subreddits. reddit_title is required (up to 300 characters). reddit_contentType: TEXT (body in reddit_text, up to 40000 characters including hashtags), LINK (reddit_url, no files), IMAGE (one image) or VIDEO (one video); the body goes out on TEXT posts only. reddit_flair_id and reddit_flair_text (text only where the flair is editable): a subreddit may require flair, and the publish is refused without it. reddit_nsfw, reddit_spoiler, reddit_sendreplies (true|false), reddit_first_comment (up to 10000 characters, posted by the same user under the post). A Dribbble account is one Dribbble user; a team is a per-post choice: dribbble_teamId, the id of one of the account's dribbbleTeams in list_accounts, posts the shot to that team, and without it the shot goes out as the user. A shot needs dribbble_title, its title; Schedchie never takes one from the text. The text is the shot's description, plain text up to 10000 characters, and hashtags become its tags (dribbble_tags, up to 12 once a leading # is dropped and a repeat in any case counts once), never added to the description. dribbble_lowProfile true asks Dribbble to mark the shot low profile; accounts without Dribbble Pro have been seen to ignore it. A shot is exactly 1 image: GIF, JPG or PNG of exactly 800x600 or 400x300 pixels and at most 8 MB, no video. It is never resized, so crop it to 800x600 first. Each shot is scheduled on its own with schedule_post; schedule_posts refuses Dribbble. A Tumblr account is one blog: tumblr_text up to 40960 characters including tags (sent as text blocks of 4096), tumblr_hashtags as Tumblr tags (no #, spaces allowed, no commas), up to 30 images or one video (never both), tumblr_alt_texts with one alt text per image in media order. tumblr_options: state ("published", the default, or "draft" to save it as a draft on the blog), sourceUrl (an http or https URL). Tumblr does not allow the same post on several blogs, so each blog needs its own text. A Whop account is one Whop company you own or administer; a post goes to one of its forums, named by whop_options.experienceId (the forum's exp_ id, required; no forum is the default: copy it from an earlier post to that forum via get_post, or pick the forum in the Schedchie composer). whop_text is the body, in Markdown, up to 50000 characters including hashtags; up to 10 images or videos; a body or a file is needed. whop_options: title (optional headline, up to 255 characters), pinned (true pins it to the top of the forum), forumName (display only). whop_first_comment is posted as a reply under the post. A Twitch account is one channel: the broadcaster who connected it. twitch_contentType "CHAT" (the default) sends twitch_text as a chat message in the channel, "ANNOUNCEMENT" as an announcement in its chat, and "SCHEDULE" adds a stream to the channel's schedule. twitch_text takes up to 500 characters including hashtags; on a SCHEDULE post it is the stream's title, optional, up to 140 characters, hashtags not added. twitch_options: announcementColor for an announcement (primary, blue, green, orange, purple; primary, the channel's own accent colour, is the default). A SCHEDULE post needs scheduleStartTime (RFC 3339, after the post's scheduledTime; a start already past at publish is refused then), scheduleTimezone (an IANA name such as Europe/Bratislava) and scheduleDurationMinutes (a whole number from 30 to 1380); scheduleRecurring true repeats it every week, and a one-time stream needs an affiliate or partner channel; scheduleCategoryId (the category's Twitch id) or scheduleCategoryName (matched by name, ignoring case, when it publishes) sets its category. Text only: Twitch refuses a post with files. A Kick account is one channel: the broadcaster who connected it. kick_text goes out as a chat message in the channel, up to 500 characters including hashtags, counted as a reader sees them (an emoji is one), and at most 2,048 bytes of UTF-8. Text only: Kick refuses a post with files. A Lemmy account is one user on one instance; the community is chosen per post in lemmy_community: its name (technology) for one on the account's own instance, or name@instance (technology@lemmy.world); !name@instance and an https://instance/c/name link work too. lemmy_title is required (3 to 200 characters). lemmy_text is the Markdown body, up to 50000 characters including hashtags. lemmy_url makes it a link post and one image an image post (no video, never a link and an image together); lemmy_contentType (TEXT, LINK or IMAGE) follows from them. lemmy_nsfw (true|false); lemmy_first_comment (up to 10000 characters) is posted by the same user under the post. Each post goes to ONE community: a second community is a separate post (another call). A Nostr account is one npub, connected through the user's own remote signer (NIP-46). Schedchie never holds the private key: every note is signed by that signer at publish time, so it must be online then; if it is not, the post fails and can be retried. A post is a kind 1 text note, up to 8,000 characters, links inline. No images or video. A first comment is posted as a reply note. A Listmonk account is one self-hosted listmonk instance. Each post is one email campaign to the lists in listmonk_listIds (ids from list_accounts), with listmonk_subject as the subject; it is started at the scheduled time and mails every subscriber of those lists once. listmonk_subject is required, up to 200 characters. listmonk_listIds is required: 1 to 20 ids from the account's listmonkLists. listmonk_text is the body, up to 100000 characters; without it the text is used. listmonk_format is markdown (the default, sent as written) or richtext (blank lines make paragraphs, bare links become links). Hashtags are never put into the email. Up to 10 images, no video; they go after the text. The instance's default template and from address are used. A Ghost account is one Ghost site (5.0 or later, self-hosted or Ghost(Pro); list_accounts gives ghostSiteUrl and ghostNewsletters), and the post is published there at the scheduled time: ghost_title (optional, up to 255 characters; the text's first line otherwise; a post needs a title or text), ghost_text sent as HTML (blank lines make paragraphs, line breaks stay, bare links become links), ghost_excerpt (up to 300 characters), ghost_tags take names (matched to the site's own, created when missing) and ghost_hashtags become tags too, never added to the body: up to 20 in all, each up to 191 characters. ghost_visibility is public (the default), members (members only) or paid (paying members only). Up to 10 images, no video: the first is the feature image, the rest follow the text. ghost_newsletter (a slug from ghostNewsletters) also emails the post to that newsletter's members: ghost_emailSegment picks who gets it (all, the default; status:free; status:-free), and ghost_emailOnly true mails it without putting it on the site; both need ghost_newsletter. A newsletter is sent once and never resent, and deleting the post on the site never unsends the email. A Pixelfed account is one user on one Pixelfed server (name@host). A post is photos or a video with a caption: one photo, one video, or an album of several, up to the server's limit (20 files on pixelfed.social, often fewer elsewhere). Text-only posts are refused: every Pixelfed post needs at least one photo or video. pixelfed_text is the caption, up to 2000 characters including hashtags on pixelfed.social; each server sets its own limits and refuses past them. pixelfed_visibility is public (the default), unlisted or private (followers only). pixelfed_sensitive (true|false) puts the media behind a warning, and pixelfed_spoiler_text (up to 140 characters) is the warning's text, sent only with pixelfed_sensitive true. pixelfed_comments_disabled (true|false) turns comments off. pixelfed_alt_text, or pixelfed_alt_texts with one per file, describes the media. pixelfed_first_comment (up to 2000 characters on pixelfed.social) is posted by the same user as a reply under the post, and is refused when comments are off. pixelfed_contentType (PHOTO, ALBUM or VIDEO) follows from the files. Publish options, per account, alongside that platform's other fields: instagram (beta): instagram_first_comment (text posted as a comment on the new post the moment it publishes. Skipped for instagram_contentType "STORY" (an Instagram story has no comment edge). Needs instagram_business_manage_comments (instagram_manage_comments on a Facebook-connected account) on the account's connection: without it the comment is skipped and the post still publishes); instagram_audio_name (REEL only: names the reel's original audio (the sound already in the uploaded video). Instagram allows exactly one rename per audio. Ignored when instagram_audio_id is set: attached music replaces the original audio); instagram_audio_id (REEL only: an audio_id from lookup_platform_options (kind instagram_audio); the reel publishes with that song attached. Facebook-connected Instagram accounts only: on an account connected with Instagram sign-in the post is refused (400) with the fix. A song Instagram no longer offers at publish time is left off and the reel publishes without it, reported as a partial publish. Refused on any other content type); instagram_audio_title (display-only carry of the chosen track's title, so the composer can re-show the choice); instagram_audio_artist (display-only carry of the chosen track's artist); instagram_audio_volume (0-100: the attached track's volume (default 100). Only meaningful with instagram_audio_id); instagram_video_volume (0-100: the video's own sound level under an attached track; 0 mutes it. Only meaningful with instagram_audio_id); instagram_trial_reel (REEL only: true publishes a TRIAL reel: Instagram shows it to non-followers first and promotes it to everyone automatically once it performs (graduation strategy SS_PERFORMANCE). The same test a creator would run by hand in the app. Instagram only offers it to accounts with at least 1,000 followers; below that the reel publishes as a regular reel and the publish is reported as partial with that reason); instagram_collaborators (up to 3 Instagram usernames, comma-separated (with or without @), invited as collaborators on a feed image, reel or carousel; the post appears on their profile once they accept. Not for instagram_contentType "STORY". A username Instagram cannot resolve is dropped (reported as a publish step) rather than failing the post); instagram_user_tags (BETA. up to 20 Instagram usernames, comma-separated (with or without @), tagged on the media as people tags (clickable). Works on instagram_contentType "STORY", "POST", "REEL" and "CAROUSEL" (tagged on every carousel item). Only PUBLIC Instagram accounts can be tagged. No positions: feed images get default spots, stories and reels tag by username. If Instagram refuses the tags the post publishes without them (reported as a publish step) rather than failing) | tiktok (beta, except tiktok_first_comment): tiktok_title (PHOTO posts only: a title published with the photos, up to 90 characters (never shortened). TikTok videos have no title; their caption is the text); tiktok_auto_add_music (photo posts only: when true TikTok automatically adds recommended music to the published photos. The track is TikTok's pick; tiktok_music_id chooses one instead); tiktok_music_id (video or photo: an id from lookup_platform_options (kind tiktok_music); the post publishes with that track. Only for accounts whose get_tiktok_creator_info says musicSelectable, and not on a Followers/Friends/Only me video (refused with the fix)); tiktok_music_title (display-only carry of the chosen track's title); tiktok_music_artist (display-only carry of the chosen track's artist); tiktok_music_cover (display-only carry of the chosen track's coverUrl); tiktok_music_volume (VIDEO only, 0-100: the track's volume (default 100)); tiktok_original_volume (VIDEO only, 0-100: the video's own sound under the track; 0 mutes it (default 100)); tiktok_music_start_ms (VIDEO only: ms into the track where it starts (default 0)); tiktok_upload_to_draft (video or photo: true sends the post to the account's TikTok app inbox as a draft instead of publishing it; the creator finishes and posts it in the TikTok app. A draft carries no music, and a video draft no caption. Its publishResults entry then carries inboxFallback and draft: delivered, not published); tiktok_first_comment (text posted as the account's own comment on the new post once TikTok makes it public, up to 1,200 characters. Public posts only: never on Followers/Friends/Only me, an inbox draft, or with comments turned off. Needs the account's TikTok Business connection with the comment permission; without it the post publishes and the comment is skipped with that reason) | facebook (beta): facebook_first_comment (text posted as the Page, as a comment on the new post, the moment it publishes. Skipped for facebook_contentType "story" (a Page story has no comments). Needs pages_manage_engagement on the account's connection: without it the comment is skipped and the post still publishes) | threads: threads_reply_control (who may reply: one of everyone | accounts_you_follow | mentioned_only | parent_post_author_only | followers_only, LOWERCASE (Threads hands this back UPPERCASE when a post is read, and refuses that same value on the way in). Threads accepts it only when the post is created, never afterwards. Omit the field to keep the account's own Threads setting); threads_location_id (a Threads place id, published as the post's location: an `id` from lookup_platform_options (kind threads_locations) (schedchie:library) or one the user supplies; place ids are Threads' own and cannot be derived from a name); threads_location_name (the label Schedchie displays for that place. Display only: it is never sent to Threads, which offers no way to read a published post's location back); threads_crossreshare_to_ig (true|false: also share the Thread to Instagram as a STORY, not a feed post. It needs a linked Instagram account; without one Threads refuses it and the cross-post is dropped so the Thread still publishes on its own); threads_enable_reply_approvals (true|false: hold replies for approval: every reply to the Thread stays hidden from everyone else until it is approved or ignored in the Schedchie dashboard, in the post's Comments tab (Live view)); threads_first_comment (text posted as the account's own reply on the new Thread the moment it publishes, up to 500 characters. Needs threads_manage_replies: an account connected before 2026-10-18 skips it until reconnected. On a post that went out as a thread it replies to the last part); threads_thread (true|false: a threads_text over 500 characters goes out as a thread: the first part is the post with its media, each next part a reply to the one before, split between paragraphs, then sentences, then words, at most 20 parts and 9,000 characters. On unless false (false refuses a text over 500). true also splits at lines holding only ---. Needs threads_manage_replies: an account connected before 2026-10-18 must reconnect first, or a long post fails before anything is published); threads_thread_numbering (true|false: when a post goes out as a thread, end each part with its number, as 1/3. Off unless true) | youtube: youtube_first_comment (text posted as the channel's own comment on the new video right after it uploads, up to 10,000 characters. Skipped on a private or made-for-kids video, and on a channel that must reconnect to allow comments, until it is reconnected) | linkedin: linkedin_first_comment (text posted as the account's own comment on the new post the moment it publishes, up to 1,250 characters) | bluesky: bluesky_first_comment (text posted as the account's own reply in the new post's thread the moment it publishes, up to 300 characters, counted as Bluesky counts a post) | mastodon: mastodon_first_comment (text posted as the account's own reply to the new status the moment it publishes, up to the instance's character limit (500 on mastodon.social)) | slack: slack_first_comment (text posted as the Schedchie app's reply in the new message's thread the moment it publishes. Skipped on a file post when Slack does not return the message in time; the post's publish steps then say so) | whop: whop_first_comment (text posted as the account's own reply under the new forum post the moment it publishes, up to 50,000 characters) | nostr: nostr_first_comment (text posted as the account's own reply note to the new note the moment it publishes, signed by the same remote signer, up to 8,000 characters). Some need a permission the connected account may not have been granted; an ungranted option is dropped at publish with the reason logged, and the rest of the post still goes out. Invalid values are refused here by account name.
    ConnectorOAuth
  • A newsletter people join on its own page (cncto.co/n/<name>) by confirming their address, like Buttondown or listmonk. Issues go out through the business's own email service (connect it first with newsletters_connect_service); every issue carries postal_address (the law in the US and the EU asks for one) and a one-click unsubscribe. Free. Free.
    ConnectorOAuth
  • A newsletter people join on its own page (cncto.co/n/<name>) by confirming their address, like Buttondown or listmonk. Issues go out through the business's own email service (connect it first with newsletters_connect_service); every issue carries postal_address (the law in the US and the EU asks for one) and a one-click unsubscribe. Free. Free.
    ConnectorNo auth
  • Returns paginated owned accounts, stable identities and core-post eligibility. The platform field is a stable identifier; account eligibility determines availability. Provider labels: x=X; linkedin=LinkedIn profile; linkedin-page=LinkedIn Page; reddit=Reddit; instagram=Instagram via Facebook Business; instagram-standalone=Instagram Standalone; facebook=Facebook Page; threads=Threads; youtube=YouTube; gmb=Google My Business; tiktok=TikTok; pinterest=Pinterest; dribbble=Dribbble; discord=Discord; slack=Slack; kick=Kick; twitch=Twitch; mastodon=Mastodon; bluesky=Bluesky; lemmy=Lemmy; wrapcast=Farcaster; telegram=Telegram; nostr=Nostr; vk=VK; medium=Medium; devto=Dev.to; hashnode=Hashnode; wordpress=WordPress; listmonk=ListMonk; moltbook=Moltbook; whop=Whop; skool=Skool; mewe=MeWe; tumblr=Tumblr; pixelfed=Pixelfed; plurk=Plurk; ghost=Ghost; discourse=Discourse; misskey=Misskey; mattermost=Mattermost; matrix=Matrix; teams=Microsoft Teams; peertube=PeerTube; signal=Signal.
    ConnectorAPI key