Major refactoring cleanup: - Add new controller architecture (class-controller-*.php) - Add new settings-v2 UI (views/settings-v2/) - Add new CSS architecture (agentic-sidebar.css, tokens) - Add esbuild build pipeline (scripts/build.js, package.json) - Add composer dependencies (vendor/) - Add frontend src directory (assets/js/src/index.jsx) - Add documentation files - Remove old/obsolete files (class-settings.php, old CSS) This commits all pending changes from previous refactoring efforts.
13 KiB
REST API Endpoints
Complete reference for WP Agentic Writer REST API endpoints.
Base URL: /wp-json/wp-agentic-writer/v1
Authentication: All endpoints require WordPress authentication via cookie or application password. Permission checks vary by endpoint (see below).
Rate Limiting: Most endpoints are rate-limited. See Rate Limits below.
Rate Limits
| Endpoint | Limit | Window | Notes |
|---|---|---|---|
POST /chat |
30/min | 60s | |
POST /chat_stream |
30/min | 60s | Streaming variant |
POST /search |
20/min | 60s | Brave Search |
POST /fetch-content |
10/min | 60s | Web content fetch |
| All others | — | — | No rate limiting |
Models
GET /models
List available AI models from OpenRouter.
Handler: Controller_Models::handle_get_models()
Permission: check_permissions (authenticated user)
Response: Array of model objects from OpenRouter cache.
POST /models/refresh
Force-refresh the model cache.
Handler: Controller_Models::handle_refresh_models()
Permission: check_permissions
Response:
{
"models": [...],
"message": "Models refreshed successfully."
}
Chat
POST /chat
Send a chat message (non-streaming).
Handler: Controller_Chat::handle_chat_request()
Permission: check_permissions + post edit (if postId provided)
Rate Limit: 30 requests/minute
Request Body:
{
"messages": [...],
"postId": 123,
"sessionId": "uuid",
"type": "planning|writing|revising",
"stream": false
}
Response: Full JSON response with assistant message.
POST /chat (streaming variant)
Same endpoint with "stream": true in request body. Uses Server-Sent Events.
Rate Limit: 30 requests/minute (same as non-streaming)
Response: text/event-stream with chunks.
POST /clear-context
Clear the chat context for a post.
Handler: Controller_Chat::handle_clear_context()
Permission: check_permissions + post edit
Request Body:
{
"postId": 123,
"sessionId": "uuid"
}
GET /chat-history/(?P<post_id>\d+)
Get legacy chat history from post meta. Deprecated — use /conversations instead.
Handler: Gutenberg_Sidebar::handle_get_chat_history()
Permission: check_permissions + post edit
Conversations
GET /conversation/(?P<post_id>\d+)
Get canonical conversation for chat hydration.
Handler: Gutenberg_Sidebar::handle_get_conversation()
Permission: check_permissions + post edit
GET /conversations
List all conversations for the current user.
Handler: Gutenberg_Sidebar::handle_get_conversations()
Permission: check_permissions
GET /conversations/post/(?P<post_id>\d+)
List conversations linked to a specific post.
Handler: Gutenberg_Sidebar::handle_get_conversations()
Permission: check_permissions
POST /conversations
Create a new conversation.
Handler: Gutenberg_Sidebar::handle_create_conversation()
Permission: check_permissions
GET /conversations/(?P<session_id>[a-zA-Z0-9]+)
Get a specific conversation.
Handler: Gutenberg_Sidebar::handle_get_conversation()
Permission: check_permissions
PUT /conversations/(?P<session_id>[a-zA-Z0-9]+)
Update conversation metadata.
Handler: Gutenberg_Sidebar::handle_update_conversation()
Permission: check_permissions
DELETE /conversations/(?P<session_id>[a-zA-Z0-9]+)
Delete a conversation.
Handler: Gutenberg_Sidebar::handle_delete_conversation()
Permission: check_permissions
POST|PUT /conversations/(?P<session_id>[a-zA-Z0-9]+)/messages
Add or update messages in a conversation.
Handler: Gutenberg_Sidebar::handle_update_conversation_messages()
Permission: check_permissions
POST /conversations/(?P<session_id>[a-zA-Z0-9]+)/link-post
Link a conversation to a post.
Handler: Gutenberg_Sidebar::handle_link_conversation_to_post()
Permission: check_permissions
POST /conversations/(?P<session_id>[a-zA-Z0-9]+)/lock
Acquire or refresh session lock (heartbeat).
Handler: Controller_Session::handle_session_lock()
Permission: check_permissions + conversation access
Request Body:
{
"tab_id": "uuid",
"force": false
}
Response:
{
"acquired": true,
"expires_at": 1234567890,
"tab_id": "uuid"
}
DELETE /conversations/(?P<session_id>[a-zA-Z0-9]+)/lock
Release session lock.
Handler: Controller_Session::handle_session_unlock()
Permission: check_permissions + conversation access
Planning & Writing
GET|POST /post-config/(?P<post_id>\d+)
Get or save post configuration (focus keyword, language, article type).
Handler: Gutenberg_Sidebar::handle_get_post_config() / handle_save_post_config()
Permission: check_permissions + post edit
POST /generate-plan
Generate article outline/plan.
Handler: Gutenberg_Sidebar::handle_generate_plan()
Permission: check_permissions + post edit
POST /revise-plan
Revise an existing plan.
Handler: Gutenberg_Sidebar::handle_revise_plan()
Permission: check_permissions + post edit
POST /execute-article
Execute article generation from plan.
Handler: Gutenberg_Sidebar::handle_execute_article()
Permission: check_permissions + post edit
POST /reformat-blocks
Reformat blocks (e.g., convert to different structure).
Handler: Gutenberg_Sidebar::handle_reformat_blocks()
Permission: check_permissions + post edit
POST /regenerate-block
Regenerate a single block.
Handler: Gutenberg_Sidebar::handle_regenerate_block()
Permission: check_permissions + post edit
POST /refine-block
Refine a block with instructions.
Handler: Gutenberg_Sidebar::handle_block_refine()
Permission: check_permissions + post edit
POST /refine-from-chat
Refine blocks based on chat conversation.
Handler: Gutenberg_Sidebar::handle_refine_from_chat()
Permission: check_permissions + post edit
POST /refine-multi-pass
Multi-pass block refinement.
Handler: Gutenberg_Sidebar::handle_refine_multi_pass()
Permission: check_permissions + post edit
POST /refine-article
Article-wide refinement.
Handler: Gutenberg_Sidebar::handle_refine_article()
Permission: check_permissions + post edit
POST /summarize-context
Summarize context to stay within token limits.
Handler: Gutenberg_Sidebar::handle_summarize_context()
Permission: check_permissions + post edit
Content Quality
POST /check-clarity
Check content clarity.
Handler: Gutenberg_Sidebar::handle_check_clarity()
Permission: check_permissions + post edit
POST /detect-intent
Detect user intent from message.
Handler: Gutenberg_Sidebar::handle_detect_intent()
Permission: check_permissions
POST /suggest-improvements
Proactive improvement suggestions (idle analysis).
Handler: Gutenberg_Sidebar::handle_suggest_improvements()
Permission: check_permissions + post edit
SEO
GET /seo-audit/(?P<post_id>\d+)
Run SEO audit for a post.
Handler: Gutenberg_Sidebar::handle_seo_audit()
Permission: check_permissions + post edit
POST /generate-meta
Generate meta description.
Handler: Gutenberg_Sidebar::handle_generate_meta()
Permission: check_permissions + post edit
POST /suggest-keywords
Suggest keywords for a post.
Handler: Gutenberg_Sidebar::handle_suggest_keywords()
Permission: check_permissions + post edit
GET /geo-score/(?P<post_id>\d+)
Get GEO scoring for a post.
Handler: Gutenberg_Sidebar::handle_geo_score()
Permission: check_permissions + post edit
Title & Excerpt
POST /generate-title
Generate post title (uses WP 7.0 AI Client when available).
Handler: Gutenberg_Sidebar::handle_generate_title()
Permission: check_permissions + post edit
POST /refine-title
Refine title with instructions.
Handler: Gutenberg_Sidebar::handle_refine_title()
Permission: check_permissions + post edit
POST /generate-excerpt
Generate post excerpt (uses WP 7.0 AI Client when available).
Handler: Gutenberg_Sidebar::handle_generate_excerpt()
Permission: check_permissions + post edit
Images
GET /image-recommendations/(?P<post_id>\d+)
Get image recommendations for a post.
Handler: Gutenberg_Sidebar::handle_get_image_recommendations()
Permission: check_permissions + post edit
POST /generate-image
Generate an image.
Handler: Gutenberg_Sidebar::handle_generate_image()
Permission: check_permissions + post edit
POST /commit-image
Commit/save generated image.
Handler: Gutenberg_Sidebar::handle_commit_image()
Permission: check_permissions + post edit
Writing State
GET /writing-state/(?P<post_id>\d+)
Get writing state for a post.
Handler: Gutenberg_Sidebar::handle_get_writing_state()
Permission: check_permissions + post edit
POST /writing-state/(?P<post_id>\d+)
Save writing state.
Handler: Gutenberg_Sidebar::handle_save_writing_state()
Permission: check_permissions + post edit
Section Blocks
POST /section-blocks
Save section block mapping.
Handler: Gutenberg_Sidebar::handle_save_section_blocks()
Permission: check_permissions
GET /section-blocks/(?P<post_id>\d+)
Get section blocks for a post.
Handler: Gutenberg_Sidebar::handle_get_section_blocks()
Permission: check_permissions + post edit
Cost Tracking
GET /cost-tracking/(?P<post_id>\d+)
Get cost tracking data.
Handler: Controller_Cost::handle_get_cost_tracking()
Permission: check_permissions + post edit (if post_id > 0)
AI Capabilities
GET /ai-capabilities
Get AI capabilities status.
Handler: Gutenberg_Sidebar::handle_get_ai_capabilities()
Permission: check_permissions
Research
POST /search
Search the web (Brave Search).
Handler: Controller_Chat::handle_search()
Permission: check_permissions
Rate Limit: 20 requests/minute
POST /fetch-content
Fetch web page content.
Handler: Controller_Chat::handle_fetch_content()
Permission: check_permissions
Rate Limit: 10 requests/minute
POST /research-summary
Generate research summary.
Handler: Controller_Chat::handle_research_summary()
Permission: check_permissions
MEMANTO (Memory)
GET /memanto/status
Get MEMANTO service status.
Handler: Gutenberg_Sidebar::handle_memanto_status()
Permission: check_permissions
GET /memanto/recall
Recall recent memories for a post.
Handler: Gutenberg_Sidebar::handle_memanto_recall()
Permission: check_permissions
GET /memanto/restore
Restore session for cross-session continuity.
Handler: Gutenberg_Sidebar::handle_memanto_restore()
Permission: check_permissions
GET /memanto/preferences
Get user preferences for new post carry-over.
Handler: Gutenberg_Sidebar::handle_memanto_preferences()
Permission: check_permissions
User Preferences
GET /user-preferences
Get user preferences (public — no auth required).
Handler: Gutenberg_Sidebar::handle_get_user_preferences()
Permission: __return_true (public)
POST /user-preferences
Save user preferences.
Handler: Gutenberg_Sidebar::handle_save_user_preferences()
Permission: check_permissions
Migration
POST /migrate-chat-history/(?P<post_id>\d+)
Migrate legacy post meta chat history to conversations table.
Handler: Gutenberg_Sidebar::handle_migrate_chat_history()
Permission: check_permissions + post edit
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
forbidden |
403 | User lacks permission for this action |
invalid_post |
400 | Invalid or missing post ID |
rate_limit_exceeded |
429 | Too many requests |
missing_tab_id |
400 | Session lock requires tab_id |
| Various WP_Error codes | varies | Provider-specific errors |
Response Format
All responses are JSON. Successful responses:
{
"status": "success",
"data": { ... }
}
Or directly the resource data:
{
"key": "value"
}
Error responses:
{
"code": "error_code",
"message": "Human-readable message",
"data": { "status": 400 }
}