posterly
Server Details
Validate, schedule, publish, and analyze social content across 18 platforms with posterly. Supports OAuth 2.1 and Bearer API-key authentication. Requires a paid posterly plan with API access; Starter + API is available from $10/month.
- Status
- Healthy
- Uptime
- 5.4% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Score is being calculated.
Available Tools
61 toolsask_supportInspect
Ask posterly Support AI an authenticated question using posterly docs plus read-only account/post diagnostics for the caller workspace. Requires API auth and accounts:read + posts:read scopes. Human tickets are never opened on the first answer; ticket creation requires a follow-up in a continued conversation with an assistant answer plus request_human=true and confirm_escalation=true after explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | No | Optional post ID to inspect directly. | |
| page_url | No | Optional posterly page URL for context. | |
| question | Yes | ||
| workspace_id | No | Workspace to inspect. Omit to use the API-key scoped workspace or personal workspace. | |
| request_human | No | Ask for human review. Does not create a ticket unless this is a follow-up in a conversation that already has an assistant answer and confirm_escalation is also true. | |
| conversation_id | No | Continue a previous support conversation. | |
| confirm_escalation | No | Must be true after explicit user confirmation that the previous assistant answer did not solve the issue. | |
| referenced_post_ids | No | Optional post IDs to include in read-only diagnostics. |
audit_google_business_profileRead-onlyIdempotentInspect
Run a live local-profile audit for a connected Google Business Profile location. Returns the 0-100 completeness score, letter grade, a score for each section (profile basics, hours, categories, description, photos, attributes, review health), and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Google Business social account ID from list_accounts. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id. | |
| workspace_id | No |
cancel_subscriptionDestructiveIdempotentInspect
Cancel the authenticated user's posterly subscription. DESTRUCTIVE billing action; requires the billing:write scope. ALWAYS ask the user why they are cancelling FIRST and pass their answer as reason (one of the allowed values). By default an active or trialing plan is set to cancel at the end of the current period. A past_due or unpaid plan always ends now, even when immediate is false: the unpaid renewal is dropped and payment retries stop. Pass immediate=true only when the user explicitly wants an active plan cancelled right now. Only call after the user explicitly confirms.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why the user is cancelling. Ask the user before calling; do not guess. | |
| confirm | Yes | Must be true after the user explicitly confirms the cancellation. | |
| feedback | No | Optional free-text detail the user gave about why they are cancelling. | |
| immediate | No | Cancel immediately instead of at period end. Defaults to false. Ignored for past_due and unpaid plans, which always end now. |
connect_accountIdempotentInspect
Connect a credential-based social account (telegram, bluesky, discord, wordpress, devto, hashnode, lemmy) directly, without a browser session. Call list_platforms with view=connect_link first to discover the exact credential fields the platform needs. Prefer scoped secrets: app passwords (Bluesky, WordPress), bot tokens (Telegram), webhook URLs (Discord), and API tokens (Dev.to, Hashnode) over primary passwords. Warn the user that any credential they share passes through this conversation. For OAuth platforms (Instagram, X, LinkedIn, ...) use create_connect_session instead.
| Name | Required | Description | Default |
|---|---|---|---|
| pat | No | Hashnode: personal access token from Account Settings, Developer. | |
| handle | No | Bluesky: handle, for example posterly.bsky.social. | |
| api_key | No | Dev.to: API key from Settings, Extensions, DEV Community API Keys. | |
| chat_id | No | Telegram: target channel or group chat ID. | |
| instance | No | Lemmy: instance domain, for example lemmy.world. | |
| password | No | Lemmy: account password (TOTP-enabled accounts are not supported). | |
| platform | Yes | Credential-based connection target: telegram, bluesky, discord, wordpress, devto, hashnode, or lemmy. | |
| site_url | No | WordPress: site URL, e.g. https://blog.example.com. | |
| username | No | WordPress: username the application password belongs to. Lemmy: username or email. | |
| bot_token | No | Telegram: bot token from BotFather. | |
| webhook_url | No | Discord: channel webhook URL from channel settings, Integrations, Webhooks. | |
| app_password | No | Bluesky: app password from account settings. WordPress: application password from wp-admin Users, Profile, Application Passwords. | |
| workspace_id | No | Workspace to connect the account into. Workspace-scoped API keys ignore this. | |
| connect_session_id | No | Optional connect session ID to mark connected or failed based on the outcome. |
create_api_keyInspect
Create a new posterly API key for the authenticated user. SECRET-CREATING WRITE: only use after explicit user confirmation. The new key can only request scopes already present on the calling dashboard-created API key; OAuth and managed assistant tokens cannot mint keys. Team management (members:read, members:write) and client portal sign-in link permissions are never copied or granted here: a person turns them on in /dashboard/api.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable key name. | |
| scopes | No | Scopes for the new key. Omit to copy the calling key scopes. Cannot exceed the calling key scopes. billing:read and billing:write allow managing the posterly subscription (cancel/pause/resume/downgrade). | |
| confirm | Yes | Must be true after the user explicitly confirms that a new secret API key should be created. | |
| workspace_id | No | Optional workspace restriction. Workspace-scoped calling keys cannot create keys outside their workspace. | |
| expires_in_days | No | Optional expiry from now, up to 365 days. Omit for no expiry. |
create_connect_sessionInspect
Create a short-lived dashboard handoff session for connecting a social account. Open connect_session.connect_url for the user, then poll list_accounts with view=connect_session so you can narrate progress.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Connection target such as instagram, meta, linkedin_page, twitter, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, or lemmy. | |
| auto_start | No | When true, the posterly dashboard starts the provider flow after the user opens the URL. | |
| workspace_id | No | Workspace to connect the account into. Workspace-scoped API keys ignore this. |
create_media_dropInspect
Create a human drop page so ChatGPT or Claude users can upload a laptop file without dashboard login. Returns drop_url (https://www.poster.ly/drop/). Send that URL to the user, wait, then call list_media. This is not the chat paperclip and not create_signed_upload.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional filename hint, e.g. launch-video.mp4 | |
| max_files | No | ||
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. |
create_postInspect
Schedule or immediately publish one social media post. DESTRUCTIVE WRITE that creates content on the user's connected social account. Always confirm caption + scheduled_at + account_id/workspace with the user before calling. For Instagram, distinguish caption @mentions from native instagram_settings.user_tags and co-author instagram_settings.collaborators; call list_platforms with view=schema and account_id before either native feature. Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Instagram caption add-ons (caption_addon poll or comment prompt) need a Facebook Login account, a caption, and a feed photo, Reel, or carousel. Stories are rejected, and a poll cannot be combined with a comment prompt. Third-party media URLs are copied into posterly storage before the post is saved; short-lived signed URLs must still be live when this tool runs. For multiple posts, prefer create_posts_batch after confirming every item.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided. | |
| confirm | Yes | Must be true after the user explicitly confirms the post/account/workspace/schedule. | |
| metadata | No | ||
| platform | No | Platform name when using username. Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases x, gmb, and instagram-standalone are also accepted by the API. | |
| settings | No | Deprecated alias of platform_settings (or instagram_settings for Instagram). Prefer those instead. | |
| username | No | Account username; requires platform. | |
| media_url | No | Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs. | |
| post_type | No | Optional post type. Omit for auto-detection from media. Supported semantic values include text, image, video, carousel, reel, story, story_series, document, x_thread, threads_thread, photo, and cover_photo. | |
| account_id | No | Social account ID from list_accounts. | |
| media_urls | No | Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. | |
| scheduled_at | No | ISO 8601 UTC datetime. Omit to publish immediately. | |
| thread_posts | No | For X or Threads: 2+ entries, one per post in the reply chain. | |
| workspace_id | No | Workspace ID from whoami. | |
| platform_settings | No | Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples. | |
| instagram_settings | No | Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first. |
create_posts_batchInspect
Create 1-25 scheduled or immediate social posts in one API request. DESTRUCTIVE WRITE: show the user every post's account/platform, caption or thread text, scheduled time, media, settings, and workspace, then get explicit confirmation for the whole batch before calling. Third-party media URLs are copied into posterly storage before each post is saved. Partial success is possible; failed items return their array index.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| confirm | Yes | Must be true after the user explicitly confirms every post in the batch. |
create_signed_uploadInspect
Create a signed upload URL for a larger image or video. PUT the raw bytes to the returned upload_url (object storage) with the returned headers, then pass public_url to create_post.
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | ||
| filename | Yes | ||
| content_type | Yes | ||
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. |
create_webhookInspect
Create a webhook subscription for post/account/analytics events. WRITE WITH OUTBOUND SIDE EFFECTS: show the user the target URL, workspace, events, and active state, then get explicit confirmation before calling. The response includes the signing secret once.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| events | No | ||
| confirm | Yes | Must be true after the user explicitly confirms webhook creation. | |
| is_active | No | ||
| description | No | ||
| workspace_id | No |
delete_api_keyDestructiveIdempotentInspect
Revoke a posterly API key owned by the authenticated user. DESTRUCTIVE: show the user the exact key ID/prefix/name if available and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | API key ID to revoke. This is the API key resource ID, not the secret pst_live_ value. | |
| confirm | Yes | Must be true after the user explicitly confirms API key revocation. |
delete_postDestructiveIdempotentInspect
Delete posts. DESTRUCTIVE and IRREVERSIBLE. post_id: delete one post; fetch it with get_post first, confirm what will be deleted, then pass confirm=true. A post that is currently publishing is never deleted. A published post is taken down only when the user also explicitly confirms the live removal and you pass confirm_published=true. Choose delete_mode=posterly to remove only the posterly record and leave the live post up, or delete_mode=platform with confirm_published=true to take down the live post too. Live deletion supports eligible connected platforms with saved post IDs and deletion permissions; refusals keep the record. Threads requires threads_delete. YouTube requires youtube.force-ssl or equivalent, upload alone is insufficient. A published post with no live URL and no platform id is removed from posterly only. group_id: delete every draft, scheduled, failed, or paused post matching a caller-defined group_id, post_group_id, api_group_id, or release_id. A group delete never removes published posts. Preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | post_id: true after the user explicitly confirms the deletion. group_id: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| post_id | No | Delete this one post. | |
| group_id | No | Delete every unpublished post in this group or release instead. Never deletes published posts. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| delete_mode | No | Remove the posterly record only, or also take down the live post. | |
| confirm_published | No | With post_id only. True only after the user explicitly confirms taking a live post down. Required with delete_mode=platform. Use delete_mode=posterly to leave the live post up. |
disconnect_accountDestructiveIdempotentInspect
Disconnect a connected social account from posterly. DESTRUCTIVE and IRREVERSIBLE: this removes the account connection, emits account.disconnected webhooks, and may transfer Instagram scheduled posts to a replacement account. Always call list_accounts first, show the user the exact account/platform/workspace, and get explicit confirmation before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true after the user explicitly confirms the account disconnect. | |
| account_id | Yes | Connected social account ID from list_accounts. |
dismiss_suggestionDestructiveIdempotentInspect
Dismiss a proactive post suggestion so it stops appearing. WRITE: confirm the exact suggestion with the user first. Never dismisses a suggestion that was already turned into a scheduled post.
| Name | Required | Description | Default |
|---|---|---|---|
| suggestion_id | Yes | Suggestion ID from list_post_suggestions. |
downgrade_subscriptionDestructiveIdempotentInspect
Downgrade the authenticated user's posterly subscription one tier (or to an explicit lower tier) at the next renewal with no proration. Billing action; requires the billing:write scope. Only call after the user explicitly confirms.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Optional explicit target tier. Omit to drop one tier automatically. | |
| confirm | Yes | Must be true after the user explicitly confirms the downgrade. |
find_available_slotRead-onlyIdempotentInspect
Find available time slots for posting. Respects a 1-hour gap between posts and preferred hours. Always pass timezone explicitly (default is America/New_York). strategy "best_engagement" (needs account_ids) ranks the next 7 days by when these accounts get the most engagement, with a 1-5 star rating and a reason per slot.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of slots to return (max 10). Default 5 for next_free, 3 for best_engagement. | |
| strategy | No | next_free: earliest free slots. best_engagement: best times by engagement (requires account_ids). | next_free |
| timezone | No | IANA timezone, e.g. Europe/London | |
| account_ids | No | ||
| workspace_id | No |
generate_captionsInspect
Generate or adapt AI caption suggestions for one or more social platforms. Uses AI Caption Assist quota and returns options only; it does not create, draft, schedule, or publish posts.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | generate | |
| tone | No | ||
| brief | No | ||
| count | No | ||
| platforms | Yes | ||
| allow_emojis | No | ||
| workspace_id | No | ||
| preserve_links | No | ||
| source_caption | No | ||
| source_platform | No | ||
| hashtag_strategy | No | smart | |
| preserve_mentions | No | ||
| social_account_id | No | ||
| manual_brand_voice | No | ||
| preserve_call_to_action | No |
generate_imageInspect
Queue an AI image job via posterly using Nano Banana (Gemini) or Grok Imagine Image 2.0 (xAI). Returns job_id. Poll list_jobs with type=image for urls. Thinking high does not change the credit price. COSTS CREDITS - confirm subject + style + aspect_ratio + quality + provider with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Google-only: lite (8 credits, 1K only), flash (Nano Banana 2.1, 15 at 1K), or pro (30 at 1K). Ignored for xAI. | flash |
| style | No | photographic | |
| prompt | Yes | ||
| confirm | Yes | Must be true after the user explicitly confirms subject, style, aspect ratio, quality, and credit use. | |
| quality | No | Google: high turns on Gemini thinking. low/medium leave thinking minimal unless thinking_level is set. xAI: low or medium credit tiers. | |
| provider | No | google for Nano Banana or xai for Grok Imagine Image 2.0. | |
| resolution | No | xAI supports 1K/2K only. Google flash (Nano Banana 2.1) bills 15/23/35 for 1K/2K/4K. 512 is no longer available. Pro bills 30 at 1K-2K and 55 at 4K. | 1K |
| variations | No | ||
| aspect_ratio | No | 1:1 | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. | |
| thinking_level | No | Google flash/lite. Gemini image quality control. minimal is fastest; high is for infographics and harder layouts. Overrides quality when both are set. | |
| reference_image_urls | No | Google only. Up to 14 HTTPS image URLs used as references (logo, product, style lock). |
generate_videoInspect
Queue an AI video job with Google Veo 3.1 or xAI Grok Imagine Video 1.5. COSTS CREDITS - confirm provider, prompt, duration, resolution, aspect ratio, audio choice, and credit cost with the user before calling. Poll list_jobs with type=video for status and final video_url.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | fast | |
| prompt | Yes | ||
| confirm | Yes | Must be true after the user explicitly confirms prompt, model, duration, resolution, and credit cost. | |
| provider | No | ||
| image_url | No | ||
| resolution | No | 720p | |
| aspect_ratio | No | 16:9 | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. | |
| end_image_url | No | ||
| generate_audio | No | Google can disable generated audio. xAI Grok includes audio and requires this to remain true. | |
| negative_prompt | No | ||
| duration_seconds | No | ||
| reference_images | No | ||
| source_video_url | No |
get_creditsRead-onlyIdempotentInspect
Get the authenticated user's posterly AI credit balance: what is available to spend now, how much of the monthly included allowance is left, purchased pack balance, plan tier, and when the included pool next resets. Credits are a shared WORKSPACE wallet, so this reports the balance the caller can actually spend, not a personal figure. Read-only, spends nothing. Requires the billing:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_postRead-onlyIdempotentInspect
One post by ID. view=post (default): caption, status, scheduled time, media, and platform info. view=missing: whether the post is missing required content, media, account, platform settings, or metadata before it can publish; use it to repair failed or imported posts.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | post (default) or missing. | post |
| post_id | Yes | The post ID to look up |
get_subscriptionRead-onlyIdempotentInspect
Get the authenticated user's posterly subscription: status, tier, cancel-at-period-end, current period end, trial end, and pause state. Read-only. Requires the billing:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_updatesRead-onlyIdempotentInspect
Get the latest posterly product updates and news from the updates feed: new features, improvements, and fixes, newest first. The output says whether more updates exist; page with offset or narrow with since. Requires an active posterly subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of updates to return. Default 10, max 50. | |
| since | No | ISO date. Return updates published on or after this date. | |
| offset | No | How many updates to skip. Use the offset the previous page gives to get the next page. | |
| include_content | No | Include the full markdown body of each update. Defaults to false. |
get_video_optionsRead-onlyIdempotentInspect
List read-only Google Veo and xAI Grok video generation options, input modes, durations, resolutions, aspect ratios, and credit-cost estimates. Does not generate video or spend credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_x_posting_quotaRead-onlyIdempotentInspect
Get managed X posting quota, usage, remaining posts, URL-blocking status, and add-on plan info for a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No |
list_accountsRead-onlyIdempotentInspect
Connected social accounts and what posterly has learned about them. view=accounts (default): connected accounts, optionally one workspace_id or one account_id; Instagram rows show direct-login vs Meta-linked and whether native media tags/collaborators are available, so check this before Instagram user_tags or collaborators. view=learned_voice (account_id): the voice learned from the account's real published captions (summary, traits, style guidelines, habits); read-only, never overwrites the brand profile. view=performance_profile (account_id): 90-day coaching stats, engagement-rate trend, and summary, or null with a reason (Pro plan or higher). view=connect_session (session_id): poll a session from create_connect_session and narrate status_message; stop at connected, failed, cancelled, or expired.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | accounts (default), learned_voice, performance_profile, or connect_session. | accounts |
| account_id | No | Social account ID from list_accounts. Required for learned_voice and performance_profile; with view=accounts it returns just that account. | |
| session_id | No | view=connect_session: the connect session ID returned by create_connect_session. | |
| workspace_id | No | view=accounts: filter to a specific workspace; omit for all the caller can access. |
list_activityRead-onlyIdempotentInspect
List recent activity and publish events for posts, including status changes, publish attempts, failures, and retries, newest first. Use this as the agent notifications feed. The output says whether more events exist; page with offset (offset + limit up to 1000) or narrow with since or post_id before concluding nothing else happened.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | all | |
| limit | No | ||
| since | No | ISO datetime. Return events created at or after this time. | |
| offset | No | How many events to skip. Use the offset the previous page gives to get the next page. | |
| post_id | No | ||
| workspace_id | No |
list_analyticsRead-onlyIdempotentInspect
Analytics for connected accounts (Instagram, X, Facebook Pages, LinkedIn, Google Business Profile, Pinterest, YouTube, and Threads). view=accounts (account_id): daily snapshots and a period summary with platform-native display_metrics labels. Google Business Profile account analytics includes Calls, Website clicks, and Directions along with Profile Views, Search Views, Maps Views, Customer Actions, and Posts. view=posts (account_id): per-post likes, comments/replies, reach, impressions/views, saves, shares, reposts, quotes, and plays, most recent first, with limit/offset. view=insights: per-post feedback insights with a performance tier, diagnosis, next action, and baseline, filtered by account_id, post_id, or checkpoint (1h, 6h, 24h, 72h, 7d); Pro plan or higher. presentation (accounts and posts): compact for Telegram/mobile, table for Markdown clients, json for custom chart/card renderers.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | accounts and posts: ISO date, default today | |
| from | No | accounts and posts: ISO date, default 30 days ago | |
| view | Yes | accounts, posts, or insights. | |
| limit | No | posts: default 50, max 200. insights: default 20, max 100. | |
| offset | No | posts only. | |
| post_id | No | insights: filter to one post ID. | |
| account_id | No | Social account ID (from list_accounts). Required for accounts and posts. | |
| checkpoint | No | insights: filter to one checkpoint after publish. | |
| presentation | No | accounts and posts: compact bullets, Markdown table, or raw JSON for client-side chart/card rendering. | compact |
list_brandsRead-onlyIdempotentInspect
Brands (clients) and their saved context. view=brands (default): brands the caller can access with brand ID, name, workspace ID, source, and account count (optional workspace_id). view=brand (brand_id): one brand with its workspace, source, and linked legacy brand group. view=accounts (brand_id): the social accounts assigned to the brand; use it when the user names a brand rather than an account handle. view=profile (brand_id): voice and tone, audience, keywords, dos and don’ts, visual notes, and other saved brand context.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | brands (default), brand, accounts, or profile. | brands |
| brand_id | No | The brand ID (from view=brands). Required for brand, accounts, and profile. | |
| workspace_id | No | view=brands: filter to a specific workspace; omit to list brands across every accessible workspace. |
list_commentsRead-onlyIdempotentInspect
Social inbox comments and replies for Instagram, Facebook Pages, Threads, and LinkedIn Pages (Pro plan or higher plus posts:read). Without comment_id: list comments filtered by account, platform, unread/flagged, or search, with limit/offset paging. With comment_id: one comment and its replies; only workspace_id may be added.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of comments to return. Default 50, max 100. | |
| filter | No | Comment filter. Defaults to all. | |
| offset | No | Skip this many comments before returning results. | |
| search | No | Search comment content or author username. | |
| platform | No | instagram, facebook, threads, or linkedin. | |
| account_id | No | Social account ID from list_accounts. | |
| comment_id | No | One comment (from a list call) with its replies. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. |
list_conversationsRead-onlyIdempotentInspect
Social inbox DM conversations for Instagram and Facebook Page inboxes (Threads has no DMs; Pro plan or higher plus posts:read). Without conversation_id: list conversations filtered by account, platform, unread/starred/archived, or search, with limit/offset paging. With conversation_id: one conversation and its messages; there limit is the number of messages (default 50, max 100) and only workspace_id may be added.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Conversations to return, or messages with conversation_id. Default 50, max 100. | |
| filter | No | Conversation filter. Defaults to all (excludes archived). | |
| offset | No | Skip this many conversations before returning results. | |
| search | No | Search participant username or last message preview. | |
| platform | No | instagram or facebook. Threads has no DMs. | |
| account_id | No | Social account ID from list_accounts. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. | |
| conversation_id | No | One conversation (from a list call) with its messages. |
list_google_business_mediaRead-onlyIdempotentInspect
List the photos and videos on a Google Business Profile gallery (the media shown on Maps and Search) for one location/account or every accessible GBP location. This is separate from media attached to a post. Returns each item's resource name, category, format, and attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Google Business social account ID from list_accounts. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id. | |
| workspace_id | No | Filter to a workspace ID from whoami. |
list_google_business_reviewsRead-onlyIdempotentInspect
Google Business Profile reviews. view=reviews (default): reviews for one location/account or every accessible location, paging through everything Google has (not just the first 50) with the full untruncated review text, its date, and each location's total review count; filter by rating or unanswered, page with limit/offset. view=review_link (account_id or location_id): the direct public Google review link plus the Google Place ID (ChIJ...); that Place ID is output only and must NOT be passed back as location_id.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | reviews (default) or review_link. | reviews |
| limit | No | reviews: maximum reviews to return in this call. Every returned review is listed in full. | |
| offset | No | reviews: skip this many reviews before returning results. Use with limit to page through a location with more reviews than one call returns. | |
| rating | No | reviews only. | |
| account_id | No | Google Business social account ID from list_accounts. | |
| unanswered | No | reviews only. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id. | |
| workspace_id | No |
list_jobsRead-onlyIdempotentInspect
AI generation jobs. type=image: one image job by job_id, or recent image jobs when job_id is omitted (filter by status, limit); poll it after generate_image for the finished urls. type=video: one video job by job_id, or recent video jobs (status includes dismissed, limit); poll it after generate_video for the finished video_url.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | image or video. | |
| limit | No | ||
| job_id | No | One job. Leave out to list recent jobs. | |
| status | No | Filter a job list. dismissed is video only. |
list_mediaRead-onlyIdempotentInspect
List the newest media assets for the authenticated user. After create_media_drop, pass drop_session_id to see files uploaded on /drop/. Use public_url with validate_post / create_post. The output says whether every matching file is shown; page with offset (offset + limit up to 1000) when it is not.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | How many assets to skip. Use the offset the previous page gives to get the next page. | |
| drop_session_id | No |
list_oauth_clientsRead-onlyIdempotentInspect
List self-serve OAuth developer clients owned by the user. These are public PKCE clients for third-party app integrations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_platformsRead-onlyIdempotentInspect
Platforms, settings schemas, and connection links. view=platforms (default): every posterly integration with posting capabilities, content and media limits, settings schemas, helper tools, and analytics support. view=schema: the settings schema for one connected account_id (preferred: returns account context and connection-specific capabilities, needed before Instagram native tags/collaborators) or one platform; account_id wins if both are given. view=connect_link: dashboard connection links and readiness for every target, or one target (instagram, meta, linkedin_page, twitter, telegram, reddit, wordpress, ...); credential platforms show the credential_fields that connect_account needs. For a guided flow with pollable status, use create_connect_session.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | platforms (default), schema, or connect_link. | platforms |
| target | No | view=connect_link: optional connection target such as instagram, meta, linkedin_page, twitter, telegram, reddit, or wordpress. | |
| platform | No | view=schema: platform ID. Aliases x, gmb, and instagram-standalone are also accepted by the API. | |
| account_id | No | view=schema: connected social account ID from list_accounts. Preferred because it returns account context. | |
| workspace_id | No | view=connect_link: filter connected account counts to a workspace. | |
| include_planned | No | Include planned integration possibilities such as reddit, medium, skool, whop. |
list_postsRead-onlyIdempotentInspect
Posts in your workspaces, teammates' too, per your role there (brand-locked seats only see their assigned brands). If workspace_id is omitted, this searches every workspace you belong to. view=list (default): posts filtered by status (scheduled, published, failed, draft), platform, account_id, workspace_id, brand_id, approval_status, approval_waiting_on, and a scheduled date range: scheduled_from (inclusive) and scheduled_to (a plain date includes that whole day), read in timezone (IANA, default UTC; also the zone times are shown in). Returns limit posts (default 20, max 200) starting at offset; with a date range the order defaults to oldest first (order=asc|desc). The output always says whether every matching post was shown. If it says more are available, call again with the offset it gives and keep paging until all are shown before drawing any conclusion about totals, gaps, or how busy a client is. view=counts (scheduled_from and scheduled_to required, up to 366 days): exact totals per day, status, account, and brand for the same filters (limit, offset, and order are ignored); use it for "how many" or "is this month full" questions. approval_waiting_on=client is the same queue as approval_status=pending_client. Each post includes approval.pending_client_approval.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | list (default): the posts themselves, one page at a time. counts: exact totals per day, status, account, and brand (needs scheduled_from and scheduled_to). | list |
| limit | No | Posts per page (default 20, max 200). Ignored by view=counts. | |
| order | No | asc (oldest first) or desc (newest first). Default asc with a date range, otherwise desc. Ignored by view=counts. | |
| offset | No | How many matching posts to skip. Use the offset the previous page gives to get the next page. Ignored by view=counts. | |
| status | No | ||
| brand_id | No | Filter to posts assigned to a specific brand/client (the id from list_brands). | |
| platform | No | ||
| timezone | No | IANA time zone such as Europe/London for reading plain dates and showing times. Default UTC. | |
| account_id | No | ||
| scheduled_to | No | End of the scheduled range: a plain date (2026-10-31) includes that whole day; an ISO date-time is exclusive. | |
| workspace_id | No | ||
| scheduled_from | No | Start of the scheduled range, inclusive: a date (2026-10-01) or an ISO date-time. Plain dates and times without an offset are read in timezone. | |
| approval_status | No | Filter by client review approval status. pending_client means the post is waiting on the client. | |
| approval_waiting_on | No | client: approval_status pending_client. team: changes_requested or rejected. Conflicts with a non-overlapping approval_status. |
list_post_suggestionsRead-onlyIdempotentInspect
List proactive post suggestions: evidence-based weekly drafts posterly writes in each account's learned voice, each with a rationale tying it back to what has performed well. Filter by account_id and status (pending, scheduled, dismissed; default pending). The output says whether every matching suggestion is shown; page with offset until it does. Read-only; requires a Pro plan or higher. Use dismiss_suggestion to hide one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | How many suggestions to skip. Use the offset the previous page gives to get the next page. | |
| status | No | pending | |
| account_id | No | Filter to one social account ID (from list_accounts). |
list_publishing_pausesRead-onlyIdempotentInspect
Is publishing paused? Shows whether the workspace is paused, which brands are paused (only brands you can see), and whether you may pause, resume, or publish missed posts. Read-only. Change it with manage_publishing_pause.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Workspace ID from whoami. Defaults to your default workspace. |
list_webhooksRead-onlyIdempotentInspect
List API webhook subscriptions, their event filters, active state, and most recent delivery status.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No |
list_workspace_membersRead-onlyIdempotentInspect
List the people in a workspace: members (with role, status, brand access and API access) and pending invites, plus seats in use. API access says whether a teammate can use this workspace's API plan from their own keys and AI apps; owners and admins also see each member's key count, connected AI apps and last use. Works with an API key that has the Manage team permission (any workspace member can list; brand-limited teammates only see brand ids they can access), or from ChatGPT, Claude and other OAuth connections when the user is an owner or admin of the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | Workspace ID (from whoami). |
manage_commentDestructiveInspect
Act on an inbox comment (Pro plan or higher plus posts:write). action=reply (comment_id, content): reply to an Instagram, Facebook Page, Threads, or LinkedIn Page comment; type private is Instagram only, the others are public replies only. action=update (comment_id, is_hidden and/or is_read): hide or unhide it on the platform, or mark it read or unread; reversible, no confirm needed. action=delete (comment_id): delete an Instagram or Facebook Page comment, irreversible and admin only; Threads replies cannot be deleted, hide them instead. reply and delete use preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | reply: public (default) or private. Private is Instagram only. | |
| action | Yes | reply, update, or delete. | |
| confirm | No | reply and delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| content | No | reply: reply text to post. | |
| is_read | No | update: mark the comment read or unread in posterly. | |
| is_hidden | No | update: hide or unhide the comment on Instagram, Facebook, or Threads. | |
| comment_id | Yes | Comment ID from list_comments. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. |
manage_conversationInspect
Act on the social inbox (Pro plan or higher plus posts:write). action=send (conversation_id, content): send a DM reply in an Instagram or Facebook Page conversation, honoring the 24-hour messaging window (Threads has no DMs); preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id. action=sync (account_id): pull the latest Instagram, Facebook Page, Threads, or LinkedIn inbox data for one account; 30-second cooldown (60 for LinkedIn); Threads and LinkedIn sync comments only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | send or sync. | |
| confirm | No | send: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| content | No | send: message text to send. | |
| sync_type | No | sync: what to sync. Defaults to all. Threads and LinkedIn are comments-only. | |
| account_id | No | sync: social account ID from list_accounts. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. | |
| conversation_id | No | send: conversation ID from list_conversations. |
manage_google_business_mediaDestructiveInspect
Change a Google Business Profile gallery (the photos and videos shown on Maps and Search). action=add (source_url, category): add a photo or video from a public https URL (upload it with upload_media first); COVER and PROFILE are single-slot and replace the existing one. action=delete (media_name from list_google_business_media): permanently remove an item from the public profile. Both use preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | add or delete. | |
| confirm | No | Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| category | No | add: which gallery category to add the media to. | |
| account_id | No | Google Business social account ID from list_accounts. | |
| media_name | No | delete: full media resource name from list_google_business_media (accounts/.../locations/.../media/...). | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| source_url | No | add: public https URL of the photo or video (from upload_media). Photos must be JPG or PNG, 10 KB to 5 MB. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id. | |
| media_format | No | add: defaults to PHOTO. Use VIDEO for videos (Google caps profile videos at 30s / 75MB). | |
| workspace_id | No | Filter to a workspace ID from whoami. |
manage_google_business_reviewDestructiveInspect
Act on Google Business Profile reviews. action=suggest_reply (star_rating, optional review_text): short, brand-aware AI reply suggestions; uses the AI Caption Assist allowance and never posts. action=reply (review_name, comment): post or update the owner reply. action=delete_reply (review_name): delete the owner reply. reply and delete_reply use preview then confirm: call without confirm to get a preview and preview_id (it repeats the review name, location, and exact reply text; show the reviewer, rating, and review text from list_google_business_reviews alongside it), then call again with confirm=true and that preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | professional | |
| count | No | ||
| action | Yes | suggest_reply, reply, or delete_reply. | |
| comment | No | reply: the exact owner reply text. | |
| confirm | No | reply and delete_reply: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| account_id | No | Google Business social account ID from list_accounts (optional brand voice context for suggest_reply). | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id. | |
| review_name | No | reply and delete_reply: full Google review resource name. | |
| review_text | No | suggest_reply: the review text. Leave empty for rating-only reviews. | |
| star_rating | No | suggest_reply: review rating from 1 to 5. | |
| workspace_id | No | ||
| business_name | No | ||
| reviewer_name | No |
manage_oauth_clientDestructiveInspect
Manage self-serve OAuth 2.1 + PKCE developer clients (public clients with no client secret; list them with list_oauth_clients). action=create: client_name, allowed_redirect_uris, and default_scopes; confirm=true only after the user confirms the name, redirect URIs, and scopes. action=update: client_id plus the changed fields; confirm=true after the user confirms the changes. action=delete: client_id; prevents new authorizations (existing access tokens stay revocable as API keys); preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create, update, or delete. | |
| confirm | No | create and update: true after explicit user confirmation. delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| homepage | No | ||
| client_id | No | update and delete: the client_id from list_oauth_clients. | |
| is_active | No | ||
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| client_name | No | create (required) or update. | |
| description | No | ||
| default_scopes | No | create (required) or update. | |
| allowed_redirect_uris | No | create (required) or update. |
manage_publishing_pauseDestructiveInspect
Pause or resume publishing for a whole workspace or one brand (check it first with list_publishing_pauses). Only act when the user asks; never pause on your own initiative. action=pause (optional brand_id; leave it out for the whole workspace): holds every scheduled post in that scope and blocks Post now until an admin resumes. Call it first without confirm to get a preview (scope and how many scheduled posts it holds), show it to the user, and only after they agree call again with confirm=true. Publisher or higher; a seat limited to some brands can only pause those brands. action=resume (optional brand_id; admin or higher): future posts are scheduled again; posts whose time passed while paused stay paused and are listed as missed. Missed posts never publish on their own. action=publish_missed (post_ids from the resume, confirm=true after the user agrees; admin or higher): publishes those missed posts now.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | pause, resume, or publish_missed. | |
| confirm | No | pause: leave out to get a preview; true only after the user agreed. publish_missed: true after the user agreed. resume: not needed. | |
| brand_id | No | pause and resume: a brand ID from list_brands. Leave it out (never empty) for the whole workspace. | |
| post_ids | No | publish_missed: the missed post IDs a resume returned. | |
| workspace_id | No | Workspace ID from whoami. Defaults to your default workspace. |
manage_webhookDestructiveInspect
Change a webhook subscription (list them first with list_webhooks). action=update (webhook_id): change URL, events, workspace, description, or active state; outbound side effects, so pass confirm=true only after explicit confirmation. action=delete (webhook_id): remove the subscription; preview then confirm: call without confirm to get a preview and preview_id, show the URL, events, and workspace, then call again with confirm=true and that preview_id. action=test (webhook_id): send a signed webhook.test delivery; confirm=true after explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | update only. | |
| action | Yes | update, delete, or test. | |
| events | No | update only. | |
| confirm | No | update and test: true after the user explicitly confirms. delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id. | |
| is_active | No | update only. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true for actions that preview first. | |
| webhook_id | Yes | Webhook ID from list_webhooks. | |
| description | No | update only. | |
| workspace_id | No | update only. null clears the workspace. |
manage_workspace_memberDestructiveInspect
Invite, update, or remove a workspace colleague. This SENDS EMAILS and CHANGES WHO CAN ACCESS the workspace. Works with an API key that has the Manage team permission, or from ChatGPT, Claude and other OAuth connections; either way the user must be a workspace owner or admin. ALWAYS preview first: call without confirm, show the returned preview summary to the user, and only call again with confirm: true plus the returned preview_id after the user explicitly approves. action=invite: email and role required (publisher, editor or viewer), optional brand_ids and resend; always sends a pending invite email, never adds anyone instantly. action=update: member_id or invite_id (from list_workspace_members) plus role and/or brand_ids; or member_id plus api_access (true or false, on its own) to turn API and AI app access on or off for that teammate, which lets them use the workspace API plan from their own keys and AI apps (off by default; you cannot change your own; only the owner can change it for an admin; turning it off stops their keys, AI app connections and webhooks for this workspace). action=remove: member_id (removes the teammate and revokes their API keys for this workspace) or invite_id (cancels a pending invite). Admin seats can only be granted in the posterly dashboard. The workspace owner is emailed about every change.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | action=invite (required) or action=update: publisher, editor, or viewer. Admin is dashboard-only. | |
| No | action=invite only: the colleague email address. | ||
| action | Yes | invite, update, or remove. | |
| resend | No | action=invite only: email an unchanged pending invite again. | |
| confirm | No | Leave out to get a preview. Set true only after the user explicitly approved the preview, together with preview_id. | |
| brand_ids | No | action=invite or action=update: limit the seat to these brand IDs (from list_brands). Empty array means every brand. Omit on update to keep the current brands. | |
| invite_id | No | action=update or action=remove: a pending invite ID from list_workspace_members. | |
| member_id | No | action=update or action=remove: a member ID from list_workspace_members. | |
| api_access | No | action=update with member_id only, on its own: true lets the teammate use this workspace's API plan from their own keys and AI apps; false turns it off. | |
| preview_id | No | The preview_id returned by the preview call. Required with confirm: true. | |
| workspace_id | Yes | Workspace ID (from whoami). |
pause_subscriptionDestructiveIdempotentInspect
Pause the authenticated user's posterly subscription for 30 days (one pause allowed per 90-day cooldown). Billing action; requires the billing:write scope. Only call after the user explicitly confirms.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true after the user explicitly confirms pausing the subscription. |
resume_subscriptionIdempotentInspect
Resume the authenticated user's paused posterly subscription, restoring active billing. Requires the billing:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
run_video_functionRead-onlyIdempotentInspect
Run a read-only Google Veo or xAI Grok video helper function before generation. Does not generate video or spend credits.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Function parameters. estimate_cost accepts model, duration_seconds, resolution, output, and xAI input_image_count. validate_request accepts a generate_video-style payload. | |
| identifier | Yes | Video generator identifier from get_video_options. | |
| functionName | Yes | Helper function name from get_video_options.tools. |
submit_agent_feedbackInspect
Submit bounded private operational telemetry after a concrete posterly workflow outcome. This is non-destructive to product content but writes a private feedback event. Never include API keys, prompts, captions, media URLs, personal data, or fabricated outcomes. Requires an authenticated bearer API key and paid API add-on.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| client | No | ||
| source | Yes | ||
| comment | No | ||
| context | No | ||
| outcome | Yes | ||
| error_code | No |
submit_product_feedbackInspect
File a product bug, idea, or general feedback on the public posterly feedback board (same board users see in the dashboard). Only call this when the human explicitly asks to report a bug, suggest a feature, or send feedback to posterly. Require confirm=true after they approve the title and category. Never use this for tool failures or retries - use submit_agent_feedback for private operational telemetry. Never include API keys, secrets, captions, media URLs, or personal data about third parties. Requires an authenticated bearer API key and paid API add-on.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| client | No | ||
| source | No | ||
| confirm | Yes | ||
| context | No | ||
| category | Yes | ||
| description | No |
trigger_platform_helperRead-onlyIdempotentInspect
Run a platform helper for account-specific discovery, such as pinterest.boards, tiktok.creator_info, linkedin.recent_mentions, or x.quota.
| Name | Required | Description | Default |
|---|---|---|---|
| helper | Yes | ||
| params | No | ||
| platform | No | Platform hint when no account_id is supplied. | |
| account_id | No | Connected social account ID when the helper needs account context. |
update_postDestructiveIdempotentInspect
Change a scheduled or draft post. DESTRUCTIVE WRITE: show the user a side-by-side of CURRENT vs PROPOSED and pass confirm=true only after explicit confirmation. Edit (default): caption, media, schedule, post_type, or settings; cannot edit published posts; if a client already approved the post, a caption edit reopens caption approval, a media or thumbnail edit reopens asset approval, and a reschedule, account change or settings change reopens both. status (scheduled, paused, or draft, with scheduled_at when scheduling a draft): pause, resume, or move back to draft; send it on its own. release_id (with optional group_id): set or repair external release/group IDs; send it on its own. approval_action (request, approve, request_changes, or reject): change client approval. Only a workspace owner or admin may do this. The actor is the API key user, never a brand guest. request emails the brand reviewers. approve, request_changes, and reject are team-side decisions. request_changes needs approval_note. Optional approval_axis is asset or caption; omit it for both. Send approval_action on its own, and pass confirm=true only after the user explicitly confirms.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Change the post status instead of editing it. Send with post_id (and scheduled_at when scheduling a draft) only. | |
| caption | No | ||
| confirm | Yes | Must be true after the user explicitly confirms the proposed change. | |
| post_id | Yes | ||
| group_id | No | With release_id only: an external group/campaign ID. | |
| metadata | No | ||
| settings | No | Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings. For an X Article put article ({ title, cover }) here or in platform_settings. Call list_platforms with view=schema and account_id for the field list. | |
| media_url | No | Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. | |
| post_type | No | Optional post type. Omit for auto-detection from media. | |
| media_urls | No | Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. | |
| release_id | No | Set an external release ID instead of editing the post. Send with post_id and optional group_id only. | |
| scheduled_at | No | ISO 8601 UTC. With status, required when scheduling a draft. | |
| approval_axis | No | With approval_action approve, request_changes, or reject: which axis to decide. Omit for both. Not allowed with request. | |
| approval_note | No | Note stored with the approval change. Required for request_changes. | |
| reel_cover_url | No | ||
| approval_action | No | Change client approval instead of editing the post. Owner or admin only. The actor is the API key user, never a brand guest. Send on its own. | |
| platform_settings | No | Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples. | |
| reel_cover_method | No | ||
| reel_thumb_offset | No |
upload_mediaInspect
Upload an image or video to posterly storage and get a URL for create_post; nothing is published. base64_data with filename: a small file, keep decoded files <=5MB on this relay path. url: fetch a public HTTPS image or video (localhost and private network targets are blocked). For larger files, use create_signed_upload and PUT the raw bytes to its upload_url. Supports JPEG, PNG, GIF, WebP, MP4, MOV, WebM, and counts against the user's storage quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public HTTPS URL of an image or video to copy into posterly storage instead of base64_data. | |
| filename | No | Filename with extension, e.g. photo.jpg. Required with base64_data. | |
| base64_data | No | Base64-encoded file data. The HTTP MCP transport requires base64 (no filesystem access). | |
| content_type | No | MIME type (auto-detected from filename if omitted) | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. |
validate_postRead-onlyIdempotentInspect
Validate and normalize one post without creating it. This is non-destructive: it does not create records, copy remote media, consume post-item/storage quota, reserve X quota, emit webhooks, or enqueue publication. Third-party media may return remote_media_not_materialized because live create performs storage copy and final byte validation. Use this before showing the final preview and asking for confirmation to call create_post.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided. | |
| metadata | No | ||
| platform | No | Platform name when using username. Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases x, gmb, and instagram-standalone are also accepted by the API. | |
| settings | No | Deprecated alias of platform_settings (or instagram_settings for Instagram). Prefer those instead. | |
| username | No | Account username; requires platform. | |
| media_url | No | Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs. | |
| post_type | No | Optional post type. Omit for auto-detection from media. Supported semantic values include text, image, video, carousel, reel, story, story_series, document, x_thread, threads_thread, photo, and cover_photo. | |
| account_id | No | Social account ID from list_accounts. | |
| media_urls | No | Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. | |
| scheduled_at | No | ISO 8601 UTC datetime. Omit to publish immediately. | |
| thread_posts | No | For X or Threads: 2+ entries, one per post in the reply chain. | |
| workspace_id | No | Workspace ID from whoami. | |
| platform_settings | No | Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples. | |
| instagram_settings | No | Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first. |
whoamiRead-onlyIdempotentInspect
Who you are and how posterly is connected. view=identity (default): the authenticated user, API key scopes, workspaces, and onboarding next step. Call this first; if onboarding.completed is false, walk About you, Connect, Brand voice, and First post IN THIS conversation and do not send the user to /onboarding-v2. view=status: hosted MCP server version, latest npm version for local app clients, endpoint and API auth health, and update guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | identity (default): user, scopes, workspaces, onboarding. status: MCP server and connection health. | identity |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
create_post1 field changed- added
Input schema / properties / platform_settings / properties / articleAdded value: +{ + "description": "X Article (needs an X Premium account): publish the caption as an Article. Pass null to turn Article mode off. The caption is the Markdown body (headings, bold, italic, lists, quotes, code blocks, tables, dividers); reference attached images with . Cannot be combined with poll, thread_posts, paid_partnership, video, or GIF.", + "properties": { + "cover": { + "description": "Use the first attached image as the Article cover (default) or none.", + "enum": [ + "first_image", + "none" + ], + "type": "string" + }, + "title": { + "description": "Article title (required).", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": [ + "object", + "null" + ] +}
- Changed
create_posts_batch1 field changed- added
Input schema / properties / posts / items / properties / platform_settings / properties / articleAdded value: +{ + "description": "X Article (needs an X Premium account): publish the caption as an Article. Pass null to turn Article mode off. The caption is the Markdown body (headings, bold, italic, lists, quotes, code blocks, tables, dividers); reference attached images with . Cannot be combined with poll, thread_posts, paid_partnership, video, or GIF.", + "properties": { + "cover": { + "description": "Use the first attached image as the Article cover (default) or none.", + "enum": [ + "first_image", + "none" + ], + "type": "string" + }, + "title": { + "description": "Article title (required).", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": [ + "object", + "null" + ] +}
- Changed
update_post2 fields changed- added
Input schema / properties / platform_settings / properties / articleAdded value: +{ + "description": "X Article (needs an X Premium account): publish the caption as an Article. Pass null to turn Article mode off. The caption is the Markdown body (headings, bold, italic, lists, quotes, code blocks, tables, dividers); reference attached images with . Cannot be combined with poll, thread_posts, paid_partnership, video, or GIF.", + "properties": { + "cover": { + "description": "Use the first attached image as the Article cover (default) or none.", + "enum": [ + "first_image", + "none" + ], + "type": "string" + }, + "title": { + "description": "Article title (required).", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": [ + "object", + "null" + ] +} - changed
Input schema / properties / settings / descriptionPrevious value: -"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings; call list_platforms with view=schema and account_id for the field list."New value: +"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings. For an X Article put article ({ title, cover }) here or in platform_settings. Call list_platforms with view=schema and account_id for the field list."
- Changed
validate_post1 field changed- added
Input schema / properties / platform_settings / properties / articleAdded value: +{ + "description": "X Article (needs an X Premium account): publish the caption as an Article. Pass null to turn Article mode off. The caption is the Markdown body (headings, bold, italic, lists, quotes, code blocks, tables, dividers); reference attached images with . Cannot be combined with poll, thread_posts, paid_partnership, video, or GIF.", + "properties": { + "cover": { + "description": "Use the first attached image as the Article cover (default) or none.", + "enum": [ + "first_image", + "none" + ], + "type": "string" + }, + "title": { + "description": "Article title (required).", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": [ + "object", + "null" + ] +}
1 tool update
- Changed
manage_google_business_media1 field changed- changed
Input schema / properties / source_url / descriptionPrevious value: -"add: public https URL of the photo or video (from upload_media)."New value: +"add: public https URL of the photo or video (from upload_media). Photos must be JPG or PNG, 10 KB to 5 MB."
61 tool updates
- First observed
ask_support - First observed
audit_google_business_profile - First observed
cancel_subscription - First observed
connect_account - First observed
create_api_key - First observed
create_connect_session - First observed
create_media_drop - First observed
create_post - First observed
create_posts_batch - First observed
create_signed_upload - First observed
create_webhook - First observed
delete_api_key - First observed
delete_post - First observed
disconnect_account - First observed
dismiss_suggestion - First observed
downgrade_subscription - First observed
find_available_slot - First observed
generate_captions - First observed
generate_image - First observed
generate_video - First observed
get_credits - First observed
get_post - First observed
get_subscription - First observed
get_updates - First observed
get_video_options - First observed
get_x_posting_quota - First observed
list_accounts - First observed
list_activity - First observed
list_analytics - First observed
list_brands - First observed
list_comments - First observed
list_conversations - First observed
list_google_business_media - First observed
list_google_business_reviews - First observed
list_jobs - First observed
list_media - First observed
list_oauth_clients - First observed
list_platforms - First observed
list_post_suggestions - First observed
list_posts - First observed
list_publishing_pauses - First observed
list_webhooks - First observed
list_workspace_members - First observed
manage_comment - First observed
manage_conversation - First observed
manage_google_business_media - First observed
manage_google_business_review - First observed
manage_oauth_client - First observed
manage_publishing_pause - First observed
manage_webhook - First observed
manage_workspace_member - First observed
pause_subscription - First observed
resume_subscription - First observed
run_video_function - First observed
submit_agent_feedback - First observed
submit_product_feedback - First observed
trigger_platform_helper - First observed
update_post - First observed
upload_media - First observed
validate_post - First observed
whoami
Related MCP Connectors
Publish, schedule, and manage social media posts across major platforms via the Postproxy API.
Schedule and publish social posts with OAuth, drafts, media, workspaces, and brand memory.
- OutstandOAuthso.outstand
Publish and schedule social media posts and read analytics across 12 networks through one API.
Publish and schedule social posts, upload media, and review analytics through OAuth.
Related MCP Servers
- AlicenseAqualityAmaintenanceSchedule and manage social media posts across 13 platforms (Bluesky, Threads, Instagram, LinkedIn, Mastodon, YouTube, Facebook, Pinterest, Telegram, Nostr, X/Twitter, Discord, Tumblr and more). OAuth 2.0 + PKCE, 10 tools, draft-first workflow for AI agents.1017AGPL 3.0
- AlicenseAqualityAmaintenanceThe best free social media publishing and scheduling API. Publish to 11 platforms from a single API call. Schedule posts, upload media, track analytics, and automate your social media workflow.512MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to write, schedule, publish, and measure social media posts across LinkedIn, Bluesky, Mastodon, and YouTube, plus manage media and queue slots, through one OAuth URL with no install or API key. It also covers retrying, cancelling, restoring posts and reading analytics, with reversibility safeguards around irreversible publishing.MIT
- AlicenseAqualityCmaintenanceEnables publishing to Facebook, Instagram, and YouTube through official APIs using your own OAuth credentials, with support for images, videos, Reels/Stories, and scheduled posts.6MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.