Back to skills
extension
Category: Marketing & GrowthNo API key required

citedy-content-writer

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.

personAuthor: jakexiaohubgithub

AI Content Writer — Skill Instructions

Overview

AI Content Writer is an end-to-end blog autopilot powered by Citedy. It covers the entire content production pipeline in a single conversation:

  1. Research — source URLs or topic input, optional web intelligence search
  2. Write — SEO & GEO-optimized articles in 55 languages, 4 size presets
  3. Enhance — AI illustrations, voice-over audio, internal link optimization, humanization
  4. Distribute — social media adaptations for 9 platforms (X, LinkedIn, Facebook, Reddit, Threads, Instagram, Instagram Reels, YouTube Shorts)
  5. Automate — cron-based autopilot sessions, scheduling, webhook notifications

No competitor offers the full pipeline in one agent skill.


When to Use

Use this skill when the user wants to:

  • Write a blog article from a topic or URL
  • Create social media posts from an existing article
  • Set up automated daily/weekly content publishing
  • Manage a product knowledge base for AI-grounded articles
  • Schedule and fill content calendar gaps
  • Generate micro-posts across multiple platforms at once
  • Select a writing persona (25 available)

Setup

1. Get an API Key

Direct the user to: https://www.citedy.com/dashboard/settings → Team & API section.

API keys are prefixed citedy_agent_.

2. Register the 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.

3. Verify Connection

GET https://www.citedy.com/api/agent/me
Authorization: Bearer <CITEDY_API_KEY>

Core Workflows

Workflow 1: URL to Article

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
}

Workflow 2: Topic to Article

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
}

Workflow 3: Turbo Mode (Fast & Cheap)

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.


Workflow 4: Social Adaptations

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


Workflow 5: Autopilot Session (Automated Publishing)

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.


Workflow 6: Micro-Post

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"
}

Workflow 7: Knowledge Base (Products)

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>

Workflow 8: Schedule Management

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>.


Workflow 9: Publish

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


Examples

Example 1: Write Article from URL

User: "Write an article based on this post: https://competitor.com/best-crm-tools"

Agent flow:

  1. Call 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 step
  2. Return article title, URL, and word count to user
  3. Ask: "Want social media adaptations? Which platforms?"

Example 2: Daily Autopilot

User: "Set up daily articles about fintech in English and Spanish"

Agent flow:

  1. Call POST /api/agent/session with categories: ["fintech", "payments", "banking"], languages: ["en", "es"], interval_minutes: 720, article_size: "standard"
  2. Confirm session ID and next scheduled run
  3. Optionally register webhook to notify user on each article completion

Example 3: Turbo Mode

User: "Quickly write 5 short articles about remote work tips"

Agent flow:

  1. For each topic, call POST /api/agent/autopilot with mode: "turbo", size: "mini"
  2. Run calls sequentially or note rate limits
  3. Return list of generated article titles and links

Example 4: Social Adaptations

User: "Take my latest article and make posts for LinkedIn, Reddit, and X"

Agent flow:

  1. Call GET /api/agent/articles to find the latest article ID
  2. Call POST /api/agent/adapt with platforms: ["linkedin", "reddit", "x_thread"], include_ref_link: true
  3. Return each adaptation with preview text
  4. Ask: "Want to publish now or schedule?"

API Reference

POST /api/agent/autopilot

Generate 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
}

GET /api/agent/articles

List generated articles.

| Parameter | Type | Description | | --------- | ------- | ------------------------------------------------------ | | status | string | Filter: generated (draft), published, processing | | limit | integer | Max results, default 20 | | offset | integer | Pagination offset |


POST /api/agent/articles/{id}/publish

Publish a draft article (status: "generated""published").

  • 0 credits.
  • Returns { article_id, status: "publishing", message }.
  • Only works on articles with status: "generated". Other statuses return 409 Conflict.
  • Fires article.published webhook event.

PATCH /api/agent/articles/{id}

Unpublish a published article (status: "published""generated").

{ "action": "unpublish" }
  • 0 credits.
  • Returns { article_id, status: "generated", message }.
  • Only works on articles with status: "published". Other statuses return 409 Conflict.
  • Fires article.unpublished webhook event.

DELETE /api/agent/articles/{id}

