Schedule article
schedule_articleSchedule an article to Substack, Medium, LinkedIn Articles, X, WordPress, or Ghost. WordPress and Ghost support publishMode draft, which saves a remote draft without publishing or emailing. Creates an article draft when draftId is absent. Supports cover and inline images, Substack-only inline video, and destination-specific SEO metadata. Substack supports native paywall and subscribe controls at explicit positions in contentHtml; ordinary links remain links. Audience and email delivery are controlled by the supplied fields. LinkedIn Articles requires a separate browser-session connection from regular posts; pending session sync saves new input as a draft without scheduling. Returns scheduling outcomes and advisories.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tag list for newly created drafts. Substack receives all supplied tags. Medium receives its supported first 5 topics and returns a warning when extras are omitted. The saved draft remains unchanged. | |
| media | No | Optional inline images or Substack article videos for a newly created draft. Replaces {{media:N}} placeholders in array order; leftovers are appended. kind defaults to image; video requires Substack as the sole platform. Supports public URLs, data URIs, and base64 bytes. In ChatGPT, for a file the user attached in the chat, first call upload_media with it in file, then pass the returned publicUrl here as url. | |
| title | No | Required when creating a new draft. | |
| draftId | No | Optional existing article draft id to schedule as-is. | |
| subtitle | No | Optional article subtitle for newly created drafts. Substack omits subtitles over 250 characters and returns a warning without changing the saved draft. | |
| timezone | No | IANA timezone the scheduledFor time(s) above are expressed in (e.g. "Europe/London"). Default UTC. | |
| platforms | Yes | ||
| coverImage | No | Optional cover image for a newly created draft, placed at the top of the published body. Supports public HTTPS URLs, data URIs, or base64 image bytes. URL ingestion depends on source-host access. In ChatGPT, for a file the user attached in the chat, first call upload_media with it in file, then pass the returned publicUrl here as url. | |
| contentHtml | No | Required when creating a new draft. Supports public <img> or <video> elements and {{media:N}} placeholders resolved from media entries. Video articles require Substack as the sole platform. Native Substack paywall markup is <hr data-type="paywall"> at the selected paragraph boundary, or a single {{NARRAREACH_PAYWALL}} token; paywallMarker supports custom tokens. Native subscribe block markup is <div data-type="button" data-kind="subscribeCaption" data-text="Subscribe" data-caption="Your caption"></div> with HTML-escaped attribute values. data-kind="subscribe" represents a button without caption. Ordinary links remain links. | |
| publication | No | Substack destination as a publication name, handle, or URL, for example "AI Newsroom", "@theainewsroom", or "https://theainewsroom.substack.com". Optional when exactly one active Substack publication is connected; Narrareach selects it automatically. Required when more than one active Substack publication is connected, except that when it is missing Narrareach uses the publication the writer scheduled or published to most recently and says so in substackPublicationSelection.message, with publicationChoices listing the others; tell the writer which one was used. If there is no previous choice, the value is ambiguous, or Narrareach cannot confirm the session publishes there, nothing is scheduled and the result has requiresPublicationChoice: true with publicationChoices (name, handle, url, substackConnectionId). Ask which one they want, then call again with publication set to the chosen handle (and draftId when a draft was already saved). | |
| publishMode | No | Only valid when all selected destinations are WordPress or Ghost. Defaults to publish; draft saves a remote draft at the scheduled time without publication. | |
| scheduledFor | No | Shared local wall-clock publishing date/time interpreted in timezone, including DST. A Z or explicit UTC offset represents an absolute instant. LinkedIn articles require at least 20 minutes of lead time. | |
| isPaidContent | No | Whether the Substack article is paid-only. Default false. | |
| paywallMarker | No | Optional custom marker in contentHtml where the selected free preview ends; must appear exactly once. The standard {{NARRAREACH_PAYWALL}} marker is recognized without this field. Creates a native paywall and enables paid access without changing sendToNewsletter. | |
| sendToNewsletter | No | Substack email delivery setting. Default true. | |
| addSearchMetadata | No | Generate SEO titles, descriptions, and a Substack slug for supported article destinations. SEO metadata is generated automatically on Revenue Writer, Full Agentic Mode, and Teams & Agencies, and for trials or other accounts with article SEO access. Set this option to false to turn it off. X does not support separate article SEO settings. | |
| linkedinAuthorUrn | No | LinkedIn personal profile or Company Page author URN belonging to the connected LinkedIn Articles account. | |
| platformSchedules | No | Optional per-platform overrides taking precedence over scheduledFor. Same wall-clock + timezone rule applies to each scheduledFor here; LinkedIn entries require at least 20 minutes of lead time. | |
| mediumPublicationId | No | Optional authorized Medium publication id when platforms includes MEDIUM. Absent means the personal profile. Writer-only access submits for editorial review and leaves the story unscheduled until acceptance. Explicit publication rejection allows personal-profile delivery with a warning; ambiguous submissions remain unpublished for review. Draft-only delivery does not submit to a publication. | |
| substackConnectionId | No | Exact Substack connection identifier, retained for backward compatibility, for example publicationChoices[].substackConnectionId from a requiresPublicationChoice result. publication is the preferred public destination selector; when both are given they must name the same publication. | |
| linkedinNewsletterUrn | No | LinkedIn newsletter URN belonging to the connected LinkedIn Articles account. Required when linkedinPublicationType is newsletter. | |
| mediumNotifyFollowers | No | Whether to email Medium subscribers about this story. Only valid when platforms includes MEDIUM. Defaults to false (no email). Best-effort: a failure to apply this setting never blocks the publish/schedule and is reported as a warning. | |
| linkedinPublicationType | No | LinkedIn destination type. Defaults to an individual article; newsletter represents a user-selected newsletter destination. | |
| linkedinShareCommentary | No | Optional LinkedIn share text used when publishing a LinkedIn article. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| count | Yes | ||
| posts | Yes | ||
| message | No | ||
| nextStep | No | ||
| warnings | Yes | ||
| advisories | No | ||
| choiceScope | No | ||
| aiVisibility | No | ||
| createdDraft | Yes | ||
| connectedAccount | No | ||
| publicationChoices | No | ||
| substackPublication | Yes | ||
| publicationChoiceReason | No | ||
| requiresPublicationChoice | No | ||
| substackPublicationSelection | No |