Blog
Publish and manage blog posts with categories, tags, multi-image support, and scheduled publishing.
Try it with your AI assistant
Once WebsitePublisher is connected to your AI assistant, paste one of these into the chat. Replace the parts in [brackets] with your own details.
@WebsitePublisher add a blog to my site with categories and an RSS feed@WebsitePublisher schedule my blog post [title] to go live on [date]@WebsitePublisher let [colleague's email] write and edit blog posts on my siteWith WebsitePublisher, add a blog to my site with categories and an RSS feedWith WebsitePublisher, schedule my blog post [title] to go live on [date]With WebsitePublisher, let [colleague's email] write and edit blog posts on my siteWith WebsitePublisher, add a blog to my site with categories and an RSS feedWith WebsitePublisher, schedule my blog post [title] to go live on [date]With WebsitePublisher, let [colleague's email] write and edit blog posts on my siteEndpoints (13)
Owner only. Read or set the editor emails that may manage the blog from a page next to the project owner. From a page (visitor sign-in) only the owner email and these emails can create, change or delete posts and categories or read drafts; tenant (member) sessions cannot. Call without fields to read the current list.
| Field | Type | Required | Description |
|---|---|---|---|
editor_emails |
array | No | Email addresses (max 20). Send an empty list to remove all editors. |
List published blog posts with optional filters. Default: only published posts, newest first.
| Field | Type | Required | Description |
|---|---|---|---|
category_slug |
string | No | Filter by category slug. |
tag |
string | No | Filter by tag (exact match in tags JSON array). |
status |
string | No | Filter by status: draft, published, scheduled, all. Default: published. Anonymous callers are restricted to published only. |
page |
integer | No | Page number for pagination. Default: 1. |
per_page |
integer | No | Items per page. Default: 10, max: 50. |
search |
string | No | Search in title and content. |
Get a single published blog post by slug, including category info and all images. Published posts only — drafts and not-yet-due scheduled posts are never returned.
| Field | Type | Required | Description |
|---|---|---|---|
slug |
string | ✓ Yes | Post slug. |
List all blog categories with post count (only published posts counted).
| Field | Type | Required | Description |
|---|---|---|---|
flat |
boolean | No | If true, return flat list. If false (default), return nested tree. |
Generate RSS 2.0 XML feed of latest published posts. Pass channel_title (site or brand name), channel_description and site_url so the feed carries your branding; the language defaults to the site_context locale.
| Field | Type | Required | Description |
|---|---|---|---|
channel_title |
string | No | Feed title, e.g. the site or brand name. Default: "Blog". |
channel_description |
string | No | Feed description. Default: "Latest posts". |
language |
string | No | Feed language, e.g. en, en-us, nl. Default: the site_context locale, else en. |
site_url |
string | No | Public site URL for the feed links, e.g. https://www.example.com. Default: the project subdomain. |
limit |
integer | No | Number of posts in feed. Default: 20, max: 50. |
Create a new blog post. Status defaults to "draft". From a page only the project owner or an editor (blog configure) may call this.
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | ✓ Yes | Post title. |
slug |
string | No | URL slug. Auto-generated from title if omitted. |
content |
string | No | HTML content of the post. |
excerpt |
string | No | Short summary for listings and RSS. |
featured_image |
string | No | Main image URL (PAPI asset CDN URL). |
images |
array | No | Additional image URLs (PAPI asset CDN URLs). |
author_name |
string | No | Author display name. |
author_email |
string | No | Author email. |
category_id |
integer | No | Category ID. |
tags |
array | No | Array of tag strings, e.g. ["tech", "ai"]. |
status |
string | No | Post status: draft (default), published, scheduled. |
published_at |
string | No | Publish datetime (ISO 8601). Required when status=scheduled. Auto-set to now when status=published and omitted. |
meta_title |
string | No | SEO title override. |
meta_description |
string | No | SEO meta description. |
Update an existing blog post. Only provided fields are updated (partial update).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | ✓ Yes | Post ID to update. |
title |
string | No | Post title. |
slug |
string | No | URL slug. |
content |
string | No | HTML content. |
excerpt |
string | No | Short summary. |
featured_image |
string | No | Main image URL. |
images |
array | No | Additional image URLs. |
author_name |
string | No | Author display name. |
category_id |
integer | No | Category ID. |
tags |
array | No | Tags array. |
status |
string | No | Status: draft, published, scheduled. |
published_at |
string | No | Publish datetime. |
meta_title |
string | No | SEO title. |
meta_description |
string | No | SEO meta description. |
Delete a blog post permanently.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | ✓ Yes | Post ID to delete. |
Get a single blog post by numeric ID, including full content and all images. Owner-only (returns any status): from a page only the project owner or an editor (blog configure). Used by offline_sync pull.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | ✓ Yes | Post ID. |
Create a blog category. Supports nesting via parent_id.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes | Category name. |
slug |
string | No | URL slug. Auto-generated from name if omitted. |
description |
string | No | Category description. |
parent_id |
integer | No | Parent category ID for nesting. |
sort_order |
integer | No | Sort order. Default: 0. |
Update a blog category.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | ✓ Yes | Category ID. |
name |
string | No | Category name. |
slug |
string | No | URL slug. |
description |
string | No | Category description. |
parent_id |
integer | No | Parent category ID. |
sort_order |
integer | No | Sort order. |
Delete a blog category. Posts in this category get category_id set to NULL.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | ✓ Yes | Category ID to delete. |
Auto-publish posts where status=scheduled and published_at <= now. Designed for AAPI scheduled task (every 15 min).
No input parameters required.
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| configure | blog_configure |
| list-posts | blog_list_posts |
| get-post | blog_get_post |
| list-categories | blog_list_categories |
| generate-rss | blog_generate_rss |
| create-post | blog_create_post |
| update-post | blog_update_post |
| delete-post | blog_delete_post |
| get-post-by-id | blog_get_post_by_id |
| create-category | blog_create_category |
| update-category | blog_update_category |
| delete-category | blog_delete_category |
| publish-scheduled | blog_publish_scheduled |
Website