Permanently delete an article and its associated storage files (images, audio).

  • 0 credits. Irreversible. Credits are NOT refunded.
  • Returns { article_id, message: "Article deleted" }.
  • Fires article.deleted webhook event.

POST /api/agent/adapt

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


POST /api/agent/publish

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 |


POST /api/agent/session

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 |


POST /api/agent/post

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 |


GET /api/agent/personas

List all available writing personas.

No parameters required.

Response: Array of persona objects with slug, name, description, style.


GET /api/agent/settings

Get current agent/blog settings.


PUT /api/agent/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 |


POST /api/agent/products

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 |


GET /api/agent/products

List all products in knowledge base.


POST /api/agent/products/search

Semantic search over knowledge base.

| Parameter | Type | Required | Description | | --------- | ------ | -------- | ------------ | | query | string | yes | Search query |


DELETE /api/agent/products/:id

Remove a product from knowledge base.


GET /api/agent/schedule

Get current content schedule (upcoming articles, sessions).


GET /api/agent/schedule/gaps

Find gaps in the content calendar where no articles are scheduled.


GET /api/agent/schedule/suggest (REST only, not MCP tool)

Get AI-suggested topics to fill schedule gaps based on existing content and SEO opportunities.


POST /api/agent/webhooks

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 |


GET /api/agent/webhooks

List registered webhooks.


DELETE /api/agent/webhooks/:id

Remove a webhook registration.


GET /api/agent/webhooks/deliveries

Get recent webhook delivery history with status codes and payloads.


GET /api/agent/health

Check API availability.


GET /api/agent/me

Get current agent profile, blog info, and credit balance.


GET /api/agent/health

Check API health and readiness.

Response:

{
  "status": "ok",
  "version": "3.0.0"
}

Pricing

All costs in credits. 1 credit = $0.01 USD.

Article Generation

| 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 |

Turbo Mode

| Mode | Cost | Notes | | -------- | --------- | ----------------------- | | turbo | 2 credits | Fast, no web search | | turbo+ | 4 credits | Fast + web intelligence |

Extensions

| 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 |

Micro-Post

| Endpoint | Cost | | ----------------- | --------- | | /api/agent/post | 2 credits |

Social Adaptations

~5 credits per platform per article.

Knowledge Base

Products storage is free. Semantic search costs minimal credits per query.


Persona List

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"


Webhook Event Types

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 |


Rate Limits

| 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.


Limitations

  • Social adaptation: maximum 3 platforms per /api/agent/adapt call
  • Autopilot: source_urls maximum 5 URLs per request
  • Knowledge base: maximum 500 products per account
  • Webhooks: maximum 10 registered endpoints per account
  • Article sizes above standard may take 60–180 seconds to generate
  • turbo and turbo+ modes do not support illustrations or audio
  • Language support varies by persona — not all personas support all 55 languages

Error Handling

All errors follow a consistent structure:

{
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "Not enough credits to complete this operation",
    "required": 20,
    "available": 5
  }
}

Common Error Codes

| 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 |

Agent Response Guidelines

When an error occurs:

  1. INSUFFICIENT_CREDITS — Inform the user of current balance and required credits. Direct to: https://www.citedy.com/dashboard/billing
  2. RATE_LIMITED — Wait for Retry-After header value before retrying. Do not spam requests.
  3. GENERATION_FAILED — Retry once after 10 seconds. If it fails again, report the error and suggest trying a different topic or smaller size.
  4. UNAUTHORIZED — Guide the user to check their API key at https://www.citedy.com/dashboard/settings.

Response Guidelines for the Agent

  • Always show the user the article title and URL after successful generation
  • Article generation usually returns the article inline. Check the /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).
  • Present credit costs before starting expensive operations (full/pillar articles, audio)
  • After generating an article, proactively offer social adaptations
  • After social adaptations, offer to publish or schedule
  • For autopilot sessions, confirm interval and categories with the user before creating

Want More?

This skill covers the full content writing pipeline. Citedy also offers:

  • Video Shorts — AI UGC viral video generation with voice and subtitles for TikTok, Reels, and YouTube Shorts
  • Trend Scouting — Daily trending topic discovery from Hacker News, Reddit, and social signals
  • Content Ingestion — Convert any YouTube video, podcast, or long-form document into a blog article
  • SEO Intelligence — Competitor gap analysis, keyword tracking, and SERP monitoring

Explore the full suite: https://www.citedy.com/tools