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> |
--seo-description <text> |
--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  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.
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 update <id>
Updates a post's content and/or properties on the Notion page, then triggers a re-sync to WordPress. Only the provided fields are updated — omitted fields stay unchanged. This is the correct way to fix post content after creation, instead of deleting and recreating.
Flags
| Flag |
|---|
--title <title> |
--body <text> |
--category <name> |
--tags <a,b,c> |
--seo-keyword <keyword> |
--seo-description <text> |
--slug <slug> |
--publish |
--wait |
Fix post content and re-sync
Replace the Notion page body with corrected markdown, then wait for the sync to push the changes to WordPress.
notipo posts update clx7p2k3m0000abc1def2ghi3 --body "## Introduction
Corrected content without the duplicate H1.
## Main Section
More content." --wait{
"jobId": "ce372d00-7d67-4613-bd1d-adc711c35846",
"postId": "clx7p2k3m0000abc1def2ghi3",
"message": "Post updated. Sync job queued."
}Update metadata only
Change the SEO keyword and category without touching the body content.
notipo posts update clx7p2k3m0000abc1def2ghi3 --seo-keyword "new focus keyword" --category "Updated Category" --waitnotipo 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"
}