From citedy-seo-agent
From topic to published blog post in one conversation — generate SEO- and GEO-optimized articles with AI illustrations and voice-over in 55 languages, create social media adaptations for 9 platforms, set up automated content sessions, and manage product knowledge base. End-to-end blog autopilot. Powered by Citedy.
npx claudepluginhub citedy/claude-plugins --plugin citedy-seo-agentThis skill uses the workspace's default tool permissions.
**AI Content Writer** is an end-to-end blog autopilot powered by [Citedy](https://www.citedy.com/). It covers the entire content production pipeline in a single conversation:
Full-stack AI marketing toolkit — scout X/Twitter and Reddit for trending topics, discover and deep-analyze competitors, find content gaps, publish SEO- and GEO-optimized articles with AI illustrations and voice-over in 55 languages, create social media adaptations for X, LinkedIn, Facebook, Reddit, Threads, Instagram, Instagram Reels, YouTube Shorts, and Shopify, generate lead magnets (checklists, swipe files, frameworks), ingest any URL (YouTube videos, web articles, PDFs, audio files) into structured content, ultra-cheap turbo articles from 2 credits, generate short-form AI UGC viral videos with subtitles and direct publishing to Instagram Reels, YouTube Shorts, and TikTok, Google Search Console performance reports, and run fully automated content autopilot. Powered by Citedy.
Generates blog posts, landing pages, email sequences, social media content, and video scripts with quality audits, SEO optimization, and content calendars for business growth.
Manages full blog lifecycle: strategy, writing, rewriting, audits, outlines, schema, repurposing, images, topic clusters, multilingual publishing for SEO and AI citations across platforms like Next.js, WordPress.
Share bugs, ideas, or general feedback.
AI Content Writer is an end-to-end blog autopilot powered by Citedy. It covers the entire content production pipeline in a single conversation:
No competitor offers the full pipeline in one agent skill.
Use this skill when the user wants to:
Direct the user to: https://www.citedy.com/dashboard/settings → Team & API section.
API keys are prefixed citedy_agent_.
POST https://www.citedy.com/api/agent/register
Content-Type: application/json
{
"name": "My Content Agent",
"description": "Automated blog content writer"
}
Headers: Authorization: Bearer <CITEDY_API_KEY>
Response:
{
"agent_id": "ag_xxxx",
"status": "active",
"blog_handle": "my-blog"
}
Store agent_id — it is required for session and webhook operations.
GET https://www.citedy.com/api/agent/me
Authorization: Bearer <CITEDY_API_KEY>
Convert any web page, blog post, or competitor article into an original SEO-optimized article.
POST https://www.citedy.com/api/agent/autopilot
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"source_urls": ["https://example.com/some-article"],
"language": "en",
"size": "standard",
"illustrations": true,
"audio": false
}
After generation, adapt for social:
POST https://www.citedy.com/api/agent/adapt
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"article_id": "<returned_article_id>",
"platforms": ["linkedin", "x_article"],
"include_ref_link": true
}
Write an article from a plain-text topic or title.
POST https://www.citedy.com/api/agent/autopilot
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"topic": "How to reduce churn in B2B SaaS",
"language": "en",
"size": "full",
"persona": "saas-founder",
"enable_search": true
}
For quick content at low cost. Two sub-modes:
| Mode | Credits | Description |
|---|---|---|
turbo | 2 credits | Fast generation, no web search |
turbo+ | 4 credits | Fast generation + web intelligence |
POST https://www.citedy.com/api/agent/autopilot
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"topic": "5 productivity hacks for remote teams",
"mode": "turbo",
"language": "en"
}
For turbo+, add "enable_search": true.
Adapt an existing article to up to 3 platforms per request.
POST https://www.citedy.com/api/agent/adapt
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"article_id": "art_xxxx",
"platforms": ["x_thread", "linkedin", "reddit"],
"include_ref_link": true
}
Available platforms: x_article, x_thread, linkedin, facebook, reddit, threads, instagram, instagram_reels, youtube_shorts
Set up recurring content generation on a cron schedule.
POST https://www.citedy.com/api/agent/session
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"categories": ["SaaS", "productivity", "remote work"],
"problems": ["user churn", "onboarding friction", "team alignment"],
"languages": ["en"],
"interval_minutes": 720,
"article_size": "standard",
"disable_competition": false
}
interval_minutes: 720 = every 12 hours. Sessions run automatically and publish articles to the connected blog.
Publish short-form content across platforms without writing a full article first.
POST https://www.citedy.com/api/agent/post
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"topic": "Why async communication beats meetings",
"platforms": ["x_thread", "linkedin"],
"tone": "professional",
"contentType": "tip",
"scheduledAt": "2026-03-02T09:00:00Z"
}
Ground articles with real product data. The AI references this during generation.
Add a product:
POST https://www.citedy.com/api/agent/products
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"name": "Citedy Pro",
"description": "AI-powered blog automation platform",
"url": "https://www.citedy.com/pricing",
"features": ["autopilot", "SEO optimization", "55 languages"]
}
List products:
GET https://www.citedy.com/api/agent/products
Authorization: Bearer <CITEDY_API_KEY>
Search products:
POST https://www.citedy.com/api/agent/products/search
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"query": "pricing plans"
}
Delete a product:
DELETE https://www.citedy.com/api/agent/products/<product_id>
Authorization: Bearer <CITEDY_API_KEY>
Check what content is planned and find gaps.
GET https://www.citedy.com/api/agent/schedule
GET https://www.citedy.com/api/agent/schedule/gaps
GET https://www.citedy.com/api/agent/schedule/suggest
Note: schedule/suggest is a REST-only endpoint — not available as an MCP tool.
All require Authorization: Bearer <CITEDY_API_KEY>.
Publish or schedule a social adaptation.
POST https://www.citedy.com/api/agent/publish
Authorization: Bearer <CITEDY_API_KEY>
Content-Type: application/json
{
"adaptationId": "adp_xxxx",
"action": "schedule",
"platform": "linkedin",
"accountId": "acc_xxxx",
"scheduledAt": "2026-03-02T10:00:00Z"
}
action values: now, schedule, cancel
User: "Write an article based on this post: https://competitor.com/best-crm-tools"
Agent flow:
POST /api/agent/autopilot with source_urls: ["https://competitor.com/best-crm-tools"], size: "standard", language: "en" — typically returns the full article inline (terminal status: "generated" | "publishing" | "published"); if the response is queued (status: "processing"), poll GET /api/agent/articles/{id} or wait for one of the article.generated / article.published / article.failed webhooks. On article.failed (or terminal status: "failed"), surface the error and skip the social-adaptations stepUser: "Set up daily articles about fintech in English and Spanish"
Agent flow:
POST /api/agent/session with categories: ["fintech", "payments", "banking"], languages: ["en", "es"], interval_minutes: 720, article_size: "standard"User: "Quickly write 5 short articles about remote work tips"
Agent flow:
POST /api/agent/autopilot with mode: "turbo", size: "mini"User: "Take my latest article and make posts for LinkedIn, Reddit, and X"
Agent flow:
GET /api/agent/articles to find the latest article IDPOST /api/agent/adapt with platforms: ["linkedin", "reddit", "x_thread"], include_ref_link: trueGenerate a full blog article.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | one of topic/source_urls | Article topic or title |
source_urls | string[] | one of topic/source_urls | URLs to base the article on |
language | string | no | Language code, default en. 55 languages supported |
size | string | no | mini, standard, full, pillar. Default standard |
mode | string | no | standard, turbo. Default standard |
enable_search | boolean | no | Enable web intelligence. Default false |
persona | string | no | Writing persona slug (call GET /api/agent/personas, e.g. "musk", "hemingway", "jobs") |
auto_publish | boolean | no | Publish immediately after generation. Default uses tenant setting (if unset, true) |
illustrations | boolean | no | Generate AI illustrations. Default false |
audio | boolean | no | Generate voice-over audio. Default false |
disable_competition | boolean | no | Skip competitor analysis. Default false |
Response:
{
"article_id": "art_xxxx",
"status": "processing",
"estimated_seconds": 45,
"credits_reserved": 20
}
List generated articles.
| Parameter | Type | Description |
|---|---|---|
status | string | Filter: generated (draft), published, processing |
limit | integer | Max results, default 20 |
offset | integer | Pagination offset |
Publish a draft article (status: "generated" → "published").
{ article_id, status: "publishing", message }.status: "generated". Other statuses return 409 Conflict.article.published webhook event.Unpublish a published article (status: "published" → "generated").
{ "action": "unpublish" }
{ article_id, status: "generated", message }.status: "published". Other statuses return 409 Conflict.article.unpublished webhook event.Permanently delete an article and its associated storage files (images, audio).
{ article_id, message: "Article deleted" }.article.deleted webhook event.Create social media adaptations from an article.
| Parameter | Type | Required | Description |
|---|---|---|---|
article_id | string | yes | Source article ID |
platforms | string[] | yes | 1–3 platforms per request |
include_ref_link | boolean | no | Append article backlink. Default true |
Platforms: x_article, x_thread, linkedin, facebook, reddit, threads, instagram, instagram_reels, youtube_shorts
Publish or schedule an adaptation.
| Parameter | Type | Required | Description |
|---|---|---|---|
adaptationId | string | yes | Adaptation ID from /adapt |
action | string | yes | now, schedule, cancel |
platform | string | yes | Target platform |
accountId | string | yes | Connected social account ID |
scheduledAt | string | no | ISO 8601 datetime for scheduled action |
Create an automated content session.
| Parameter | Type | Required | Description |
|---|---|---|---|
categories | string[] | yes | Topic categories for generation |
problems | string[] | no | Specific problems or pain points to cover |
languages | string[] | no | Language codes. Default ["en"] |
interval_minutes | integer | no | Generation interval, 60-10080. Default 720 (12h) |
article_size | string | no | mini, standard, full, pillar |
disable_competition | boolean | no | Skip competitor analysis. Default false |
Create and publish a micro-post.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | yes | Post topic |
platforms | string[] | yes | Target platforms |
tone | string | no | professional, casual, humorous, authoritative |
contentType | string | no | tip, insight, question, announcement, story |
scheduledAt | string | no | ISO 8601 datetime. Omit for immediate |
List all available writing personas.
No parameters required.
Response: Array of persona objects with slug, name, description, style.
Get current agent/blog settings.
Update agent/blog settings.
| Parameter | Type | Description |
|---|---|---|
default_language | string | Default article language |
default_size | string | Default article size |
auto_publish | boolean | Auto-publish generated articles |
default_persona | string | Default persona slug |
Add a product to knowledge base.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Product name |
description | string | yes | Product description |
url | string | no | Product landing page |
features | string[] | no | Key features list |
List all products in knowledge base.
Semantic search over knowledge base.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | Search query |
Remove a product from knowledge base.
Get current content schedule (upcoming articles, sessions).
Find gaps in the content calendar where no articles are scheduled.
Get AI-suggested topics to fill schedule gaps based on existing content and SEO opportunities.
Register a webhook endpoint for event notifications.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | HTTPS endpoint URL |
events | string[] | yes | Event types to subscribe to |
secret | string | no | HMAC signing secret |
List registered webhooks.
Remove a webhook registration.
Get recent webhook delivery history with status codes and payloads.
Check API availability.
Get current agent profile, blog info, and credit balance.
Check API health and readiness.
Response:
{
"status": "ok",
"version": "3.0.0"
}
All costs in credits. 1 credit = $0.01 USD.
| Size | Standard Mode | Description |
|---|---|---|
mini | 15 credits | ~500 words, quick post |
standard | 20 credits | ~1,000 words, full article |
full | 33 credits | ~2,000 words, in-depth piece |
pillar | 48 credits | ~4,000 words, pillar content |
| Mode | Cost | Notes |
|---|---|---|
turbo | 2 credits | Fast, no web search |
turbo+ | 4 credits | Fast + web intelligence |
| Extension | Cost |
|---|---|
| +Intelligence (web search) | +8 credits |
| +Illustrations (per article) | +9–36 credits depending on count |
| +Audio voice-over | +10–55 credits depending on length & language |
| Endpoint | Cost |
|---|---|
/api/agent/post | 2 credits |
~5 credits per platform per article.
Products storage is free. Semantic search costs minimal credits per query.
25 writing personas available. Pass the slug to /api/agent/autopilot. Call GET /api/agent/personas for the full dynamic list.
Example slugs: "musk", "hemingway", "jobs", "saas-founder", "investigative-reporter", "science-communicator", "business-journalist", "cto-engineer", "data-scientist", "marketing-strategist", "comedian-writer", "lifestyle-blogger", "newsletter-writer", "academic-researcher", "creative-storyteller"
Subscribe to these events when registering a webhook:
| Event | Triggered When |
|---|---|
article.generated | Article generation completed |
article.published | Article published (auto or manual) |
article.unpublished | Article unpublished (→ draft) |
article.deleted | Article permanently deleted |
article.failed | Article generation failed |
social_adaptation.generated | Social post adaptation created |
session.articles_generated | Recurring session published articles |
billing.credits_low | Balance below threshold |
billing.credits_empty | Balance at 0 |
| Endpoint | Limit |
|---|---|
/api/agent/autopilot | 10 requests/minute |
/api/agent/adapt | 20 requests/minute |
/api/agent/post | 30 requests/minute |
/api/agent/products | 60 requests/minute |
| All other endpoints | 120 requests/minute |
Rate limit headers are included in all responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
/api/agent/adapt callsource_urls maximum 5 URLs per requeststandard may take 60–180 seconds to generateturbo and turbo+ modes do not support illustrations or audioAll errors follow a consistent structure:
{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits to complete this operation",
"required": 20,
"available": 5
}
}
| Code | HTTP Status | Description |
|---|---|---|
UNAUTHORIZED | 401 | Invalid or missing API key |
INSUFFICIENT_CREDITS | 402 | Not enough credits |
RATE_LIMITED | 429 | Too many requests |
ARTICLE_NOT_FOUND | 404 | Article ID does not exist |
INVALID_PLATFORM | 400 | Unknown platform slug |
SESSION_CONFLICT | 409 | Active session already exists |
GENERATION_FAILED | 500 | AI generation error — retry safe |
When an error occurs:
INSUFFICIENT_CREDITS — Inform the user of current balance and required credits. Direct to: https://www.citedy.com/dashboard/billingRATE_LIMITED — Wait for Retry-After header value before retrying. Do not spam requests.GENERATION_FAILED — Retry once after 10 seconds. If it fails again, report the error and suggest trying a different topic or smaller size.UNAUTHORIZED — Guide the user to check their API key at https://www.citedy.com/dashboard/settings./api/agent/autopilot response status:
"generated", "publishing", or "published" (success-terminal) → the article payload is in the response; present title, URL, and word_count to the user."failed" (failure-terminal) → there is no usable article. Surface the error (error.message or error.code) to the user and follow your retry/fallback path. Do not treat this as a success."processing" or any other non-terminal value (e.g. when the transform pipeline returns 202 admission, or when async generation is requested) → use the response id/article_id and poll GET /api/agent/articles/{id} until status reaches a terminal value, or wait for the corresponding webhook (article.generated, article.published, article.failed).This skill covers the full content writing pipeline. Citedy also offers:
Explore the full suite: https://www.citedy.com/tools