Save draft
save_draftSaves a post as a draft for LinkedIn, X, Facebook, Instagram, Threads and YouTube, or updates an existing unpublished post. Without id it creates a draft; without destinations or destination it goes to the personal LinkedIn profile. destinations sets every place it goes (ids from list_destinations, any mix, LinkedIn optional), and network_text gives a network its own version of the text, for example a shorter one for X. youtube sets a YouTube video’s title, privacy (public, unlisted or private), tags, category, made_for_kids, custom thumbnail and playlist, and youtube_format chooses a normal video or a Short; the YouTube text is the video description. With id it updates a draft or a scheduled post that has not been sent; the schedule time stays as it is and nothing is published. content is required to create; an update takes any of content, network_text, youtube, youtube_format, media, destinations, destination, mentions, first_comment, or auto_react. The result lists post.networks (each network with the text it publishes) and network_problems when a network cannot take the post yet (for example Instagram without an image); schedule_post and publish_now refuse the post until they are fixed. Network limits: LinkedIn 3,000 characters, up to 9 images, one video, or one PDF. X 280 characters, or 25,000 on an account with an X subscription (each destination’s max_chars says which; a link counts as 23, an emoji as 2), up to 4 images (a post with more sends X its first 4 and the rest to the other networks) or one video, and a GIF among X’s images must be alone. A longer X text goes out as a thread: up to 25 numbered posts ("1/3"), cut at paragraphs, sentences or words, each a reply to the one before, with the media on the first and the first comment under the last. Facebook (Pages only) 63,206 characters, up to 10 images or one video. Instagram needs an image or a video: up to 10 JPEG images or one video, 2,200 characters, at most 30 hashtags. Threads 500 characters with images or a video (up to 20 images or one video); a Threads post without media takes up to 10,000, and what does not fit in the first 500 goes out as a text attachment under the post, at most 5 links. YouTube takes exactly one video and nothing else: a title up to 100 characters (from the youtube settings, or the text’s first line), the text as its description up to 5,000 bytes, neither with < or >, and tags up to 500 characters. youtube_format chooses a normal video ("video", the default) or a Short ("short": vertical or square, up to 3 minutes; a landscape or longer clip is refused rather than posted as a normal video). Only LinkedIn takes PDFs. mentions and auto_react apply to LinkedIn only. Alt text goes with the images to every network (X, Facebook, Instagram and Threads take the first 1,000 characters). first_comment goes under the post on LinkedIn and X (a reply), and on Facebook, Instagram and Threads (a reply) once the account has been connected with permission to comment; not on YouTube. first_comment and auto_react are stored on the post and applied when it is published by schedule_post or publish_now. mentions tags LinkedIn company pages named in the text; people cannot be tagged. Tags from the user’s tag list (list_tags) are written @[Name] in content or network_text: each network then gets its own form (@handle on X, Instagram and Threads, the company tagged on LinkedIn, the plain name elsewhere), and a name not in the list comes back in unknown_tags and goes out as the plain name. The result includes preview_url, a link that opens the post in PostPen for the signed-in account owner; it is meant to be shown to the user whenever a draft is saved or a post is scheduled. destination selects the personal profile or a company page from list_destinations. media attaches images, a video, or a PDF. Each media item has exactly one source: { url } for a public HTTPS file, { upload_id } for a file sent through create_upload, or { data } for a small base64 file up to 4MB. PostPen checks each file and copies it into its own storage. An image item can carry alt_text, the image’s alternative text for screen readers on every network (up to 4,086 characters on LinkedIn and 1,000 elsewhere, about 120 recommended; images only). On an update, omitting media keeps existing attachments and their alt text, and media: [] removes them. media_alt_text changes the alt text of images already on the post, one entry per image in the order of media_urls; it cannot be sent together with media. schedule_post and publish_now use the stored alt text. media_urls and network tokens are not accepted.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "save_draft"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Draft or scheduled post id to update in place. Omit to create a new draft. | |
| media | No | Optional attachments, one source per item: { url }, { upload_id }, or { data, content_type }. Images: jpeg, png, webp, gif, max 5MB each, up to 20 per post; each network takes its own number (LinkedIn 9, X 4, Facebook and Instagram 10, Threads 20, as the save_draft description lists), and network_problems lists a network that has too many. Video: mp4, 75KB–200MB, one per post. Document: pdf, max 100MB, one per post, LinkedIn only (LinkedIn shows it as a swipeable carousel). Types cannot be mixed in one post. | |
| content | No | The post text, used on every network without its own version in network_text. On LinkedIn it can be up to 3,000 characters (longer text is refused); the other networks’ limits are checked when the post is scheduled or published. Required to create a draft; optional when id is set and only something else changes. | |
| youtube | No | Settings for the YouTube video, only when destinations include a YouTube channel: { title, privacy, tags, category, made_for_kids, thumbnail_url, playlist_id }. The YouTube text (network_text.youtube, or content) is the video description, up to 5,000 bytes, without < or >. A field left out keeps what is saved. | |
| mentions | No | Optional LinkedIn company pages to tag, each as a page link such as https://www.linkedin.com/company/acme. The company’s name must appear in content exactly as LinkedIn spells it; that text becomes the clickable tag when the post is published, and if it is missing the error gives the exact spelling. [] removes the tags; leaving it out keeps what is saved. Only company pages can be tagged, not people, and tags are not applied to PDF posts. | |
| auto_react | No | Optional. true makes PostPen like the post from the same account right after it is published; false turns that off. | |
| destination | No | Where the post goes on LinkedIn: a LinkedIn id from list_destinations. "personal" (the default on a new draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and "personal" switches to the profile. To post to X, Facebook, Instagram, Threads or YouTube, use destinations on save_draft. | |
| destinations | No | Every place the post goes: ids from list_destinations, any mix of networks, for example ["personal", "x:<id>", "instagram:<id>"]. At most one LinkedIn id (the profile or one company page); leave LinkedIn out to post only to the other networks. Replaces what is saved; leaving it out keeps the saved destinations. Cannot be sent together with destination. | |
| network_text | No | Optional version of the text for one network, used there instead of content, for example { "x": "A version under 280 characters" }. null or "" goes back to content. Only for networks in the post’s destinations; leaving it out keeps the saved versions. | |
| first_comment | No | Optional comment PostPen adds to the post right after it is published on each network, for example a link (a reply on X and Threads). Up to 1,250 characters, and within each network’s own limit (X 280 unless the account has an X subscription, Threads 500). null or "" removes a saved one; leaving it out keeps what is saved. | |
| media_alt_text | No | Optional alt text for the images already on the post, one entry per image in the order of media_urls from list_posts. A string (up to 4,086 characters; about 120 recommended) sets that image’s alt text, null or "" removes it, and images past the end of a shorter array keep theirs. Refused when the post has no images or the array is longer than its images. | |
| youtube_format | No | Optional, for a post that goes to a YouTube channel: "video" (the default) posts a normal video; "short" posts a YouTube Short, which has to be vertical or square (9:16 looks best) and up to 3 minutes. For a Short PostPen adds #Shorts to the title (or the description when the title has no room) and links to youtube.com/shorts/. A clip that is landscape or longer than 3 minutes is refused when it is published, with an error saying so, instead of going out as a normal video. Leaving it out keeps what is saved; posts saved before this option are videos. |