/install notipo
Install Notipo CLI if it doesn't exist
npm install -g notipo
- npm release: https://www.npmjs.com/package/notipo
- notipo docs: https://notipo.com/docs/api/introduction
- notipo cli docs: https://notipo.com/docs/api/cli
Setup
Sign up at notipo.com, connect your Notion database and WordPress site through the dashboard, then grab your API key from Settings → Account.
Set the environment variables:
export NOTIPO_URL="https://notipo.com"
export NOTIPO_API_KEY="ntp_your-api-key"
Core Workflow
- Generate — AI agent creates title, body (markdown), category, tags, SEO keyword
- Fetch context — get categories and tags from Notipo to pick valid values
- Publish —
notipo posts createwith all fields - Monitor —
notipo jobsto check completion status
Essential Commands
Check connection status
notipo status
Fetch categories and tags
# Get available categories (for picking a valid category)
curl -s $NOTIPO_URL/api/categories \
-H "X-API-Key: $NOTIPO_API_KEY" | jq '.data[].name'
# Get available tags
curl -s $NOTIPO_URL/api/tags \
-H "X-API-Key: $NOTIPO_API_KEY" | jq '.data[].name'
Create a post (draft)
notipo posts create \
--title "Your Post Title" \
--body "## Introduction\
\
Your markdown content here.\
\
## Main Section\
\
More content." \
--category "Tutorials" \
--tags "automation,ai" \
--seo-keyword "your focus keyword" \
--image-title "Featured Image Title" \
--slug "custom-url-slug"
Create and publish immediately
notipo posts create \
--title "Your Post Title" \
--body "Markdown content here." \
--category "Guides" \
--seo-keyword "focus keyword" \
--publish
Create, publish, and wait for completion
notipo posts create \
--title "Your Post Title" \
--body "Markdown content here." \
--category "Guides" \
--publish --wait
The --wait flag polls until the job completes and returns the result with the WordPress URL.
Create with inline Unsplash images (Pro plan, curl only)
curl -X POST $NOTIPO_URL/api/posts/create \
-H "X-API-Key: $NOTIPO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Your Post Title",
"body": "## Introduction\
\
Content here.\
\
## Getting Started\
\
More content.",
"category": "Tutorials",
"seoKeyword": "focus keyword",
"images": [
{ "query": "developer workspace laptop", "afterHeading": "## Introduction" },
{ "query": "getting started tutorial", "afterHeading": "## Getting Started" }
],
"publish": true
}'
Update a post (fix content, change metadata, re-sync to WordPress)
notipo posts update POST_ID \
--body "## Introduction\
\
Updated content without the H1." \
--seo-keyword "updated focus keyword" \
--wait
Updates the Notion page content and/or properties, 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.
Check job status
notipo jobs
List posts
notipo posts
Trigger a sync (pick up Notion changes)
notipo sync
Delete a post
notipo posts delete POST_ID
Common Patterns
AI-generated blog post with full metadata
# 1. Fetch categories to pick a valid one
curl -s $NOTIPO_URL/api/categories -H "X-API-Key: $NOTIPO_API_KEY" | jq '.data[].name'
# 2. Create the post with all fields and wait for completion
notipo posts create \
--title "10 Docker Best Practices for Production" \
--body "## Introduction\
\
Docker containers are the standard...\
\
## Use Multi-Stage Builds\
\
Reduce image size by separating build and runtime...\
\
## Pin Base Image Versions\
\
Avoid surprises by pinning specific tags..." \
--category "DevOps" \
--tags "docker,containers,production" \
--seo-keyword "docker best practices production" \
--image-title "Docker Best Practices" \
--slug "docker-best-practices-production" \
--publish --wait
Batch content pipeline
# Generate and publish multiple posts in sequence
for topic in "React hooks" "TypeScript generics" "Node.js streams"; do
notipo posts create \
--title "A Guide to $topic" \
--body "## Overview\
\
Generated content about $topic." \
--category "Tutorials" \
--seo-keyword "$(echo $topic | tr '[:upper:]' '[:lower:]')" \
--wait
done
Full pipeline with inline images (curl)
curl -X POST $NOTIPO_URL/api/posts/create \
-H "X-API-Key: $NOTIPO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "10 Docker Best Practices for Production",
"body": "## Introduction\
\
Docker containers are the standard...\
\
## Use Multi-Stage Builds\
\
Reduce image size...",
"category": "DevOps",
"tags": ["docker", "containers", "production"],
"seoKeyword": "docker best practices production",
"imageTitle": "Docker Best Practices",
"slug": "docker-best-practices-production",
"images": [
{ "query": "docker containers server", "afterHeading": "## Introduction" }
],
"publish": true
}'
CLI Reference
| Command | Description |
|---|---|
notipo status |
Show Notion and WordPress connection status |
notipo sync |
Trigger an immediate Notion poll |
notipo posts |
List all posts |
notipo posts create |
Create a post in Notion and sync to WordPress |
notipo posts update \x3Cid> |
Update post content/properties and re-sync to WordPress |
notipo posts delete \x3Cid> |
Delete a post (cleans up WordPress + Notion) |
notipo jobs |
List recent sync and publish jobs |
notipo help |
Show usage and examples |
posts create flags
| Flag | Description |
|---|---|
--title \x3Ctitle> |
Post title (required) |
--body \x3Cmarkdown> |
Markdown content |
--category \x3Cname> |
Category name (must exist in WordPress) |
--tags \x3Ca,b,c> |
Comma-separated tag names |
--seo-keyword \x3Ckw> |
Focus keyword for Rank Math / SEOPress |
--image-title \x3Ctext> |
Text overlay on featured image (Pro) |
--slug \x3Cslug> |
Custom URL slug |
--publish |
Publish immediately (default: draft) |
--wait |
Wait for job completion and return result |
posts update flags
| Flag | Description |
|---|---|
--title \x3Ctitle> |
New post title |
--body \x3Cmarkdown> |
New markdown content (replaces all existing content) |
--category \x3Cname> |
New category name |
--tags \x3Ca,b,c> |
New comma-separated tag names |
--seo-keyword \x3Ckw> |
New focus keyword for Rank Math / SEOPress |
--slug \x3Cslug> |
New URL slug |
--publish |
Publish after syncing (default: keep current status) |
--wait |
Wait for job completion and return result |
API Request Body Reference
PATCH /api/posts/:id (update)
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | No | New post title |
| body | string | No | New markdown content (replaces all existing content on the Notion page) |
| category | string | No | New category name |
| tags | string[] | No | New tag names |
| seoKeyword | string | No | New focus keyword |
| slug | string | No | New URL slug |
| publish | boolean | No | Publish after syncing |
Returns { jobId, postId, message }. The update writes to Notion first, then triggers a sync job to push changes to WordPress.
POST /api/posts/create
For curl/HTTP usage, POST /api/posts/create accepts:
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Post title |
| body | string | No | Markdown content with headings and paragraphs |
| category | string | No | Category name (must exist in WordPress) |
| tags | string[] | No | Array of tag names |
| seoKeyword | string | No | Focus keyword for Rank Math / SEOPress |
| imageTitle | string | No | Text overlay on featured image (Pro) |
| slug | string | No | Custom URL slug |
| publish | boolean | No | Publish immediately (default: false) |
| images | object[] | No | Inline Unsplash images (Pro). Each: {query, afterHeading} |
What Notipo Handles
- Notion page creation from markdown (no Notion credentials needed)
- Markdown → Notion blocks → WordPress Gutenberg block conversion
- Image download from Notion and upload to WordPress media library
- Featured image generation (1200×628 with category background + title overlay)
- Inline Unsplash image insertion by search query (Pro plan)
- SEO metadata — Rank Math, Yoast, SEOPress, AIOSEO
- Post status management in Notion
- Failure notifications via Slack/Discord webhook
Common Gotchas
- Use
posts updateto fix content — don't delete and recreate.notipo posts update \x3Cid> --body "..."updates the Notion page and re-syncs to WordPress in one call. - Include all fields for best results — only
titleis technically required, but AI agents should always generate body, category, tags, seoKeyword, imageTitle, and slug for a complete post. - Category must exist — the category name must match an existing WordPress category. Fetch valid options first.
--publishruns two jobs — first SYNC_POST (creates draft), then PUBLISH_POST (makes it live). Use--waitto block until both complete.- Images require Pro plan — the
imagesarray and featured image generation are Pro features. On Free plan, these fields are silently ignored. - Fire and forget — the API returns a
jobIdimmediately. Processing happens in the background. Usenotipo jobsto check status. - Markdown body format — use
## Headingfor h2,### Headingfor h3. Paragraphs are separated by\ \. Images can be included as. - Rate limits —
notipo synchas a 15-second cooldown.notipo posts createhas no rate limit. - API key format — keys start with
ntp_. Get yours from Settings → Account in the dashboard. - Slug defaults — if not set, the slug is derived from the SEO keyword. If no SEO keyword, WordPress generates it from the title.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install notipo - 安装完成后,直接呼叫该 Skill 的名称或使用
/notipo触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
notipo 是什么?
Publish blog posts from AI agents to WordPress via Notion. One API call handles page creation, markdown conversion, image uploads, featured image generation,... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 242 次。
如何安装 notipo?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install notipo」即可一键安装,无需额外配置。
notipo 是免费的吗?
是的,notipo 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
notipo 支持哪些平台?
notipo 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 notipo?
由 kfuras(@kfuras)开发并维护,当前版本 v1.0.3。