Creating & Publishing Posts

The posts commands let you list, create, and delete posts from the command line without touching the Notion UI.

notipo posts

Lists all posts in your Notipo account with their current status, WordPress post ID, live URL (once published), Notion page ID, and last updated timestamp.

notipo posts
[
  {
    "id": "clx7p2k3m0000abc1def2ghi3",
    "title": "Why Every Developer Should Have a Blog",
    "status": "PUBLISHED",
    "wpPostId": 1003934,
    "wpUrl": "https://yourblog.com/why-every-developer-should-have-a-blog/",
    "notionPageId": "321842af-972f-813a-85a3-e6ad450b4869",
    "updatedAt": "2025-06-12T10:41:22.000Z"
  }
]

notipo posts create

Creates a Notion page and immediately triggers the full Notipo sync/publish pipeline — without opening the Notion UI. Notipo fetches the page, converts it to Gutenberg blocks, uploads images, generates a featured image, sets SEO metadata, and creates a WordPress draft (or publishes live if --publish is set).

This is the primary command for AI agents and automated publishing pipelines — the entire Notion-to-WordPress pipeline runs in a single CLI invocation.

Flags

Flag
--title <title>
--body <text>
--category <name>
--tags <a,b,c>
--seo-keyword <keyword>
--image-title <title>
--slug <slug>
--publish
--wait

Minimal example — create a draft

The only required flag is --title. Notipo creates a Notion page, syncs it, and returns a job ID to track progress.

notipo posts create --title "Why Every Developer Should Have a Blog"
{
  "jobId": "ce372d00-7d67-4613-bd1d-adc711c35846",
  "notionPageId": "321842af-972f-813a-85a3-e6ad450b4869",
  "message": "Post created. Run `notipo jobs` to monitor progress."
}

Full example — all flags

Pass --body with Markdown content. Use #, ##, ### for headings and ![alt](url) for images — Notipo converts them to Gutenberg blocks.

notipo posts create
  --title "Why Every Developer Should Have a Blog"
  --body "## Introduction

Writing forces clarity.

## Benefits

You learn more by writing than by reading."
  --category "Developer Tips"
  --tags "writing,productivity,career"
  --seo-keyword "developer blog"
  --image-title "Developer writing at a desk with code on screen"
  --slug "developer-blog-guide"

Publish immediately and wait for the live URL

Add --publish to go live instead of creating a draft. Add --wait to block until the full pipeline completes — the response includes the live wpUrl. The most useful combination for AI agents that need to return a published URL.

notipo posts create
  --title "Why Every Developer Should Have a Blog"
  --category "Developer Tips"
  --seo-keyword "developer blog"
  --publish --wait
{
  "status": "COMPLETED",
  "type": "PUBLISH_POST",
  "result": {
    "wpPostId": 1003934,
    "wpUrl": "https://yourblog.com/developer-blog-guide/",
    "steps": ["Fetching from Notion…", "Converting to Gutenberg…", "Uploading images…", "Generating featured image…", "Setting SEO metadata…", "Publishing to WordPress…"]
  }
}

Two-Phase Job Flow

When --publish is used, Notipo runs two sequential background jobs. The --wait flag waits for both before returning.

1
SYNC_POSTFetches from Notion, converts to Gutenberg blocks, uploads images, generates featured image, sets SEO metadata, creates WordPress draft
2
PUBLISH_POSTPublishes the draft live, refreshes SEO meta with the WordPress-generated excerpt, updates Notion status to Published with the live URL

Without --publish, only SYNC_POST runs and the post stays as a WordPress draft. You can publish it later by changing the Notion status to Publish.

notipo posts delete <id>

Deletes a post by its Notipo ID. Cleans up the WordPress post and all associated media uploaded by Notipo, and resets the Notion page status so it can be re-synced if needed. The id is the Notipo post ID from notipo posts — not the WordPress post ID.

notipo posts delete clx7p2k3m0000abc1def2ghi3
{
  "ok": true,
  "deleted": "clx7p2k3m0000abc1def2ghi3"
}