Business & Operations
Overview
Postiv helps you find strong content examples, turn your ideas and workspace knowledge into drafts, create images, carousels and infographics, and schedule LinkedIn posts. Manage connected personal profiles, teammates and company pages from one workspace. Review performance to find what works and repurpose successful posts. Read and reply to LinkedIn comments, manage approvals, and use saved writing styles and content plans. Publishing and engagement require a connected LinkedIn profile; drafts and workspace research can be used before connecting one.
Tools
Track a personal LinkedIn profile in an external feed list, maximum thirty profiles/list. New-post discovery runs in the background; pending means discovery has not completed.
add_knowledge
ChatGPTAdd a text document to the workspace knowledge base. It gets chunked and embedded, becoming retrievable context for Postiv's AI when it drafts posts. Use for positioning docs, meeting notes, newsletters, product updates. Do NOT use this to draft posts — use create_post.
approve_scheduled_post
ChatGPTRecord the API-key actor's approval for one scheduled post. This never bypasses other approvers: the post becomes queued only after everyone approves. For an expired approval, scheduledTime is required and must be a new future ISO-8601 time. Call only after the user explicitly approves the exact copy returned by list_pending_approvals.
archive_pillar
ChatGPTSoft-delete an active content pillar so future weekly plans stop using it. Existing plan items and historical attribution remain intact. Use only after the user explicitly asks to retire that pillar.
attach_post_media
ChatGPTAttach an existing IMAGE to a draft using the same images/image_versions storage as the editor, without scheduling or AI generation. Provide exactly one url, assetId, or imageId. For a local image or inaccessible chat attachment, call show_media_upload if you cannot read the bytes, or use prepare_media_upload / complete_media_upload for a background upload. Browse list_media first to reuse library media. URL imports support JPEG/PNG/GIF/WebP up to 10MB. schedule_post automatically includes the saved image when media inputs are omitted. PDFs, videos, carousels, and infographics are selected at scheduling time via schedule_post.mediaSource, as in the editor; they are not persisted on unscheduled drafts. Returns attachment data without UI; use show_image to present the saved image.
cancel_team_engagement
ChatGPTCancel a waiting or pending team engagement by its id from list_team_engagements. Cannot cancel an engagement already sending or completed; does not delete published content.
comment_on_post
ChatGPTImmediately publish a top-level LinkedIn comment as integrationId, on a team or tracked external post. For tags, resolve the person/company URL with resolve_linkedin_mention using this acting integrationId, then insert its mention token in text. Requires authorization for target, actor and text. Returns commentId for deletion. Do not retry uncertain delivery; verify LinkedIn. A published result with warnings must not be reposted.
complete_media_upload
ChatGPTAfter sending bytes using prepare_media_upload, verify and save the upload to the media library. Accepts only that uploadId, checks the exact actor/workspace, size and file signature, and returns assetId plus attachInput for images and scheduleInput for all media. Safe to retry the same uploadId; it returns the same saved asset. Does not attach, schedule, or publish. The inline widget uses this same completion action.
create_carousel
ChatGPTCreate a LinkedIn carousel (multi-slide document post) from a structured CONTENT outline. For a single-canvas infographic that publishes as an image post, use create_infographic instead. Postiv generates the visual slides itself using the profile's saved brand style, colors, fonts, and slide templates — NEVER write or supply slide HTML, and don't describe pixel-level design; provide content (headlines, body, list items, stats) plus optional high-level styleInstructions. Slides are generated as editable canvas layouts: each one is a designed template with named text and image fields, so any slide's copy can be rewritten afterwards with edit_carousel_slide. Plan the cover headline at ~8 words max and slide 2 as a second hook (LinkedIn previews the cover plus a peek of slide 2). Pass planItemId when drafting a Bob plan item, so attribution and plan state stay linked. First use list_visual_templates and get_visual_template to choose and inspect a design, then pass styleId and outline.slides[].fields with exact field names and complete final copy. Template recommendedLength is guidance, not a hard limit; preserve requested details and let text wrap and grow vertically. maxLength is only an input safety cap. Generation fills the template directly without an intermediate mapping model. After creation, render_carousel prepares slide images and the PDF; show_carousel displays them only when needed. Creation itself does not display a widget. To publish, the carousel needs a companion post for the caption text (create_post), then schedule_post with carouselId.
create_engage_feed_list
ChatGPTCreate an external-profile tracking list, maximum five per workspace. Check existing lists first.
create_infographic
ChatGPTCreate a single 1080x1350 editable Fabric infographic that publishes to LinkedIn as an IMAGE post (not a document — use create_carousel for multi-slide documents). Postiv generates the visual canvas itself using the profile's saved brand style — NEVER write or supply canvas HTML; provide a structured CONTENT plan (headline of at most 8-10 words, up to 4 sections, up to 6 data points, at most 8 items total). Only use real numbers, stats, and facts the user actually supplied — never invent data. Keep total on-canvas copy to 30-60 words: pick the sections and data points that matter most rather than including everything. For a designed template, first use list_visual_templates with format infographic and get_visual_template, then pass styleId and outline.fields with exact named slots and complete final copy (sections may be empty). Template recommendedLength is guidance; preserve requested details and let text wrap and grow vertically. maxLength is only an input safety cap. Without styleId, choose one archetype or auto. Pass planItemId when drafting a Bob plan item, so attribution and plan state stay linked. Generation fills native editable text and shape objects. After creation, render_carousel prepares the PNG; show_carousel displays it only when needed. Creation itself does not display a widget. To publish, create a companion post for the caption (create_post), then schedule_post with carouselId — it publishes as an image post automatically.
create_pillar
ChatGPTCreate one recurring content pillar for a LinkedIn profile (maximum five active pillars). Pillars are planning strategy, not individual post ideas. Supply a concise description and a notebook-style content definition.
create_post
ChatGPTCreate a post draft in the workspace library. Follow integrationId's assignment rules. Before writing original content, search workspace knowledge and, only when a profile is selected, load its writing style with get_writing_style; skip those separate reads when the user supplied complete source/copy or a selected Bob plan item's complete drafting package already contains them. Pass templateId when using search_templates, and planItemId when drafting a Bob plan item, so attribution and plan state stay linked. The supplied copy is saved as-is; there is no automatic hook rewrite. Humanization is optional and defaults to false; pass humanize=true only when the user wants the extra humanizer pass. Drafts never publish by themselves; use schedule_post to queue publishing. Returns saved post data without UI; use show_post when presenting the finished draft for review.
create_scratchpad_item
ChatGPTSave a quick idea into the org's shared scratchpad - a mid-week buffer of notes, links, and images that decays after 30 days and feeds Bob's weekly content plan. Use for capturing a thought, article, or image worth revisiting, NOT for drafting or publishing content (use create_post for that). kind 'note' needs content; kind 'url' needs url (title/description/image are scraped server-side); kind 'image' needs imageUrl (fetched and stored server-side, max 10MB). File uploads are REST-only.
create_team_brief
ChatGPTCreate a workspace-wide writing assignment and assign it to every current member. Only owners and admins may call this. Use only when the user explicitly asks to create a team brief.
delete_comment
ChatGPTDelete the real published LinkedIn comment, then clean up Postiv history. Requires an explicit deletion request and a recorded commentId belonging to this authenticated user and acting integrationId. Works for comments/replies from either source, even after untracking. Comments without a matching history record must be deleted on LinkedIn.
delete_scratchpad_item
ChatGPTPermanently delete a scratchpad item - this cannot be undone, and also removes its stored image/file if any. Only delete when the user explicitly asks to remove a scrap; otherwise leave it alone, since every scrap already auto-expires 30 days after creation without any action needed.
deny_scheduled_post
ChatGPTDeny a pending scheduled post as the API-key actor. This prevents publishing and sets the queue to approval_denied. Call only after the user explicitly denies the exact copy returned by list_pending_approvals.
detach_post_media
ChatGPTRemove the saved image attachment from a draft post without deleting the library file or changing the post text. Does not schedule or publish.
dismiss_comment
ChatGPTMark a team-inbox comment as no reply needed, removing it from Postiv’s unanswered count. Explicit user action; reading alone does not dismiss. Does not reply, delete, hide or mark anything on LinkedIn.
edit_carousel_design
ChatGPTApply exact design edits to one canvas slide of a draft carousel or infographic, saved as ONE new version. Call get_carousel_design first and target objects by the exact id (or field name) it returned; the server never guesses, and an unknown id returns suggestions. Put every requested change for the slide in one ops batch. Ops: set (props such as fill, stroke, opacity, left, top, width, height, text, fontSize, fontFamily, fontWeight, textAlign), image (src {logo=company.com}, {asset=ASSET_ID}, an https image URL, or "" to clear), hide, show, delete, add (Textbox, Rect, Circle, Line or Image), replaceColor (every use of one colour on the slide) and order (front/back/forward/backward). External images are fetched and stored by Postiv; one that cannot be loaded fails the call before anything is saved. Returns the updated object map and new baseVersionId without UI. For visual inspection, render_carousel then show_carousel. Scheduled or published carousels are locked. Call render_carousel before scheduling a carousel.
edit_carousel_slide
ChatGPTEdit ONE slide of a draft carousel — or the single canvas of an infographic (use slideIndex 0) — with a natural-language instruction (e.g. "shorten the headline to 5 words", "turn the list into 3 numbered steps"). Describe the change; never supply HTML or canvas JSON. New carousels and infographics are canvas layouts: the instruction rewrites the slide's named TEXT fields (get_carousel lists them), and the designed layout, colors and images are NOT changed by an instruction — use get_carousel_design and edit_carousel_design for colours, fonts, sizes, positions, images and shapes. Older HTML-based slides are re-authored as HTML instead, so visual instructions still apply to those. Saves a new version, which invalidates the previous render: call render_carousel afterwards to prepare updated exports, including the PDF required before carousel scheduling. get_carousel only reads current state and refreshes existing export URLs. Scheduled/published carousels are locked — unschedule the post first. One slide per call; takes 15-90 seconds (longer for style-heavy slides) and costs credits — don't retry blindly.
edit_post_image
ChatGPTEdit an existing Postiv image with natural-language instructions — the way to iterate on a generate_post_image result instead of regenerating from scratch. Stacks a new version on the same image; if the image is attached to a post, the post publishes the newest version automatically. Editing takes 15-60 seconds and costs real generation credits — don't retry blindly on slow responses. Returns saved image data without UI; use show_image when presenting it for review.
generate_post_image
ChatGPTGenerate a brand-NEW AI image for a post using Postiv's branded style presets or a freeform prompt. Only for posts that don't have the image you need yet: if a generated image already exists and the user wants it changed (different style, colors, 'more minimalist', etc.), you MUST call edit_post_image with the existing imageId instead — regenerating discards the version history and double-spends credits. The image is attached to the post (replacing any existing one), stored in the workspace image library, and published with the post by schedule_post automatically. Provide either style or freeformPrompt. Generation takes 15-60 seconds and costs real generation credits — don't retry blindly on slow responses. Returns saved image data without UI; use show_image when presenting it for review.
get_analytics_summary
ChatGPTRead cached KPI totals (impressions, engagements, engagement rate, follower growth) for one analytics account or the whole workspace, over a trailing period or an explicit start/end date range.
get_bob_planning_settings
ChatGPTRead Bob's planning settings for one LinkedIn profile: current status, posting cadence, active pillar count, and whether Bob already has a plan for the current week. Bob is Postiv's autonomous content planner.
get_carousel
ChatGPTRead a carousel or infographic: current version, per-slide text, status, export readiness and fresh authorized export URLs. Does not render exports or display UI. Use render_carousel to prepare current exports, then show_carousel only when presenting them.
get_carousel_design
ChatGPTRead one canvas slide of a carousel or infographic for design editing: a compact object map (id, type, field name, text, fill/stroke colours, font, box [left, top, width, height] on the 1080x1350 canvas, hidden/locked) and the slide's colour palette, with the baseVersionId for edit_carousel_design. Use it before any design change (colours, fonts, sizes, positions, images, shapes). Match the user's words to exact object ids using the map; render_carousel then show_carousel provides optional visual inspection. Legacy HTML slides have no object map; use edit_carousel_slide for those.
get_comment_plug_config
ChatGPTRead the default Comment Plug settings for LinkedIn profiles in this workspace. Use this before schedule_post when the user expects an automatic first comment: schedule_post.commentPlug mode 'inherit' only posts a comment if this profile config is enabled, has variants, and cmmConnected is true. Pass integrationId for one profile, or omit it to inspect all profiles.
get_content_plan_item
ChatGPTThe required reader before drafting a selected Bob plan item. Returns the complete drafting package in one call: exact topic, angle, goal, hook, format, profile and integrationId, trained writing-style instructions, structured attached knowledge sources with titles and asset IDs, trending context, research or sourced media, passed-day state, and ready-to-use createPostInput. Draft only from this result, do not search the knowledge base again unless sourceMaterials is empty, and pass createPostInput to create_post so the draft remains linked to Bob's plan.
get_inspiration
ChatGPTApp-only read of selected inspiration posts to refresh images inside an existing widget. Preserves the same ID lookup and profile access as show_inspiration without opening another widget.
get_media_upload_link
ChatGPTLegacy browser fallback, only when the user specifically requests a web upload page. Prefer show_media_upload for the inline card or prepare_media_upload / complete_media_upload when you can read the file bytes. Get a workspace-specific browser upload page with drag-and-drop and a file selector. Use only when an image, PDF, or video is only on the user's device or attached in a chat whose files you cannot access, including Claude Desktop. Show the returned Upload to Postiv link. The user signs in with the same Postiv account, uploads the file, and pastes its asset reference back into the conversation. Wait for that reference before attaching or scheduling; never claim the file is already uploaded. Images support attach_post_media with assetId; PDFs/videos use schedule_post.mediaSource.assetId once the user authorizes a schedule. Do not ask the user to publicly host a file or pass local paths/base64 to media tools.
get_performance_overview
ChatGPTRead a cached day-by-day performance time series (impressions, engagements) for one analytics account or the whole workspace. Good for spotting trends before drafting new content.
get_pillar
ChatGPTRead one content pillar in full: name, description, freeform content (what it covers and how to write for it), suggested posting day, mode, and 30-day performance (posts published, avg impressions, engagement rate vs. the profile average, top posts) when the pillar has published posts in that window. Use the pillar id from list_pillars.
get_post
ChatGPTRead one post: current content, status, assigned profile, and version number. Posts with status scheduled/published are locked against edits. Returns authoritative data without opening a card; show_post presents the editor when needed.
get_post_analytics
ChatGPTRead cached analytics for one post. Accepts either a Postiv post id from get_post/list_posts or an analytics post id from get_top_posts. Use this for questions about a specific post instead of fetching a broad top-posts list and filtering client-side. If the post has not been published/imported yet, it returns post_analytics_not_found with the post status.
get_post_comments
ChatGPTLive-refresh the complete comment thread of one of the workspace’s own posts (team source). Returns the stored post plus commentId, parentCommentId, text, author, status and unansweredCount. Reading never dismisses comments. External (feed) posts have no readable comment thread and fail with external_comments_unavailable. Incomplete refreshes fail explicitly.
get_team_brief
ChatGPTRead one team writing assignment in full, including its summary, writing instructions, deadline, points, creator, and every member assignment status. Use the id from list_team_briefs.
get_top_posts
ChatGPTRead top cached posts with full metrics and time-limited media URLs. Sort by date/engagements/impressions, or use the outlier sorts (engagement_outlier, reach_outlier) to surface posts that over-performed the account's own baseline — the best inputs for 'write more like this'. Default is all-time: pass period (trailing days) or start/end to answer time-scoped questions like 'top posts last 30 days' — do not filter client-side.
get_visual_template
ChatGPTInspect a chosen carousel or infographic template before writing its copy. Returns exact field names, types, suggested copy lengths, input safety caps and illustrative examples. Request remainingSlideIndices until all layouts you will use have been inspected. Pass the same styleId to creation, with final copy in outline.slides[].fields (carousel) or outline.fields (infographic). Use show_visual_templates with styleIds and slideIndices when visual inspection is needed. No intermediate model maps copy into slots. Image fields accept HTTPS URLs. Name/avatar/CTA branding bindings come from the selected LinkedIn profile. Examples are not user facts.
get_visual_template_page
ChatGPTApp-only pagination inside an already open template picker. Returns preview hydration without opening another widget.
get_workspace
ChatGPTRead the connected Postiv workspace (name, slug) and which scopes this API key has. Call this first to confirm you are in the right workspace and which tools are authorized.
get_writing_style
ChatGPTRead the trained writing style for one LinkedIn profile: priority rules, voice, structure, formatting, vocabulary, custom instructions, saved learnings, and real hook/closing examples. Call this before drafting for that profile and follow modelContext as writing instructions. hasWritingStyle=false means the profile has not trained a style yet; do not invent one.
list_analytics_accounts
ChatGPTList the LinkedIn analytics accounts tracked in this workspace, with last-import timestamps. Each account maps to one LinkedIn profile (integrationId + name). Call this FIRST before any other analytics tool — they all require an accountId, and this is where you resolve which profile the user means. Analytics data is cached (imported from LinkedIn), not live.
list_content_plans
ChatGPTList Bob's weekly content plans for one LinkedIn profile, including every item's topic, angle, format, status, target day, and pillar plus an aggregate pillar distribution. Defaults to the current week; request up to four consecutive weeks. This is a summary only: after the user selects an item, read that exact item before drafting so its sources and writing style are loaded.
list_engage_feed_lists
ChatGPTList current workspace tracking lists and external profiles. Team posts do not need tracking.
list_engagement_posts
ChatGPTFind posts to engage with. source=team (default) includes your own posts, teammates and connected company pages, from successful Postiv publications and analytics records; no tracking list required. Use status=unanswered to work through the inbox. source=feed returns posts from the workspace’s Engage tracking lists (people to engage with). Post text, likes and comment counts come from Postiv’s stored records (collectedAt says when); LinkedIn is never read for post content. Team comment threads refresh live and completely; external posts expose no comment threads. Failed posts appear in failedItems with partial=true; healthy posts remain available. If every post on a page fails, the call fails. Discovery is limited to posts already known to Postiv; this does not crawl LinkedIn for new posts. days/order/cursor use stored discovery time (scheduled time for Postiv publications). Filters apply after loading a page: empty items with nextCursor means continue. unansweredCount covers successfully refreshed team candidates only and is not a workspace total. Keep filters unchanged across pages.
list_linkedin_profiles
ChatGPTList the LinkedIn profiles and company pages connected to this workspace. Returns each profile's integration id — required by schedule_post and used by create_post/update_post to assign a post. profileType is personal (the API actor), team_member (another workspace member's personal profile), or organization_page (a company page). Call this before scheduling.
list_media
ChatGPTBrowse existing uploaded images, PDFs, videos, generated images, carousels, and infographics available to this workspace/actor. Filter by type or search titles, with pagination. Use this when the user wants to reuse existing media rather than generate something new. Images include saved references and attachInput for attach_post_media; all types include scheduleInput for schedule_post. For carousel/infographic contents, follow with get_carousel; call show_carousel to display existing exports. For files still on the user’s device or inaccessible chat attachments, use show_media_upload for an inline picker, or prepare_media_upload / complete_media_upload when you can read the bytes. Signed file URLs expire; browse again to refresh.
list_pending_approvals
ChatGPTList scheduled posts awaiting a decision from the API-key actor in this workspace, including exact post copy, refreshed image/video media, carousel PDF, author and target-profile details, and every approver's status and comments. It never lists another approver's private queue. Call before making any approval decision.
list_pillars
ChatGPTList the recurring content pillars (topics a LinkedIn profile wants to be known for) that Bob's weekly plans draw from. Summary shape only — name, description, mode, and suggested posting day; call get_pillar for full content and 30-day performance. Use list_pillars -> get_pillar before drafting for a specific pillar's theme.
list_posts
ChatGPTList workspace posts filtered by status, assigned LinkedIn profile, or text search. ALWAYS filter deliberately instead of dumping everything: when the user asks what they have POSTED/published, use status 'published'; for upcoming content use 'scheduled' (returns only posts actually in the publish queue, each with scheduledTime); drafts are unpublished work-in-progress and must not be mixed into a 'what have I posted' answer. Each post includes its profile (id, name, headline, picture) — when the workspace has multiple profiles, group or label your summary by profile, or filter with integrationId if the user means one specific profile. Results carry a 300-char contentPreview only: before quoting, summarizing, or discussing a SPECIFIC post, call get_post for its full text.
list_scratchpad_items
ChatGPTList every live (non-expired) item in the org scratchpad - notes, links, and images teammates saved for later, each with its status (fresh, suggested, used) and who created it. Scraps auto-expire 30 days after creation. Use before promote_scratchpad_item to find an item's id.
list_team_briefs
ChatGPTList workspace-wide writing assignments with their deadline, instructions, creator, and per-member draft/scheduled/published progress. Defaults to active briefs. Use get_team_brief before drafting from one.
list_team_engagements
ChatGPTList per-post queued team likes, comments, reposts, and Slack shares, plus eligible acting profiles and Slack channels. Use a Postiv postId from list_posts or get_post. Delays start after actual publication through Postiv.
list_tracked_creators
ChatGPTList the creators the owner of a LinkedIn profile tracks in the Inspiration library (competitors and benchmark creators whose content they study; not the Engage lists of people to interact with). For each creator returns their normal engagement (median likes + comments + shares over 90 days) and their recent posts, each with vsNormal (engagement ÷ normal) and isOutlier. baseline.reliable=false means too few stored posts to judge outliers. Use outliers_only for 'what worked unusually well for my competitors lately'. Use search_inspiration with creator_ids or tracked_only for full post text.
list_visual_templates
ChatGPTList workspace and built-in carousel or infographic templates as data, without previews or a picker. Paginate using nextOffset. Use get_visual_template for exact field contracts; use show_visual_templates when the user should see or choose a design. Selection does not authorize creation or publishing.
prepare_media_upload
ChatGPTGet a signed upload URL and multipart form fields for a file whose bytes you can read. Background flow, like Slack file uploads: prepare -> POST the actual bytes -> complete_media_upload. Send all returned fields unchanged and append file last. Never pass local paths, URLs, or base64 as file bytes, never expose signed credentials to the user, and never finalize without transferring the bytes. If you cannot access the bytes, call show_media_upload instead. Also used by the inline widget. Images 10MB, PDFs 50MB, videos 200MB. Does not generate, attach, schedule, or publish media.
promote_scratchpad_item
ChatGPTPromote a scratchpad scrap into a permanent knowledge base asset, shared with the whole org (same as add_knowledge), so it becomes retrievable context for future drafts via search_knowledge. On success the scrap is deleted; on failure it is left untouched. Not every scrap can be promoted yet (e.g. an empty note, or a file type without a promotion path) - a not_promotable error means the scrap is still there.
queue_team_engagement
ChatGPTQueue one explicitly requested team like, comment, reshare, or Slack share on a saved Postiv post. Likes, comments and Slack shares send after publication plus delayMinutes (0–1440). A repost creates a linked calendar post through the publishing approval workflow and requires scheduledTime as an ISO timestamp at least two minutes in the future. It publishes at that time only if the source has succeeded; otherwise it waits and becomes eligible after source publication. Call list_team_engagements first to select an allowed integrationId or channelId. For comments, supply the exact user-approved message. Repost thoughts are optional; use an empty message for a text-free reshare. When adding thoughts, use the exact user-approved text; never invent endorsements or treat a request to draft as permission to queue. Slack shares also require explicit permission to send. Reuse the same UUID idempotencyKey when retrying the same request. An uncertain delivery must be checked at the destination before queuing again. Reshares support your own source profile and require the acting profile’s normal publication approvals. The returned postId identifies the linked calendar post.
react_to_post
ChatGPTAdd/replace a LinkedIn reaction as integrationId, or remove with reactionType=null. Optional commentId targets a comment on this post instead of the post (team posts only; external posts support post reactions only). Requires user authorization. LinkedIn is authoritative for reaction state; no recurring automation is configured.
remove_engage_feed_profile
ChatGPTStop tracking a profile in this list. Preserves the shared creator and published LinkedIn comments.
render_carousel
ChatGPTPrepare current carousel slide PNGs and a publish-ready PDF, or the single PNG for an infographic. Saves exports through the shared app renderer and reuses current cached exports. Does not display UI. Use show_carousel separately when presenting the result. Edits invalidate exports; carousel scheduling requires a current PDF. Do not retry a pending render. Infographics have no PDF and are re-rendered when scheduling.
reply_to_comment
ChatGPTImmediately reply to a LinkedIn comment as integrationId. Postiv automatically prepends a real tag of that comment’s author using the refreshed author name and URN, like Reply in the app; pass the reply body without manually adding that tag or resolving their URL. An existing leading author tag is not duplicated. If the author identity/name is unavailable, the reply is sent without that prefix. The final 1250-character limit includes the automatic tag. The result message contains the actual published text and attributes. Team posts only: external (feed) posts have no readable comment thread. Refreshes and verifies the target comment first, then refreshes comments after publishing. For tags, resolve the person/company URL with resolve_linkedin_mention using this acting integrationId, then insert its mention token in text. Requires authorization for target, actor and text. A post-publish refresh/history failure is a success with warnings, never an instruction to repost.
request_approval_changes
ChatGPTReturn a pending scheduled post to the author with concrete revision feedback. This changes the queue to changes_requested and prevents publishing. Call only after the user explicitly asks for revisions to the exact copy returned by list_pending_approvals.
reschedule_post
ChatGPTMove an already-scheduled post to a new publish time without touching its content, media, or approval state. Only works on posts with status "scheduled"; the new time must be at least 2 minutes in the future.
resolve_linkedin_mention
ChatGPTStep 1 of tagging a person or company in a post, comment, or reply: resolve their LinkedIn vanity URL to a real URN and ready-to-paste mention token. Requires the posting integrationId from list_linkedin_profiles. Accepts /in/, /company/, /school/, and /showcase/ URLs, including numeric company URLs. Step 2: insert the returned mention unchanged into create_post/update_post content or comment_on_post/reply_to_comment text. Postiv translates the token into the destination format. Never guess a URN from a vanity slug or use @Name as a real tag. If only a name is known, ask for its URL. Lookup can fail when LinkedIn permissions or an administered company page are missing. This does not publish or notify anyone. For comments/replies, use the acting integrationId and count visible names toward the 1250-character limit.
schedule_post
ChatGPTSchedule a draft post to LinkedIn through Postiv's publish queue. This NEVER publishes immediately: scheduledTime must be 2+ minutes in the future, and if the target profile has human approvers the post waits for their approval (relay requiresApproval and the message field to the user). A post linked to a Bob content-plan item can be scheduled through another accessible LinkedIn profile; its original plan-item link is preserved. An image attached to the draft is included automatically when media inputs are omitted. For local files or inaccessible chat attachments, use prepare_media_upload / complete_media_upload if you can read the bytes; otherwise call show_media_upload and wait for the uploaded asset reference. For PDFs, videos, carousels, or infographics, pass mediaSource (from list_media or a public file URL); these are saved with the publish queue, as in the editor. Pass carouselId to publish a Postiv carousel or infographic — the post's text is the caption. A carousel publishes as a LinkedIn document post and must be rendered first (render_carousel); an infographic publishes as an image post of its canvas PNG, rendered automatically at scheduling time (expect an extra ~10 seconds). Supports a Comment Plug (automatic first comment after publishing — see the commentPlug param; the profile's configured plug applies by default). Text, image, PDF, video, carousel, and infographic posts.
search_inspiration
ChatGPTSearch Postiv's moderated LinkedIn inspiration library with an optional semantic query and exact filters for creator name/handle, lead magnets, recency, engagement ranges, content format/category, creator size, and ordering. Query is optional: use filter-only searches for requests such as 'lead-magnet posts from the last 7 days sorted by comments'. creator_name excludes unrelated creators. Returns approved content from public creators; pass integrationId to also include the creators that profile's owner tracks in the Inspiration library (including private ones), and tracked_only or creator_ids to narrow to them. Use this for 'what's working in my niche' research and write-more-like-this seeds; use search_knowledge for workspace facts. Returns data and stable hit IDs without UI; use show_inspiration with selected IDs to present cards.
search_knowledge
ChatGPTSemantically search the workspace knowledge base (company facts, positioning docs, meeting notes, product updates, past content added via add_knowledge or the app). Use this to ground a draft in the workspace's actual knowledge BEFORE writing — quote and reuse what it finds rather than inventing details. Each hit is a trimmed chunk from a source document; assetId identifies the source.
search_templates
ChatGPTSearch Postiv's proven LinkedIn post-writing templates, including global templates and this workspace's custom templates. Results include the reusable pattern, what it works best for, an example, and a template id. Use the structure without copying the example's facts; pass the chosen templateId to create_post so Postiv preserves attribution and usage analytics.
set_comment_plug_config
ChatGPTSet the profile-level default Comment Plug used by future scheduled posts that inherit profile settings. This is NOT a per-post override; for one scheduled post use schedule_post.commentPlug instead. Requires cmmConnected=true for enabled configs. To disable the default, set enabled=false (variants can be empty).
show_carousel
ChatGPTUse when presenting a carousel or infographic for visual review. Pass its saved id. Requires current exports from render_carousel; this tool only reads them and never renders, edits, or spends credits. Use get_carousel for background reads. The widget refreshes in place.
show_image
ChatGPTUse when presenting a saved image for visual review. Pass source=image with an imageId from generation/editing, or source=asset with an uploaded assetId, as id. Loads the current authorized image without generating, editing, attaching, or spending credits.
show_inspiration
ChatGPTUse when presenting selected inspiration posts as cards for comparison or selection. First search_inspiration, then pass its stable hit IDs in the desired order. Pass the same integrationId for private tracked creators. Does not repeat semantic search.
show_media_upload
ChatGPTShow an INLINE upload card in this conversation, with drag-and-drop and a file picker for up to 20 images, PDFs, or videos. Use when the user wants to upload media and you cannot read the file bytes, even if you know its filename/path. The widget uses this MCP connection, with no separate website or sign-in. It saves media and sends the exact asset references back to the conversation. Wait for completed upload results; merely displaying the card is not an upload. Images support attach_post_media; PDF/video files use schedule_post.mediaSource when scheduling is authorized. If you CAN read the bytes, use prepare_media_upload and complete_media_upload for a background upload instead. Postiv-generated/edited images are already stored and attached and never need this picker. Do not replace an available card with a browser link.
show_post
ChatGPTUse when presenting a saved post for review in an editable card. Pass an existing post id from create_post, get_post, or list_posts. Do not call after every intermediate edit. Opening the card does not change the post.
show_visual_templates
ChatGPTUse when the user should see or choose carousel/infographic designs. Pass format and optionally selected styleIds from list_visual_templates, or browse with offset/limit. For visual layout inspection pass one styleId in styleIds and slideIndices. Selection alone never creates or publishes content.
submit_feedback
ChatGPTSend the user's explicit feedback about Postiv or Bob to the Postiv product team. Preserve their wording and important specifics. Call only when the user clearly gives product feedback or asks you to pass something to the team. Never infer feedback from silence, ordinary editing requests, or general conversation, and never include a conversation transcript. If intent is ambiguous, ask first.
suggest_reply
ChatGPTDraft an AI reply suggestion for a comment on one of the workspace’s own posts, using the stored post text, the live comment and the selected profile voice. Does not publish. Review the suggestion, then use reply_to_comment if authorized.
unschedule_post
ChatGPTCancel a scheduled post before it publishes: removes its queued publish and puts the post back into draft (editable again). Only works on posts with status "scheduled" — published posts cannot be recalled.
update_bob_planning_settings
ChatGPTUpdate Bob's posting cadence for one LinkedIn profile. postingDays is the source of truth and automatically determines postsPerWeek. This does not activate, pause, or directly run Bob.
update_pillar
ChatGPTUpdate an active content pillar's name, summary, notebook content, or suggested day. Omitted fields stay unchanged. System-owned learnings/sources sections are preserved when content is replaced. Call get_pillar first before changing strategy.
update_post
ChatGPTUpdate a draft post: title, content (stored verbatim as a new version), or assigned LinkedIn profile. At least one field is required. A post linked to a Bob content-plan item can be reassigned to another accessible LinkedIn profile or left unassigned; its original plan-item link is preserved. Fails on published posts, and on scheduled posts — call unschedule_post first to put a scheduled post back into draft. Returns updated post data without opening a card. This is also the tool the inline widget card calls when the user manually edits the draft text there.
update_scratchpad_item
ChatGPTEdit a scratchpad item's content and/or lifecycle status (fresh, suggested, used). Omit a field to leave it unchanged. Use the id from list_scratchpad_items.
upload_media
ChatGPTDeprecated name. Returns a redirect instruction without opening UI. Use show_media_upload to open the file picker, or prepare_media_upload and complete_media_upload when file bytes are accessible.
Capabilities
WritesInteractive
Example Prompts
Click any prompt to copy it.






