PendiumDocs

Publish and schedule posts

Take a blog post live on the site and connected CMS, schedule it for later, unschedule it, move it back to draft, or delete it.

These tools control a blog post's publish lifecycle: publish it now, schedule it for a future time, cancel a schedule, un-publish it back to draft, or delete it permanently.

When to use

Use these once a post is drafted and reviewed and you're ready to control when and whether it goes live. Publishing goes to the brand's Pendium-hosted site first, then syncs to any connected CMS — no CMS connection is required. All of these tools are synchronous except publish_blog_post (async publish job) and are available on any plan. Find the postId with list_blog_posts.

Blog posts only (MEE-1995): every tool here operates on blog posts. A postId for any other kind of post is rejected.

Typical sequence

  1. list_blog_posts — find the postId.
  2. publish_blog_post to go live now, or schedule_blog_post to publish at a future time.
  3. unschedule_blog_post to cancel a schedule, or move_blog_post_to_draft to take a live post offline (e.g. before regenerating it).
  4. delete_blog_post to remove a post permanently.

Tools

publish_blog_post

Publish a post right now. It goes live on the brand's Pendium-hosted site first, then syncs to each connected CMS (WordPress, Webflow, or Ghost) whose auto-publish setting is on. No CMS connection is required; agent-site-only brands publish fine.

Deprecated alias: publish_post is still accepted but publish_blog_post is the canonical name.

Authentication: Required. Available on any plan.

Type: Write — non-destructive.

ParameterTypeRequiredDescription
syntheticIdnumberYesThe agent the post belongs to.
postIdstringYesThe post to publish. From list_blog_posts.

Returns immediately after marking the post for publishing and enqueueing the job; publishing is async. The post goes live on the site first, then syncs to the connected CMSes with auto-publish on, usually within a minute. A post already on a CMS is updated there, not duplicated. Poll list_blog_posts to confirm the post shows as published. A post that was moved to the brand's own blog (status moved) can't be published, scheduled or moved to draft until it is moved back to Pendium in the app.

A post whose quality check still has a claim it marked possibly false or invented that nobody fixed or kept, or whose text, title or meta description changed since the check ran, isn't published. Other flagged claims are notes and don't hold it. The response has success: false, error: "quality_check_open", a message saying why, and an editorUrl where the user can fix or keep each claim (also in _pendium.next_steps). Running the check again makes its flags count.

schedule_blog_post

Schedule a post to publish later. Sets the post to scheduled status with the publish time you provide.

Deprecated alias: schedule_post is still accepted but schedule_blog_post is the canonical name.

Authentication: Required. Available on any plan.

Type: Write — non-destructive.

ParameterTypeRequiredDescription
syntheticIdnumberYesThe agent the post belongs to.
postIdstringYesThe post to schedule. From list_blog_posts.
scheduledForstringYesWhen to publish, as an ISO 8601 timestamp (e.g. 2026-07-01T14:00:00Z). Must be in the future.

Synchronous — flips the post to scheduled with the given publish time and returns immediately. A scheduledFor in the past is rejected (use publish_blog_post to publish immediately). Use unschedule_blog_post to cancel and return it to draft. The same quality check rule as publish_blog_post applies: a held post isn't scheduled, and the response is the same quality_check_open refusal with the editorUrl.

unschedule_blog_post

Cancel a scheduled post. Clears the scheduled publish time and returns the post to draft.

Deprecated alias: unschedule_post is still accepted but unschedule_blog_post is the canonical name.

Authentication: Required. Available on any plan.

Type: Write — non-destructive.

ParameterTypeRequiredDescription
syntheticIdnumberYesThe agent the post belongs to.
postIdstringYesThe scheduled post to unschedule. From list_blog_posts.

Synchronous — clears the schedule and moves the post back to draft in one step. Only operates on a scheduled post. It rejects a published post (use move_blog_post_to_draft to take a live post offline — that path also refreshes the public caches) and a draft post (nothing to cancel). Use schedule_blog_post to schedule again, or publish_blog_post to publish now.

move_blog_post_to_draft

Move a post back to draft from any state — including published. Use this to un-publish a post so you can edit it and re-publish.

Deprecated alias: move_to_draft is still accepted but move_blog_post_to_draft is the canonical name.

Authentication: Required. Available on any plan.

Type: Write — non-destructive.

ParameterTypeRequiredDescription
syntheticIdnumberYesThe agent the post belongs to.
postIdstringYesThe post to move to draft. From list_blog_posts.

Synchronous — flips the post's status to draft and returns immediately. This only changes the post's status inside Pendium; it does not remove anything already live on a connected third-party CMS. Re-publish with publish_blog_post when you're ready.

delete_blog_post

Permanently delete a post. This cannot be undone. The post is removed from Pendium and unlinked from the run or worksheet row that wrote it.

Deprecated alias: delete_post is still accepted but delete_blog_post is the canonical name.

Authentication: Required. Available on any plan.

Type: Write — destructive (irreversible).

ParameterTypeRequiredDescription
syntheticIdnumberYesThe agent the post belongs to.
postIdstringYesThe post to delete permanently. From list_blog_posts.

Synchronous and permanent — there is no undo. The post row is deleted and any workflow_items that referenced it are unlinked, and every public address it had (its current slug, earlier slugs and its legacy address) stops serving it. For a post moved to the brand's own blog, that also ends the redirect from those addresses to the moved copy. Anything already live on a connected third-party CMS is not affected. Any team member with access to the agent can delete a post, including ones already published.

On this page