Skip to main content
Manage blog articles across the full content pipeline — planning, AI generation, scheduling, and publishing — and configure content automation settings per website. Function: public-api-content Base path: https://app.keupera.com/api/v1/public-api-content

List articles

GET /articles
ParameterTypeDefaultDescription
website_idUUIDAPI key’s websiteTarget website
limitinteger20Results per page
pageinteger1Page number
statusstringFilter: planned, queued, in-progress, completed, published

Response

{
  "data": [
    {
      "id": "uuid",
      "title": "Best SEO Tools in 2024",
      "slug": "best-seo-tools-2024",
      "status": "published",
      "pipeline_status": "completed",
      "article_type": "standard",
      "published_at": "2024-01-15T10:00:00Z",
      "keywords": { "term": "seo tools", "volume": 12000, "difficulty": 45 },
      "created_at": "2024-01-10T08:00:00Z"
    }
  ],
  "meta": { "total": 50, "page": 1, "limit": 20 }
}

Get an article

GET /articles/:id
Returns full article details, including linked keyword data.

Create an article (plan)

POST /articles

Request body

{
  "website_id": "uuid",
  "title": "Ultimate Guide to SEO",
  "keyword_id": "uuid",
  "date": "2024-02-15",
  "article_type": "listicle"
}
FieldRequiredDescription
titleConditionalArticle title — required if no keyword_id
keyword_idConditionalLink to a keyword — required if no title
dateNoSchedule date (ISO or YYYY-MM-DD)
article_typeNostandard, listicle, how-to, etc.

Response (201)

{
  "data": {
    "id": "uuid",
    "title": "Ultimate Guide to SEO",
    "status": "planned",
    "scheduled_publish_at": "2024-02-15T00:00:00Z"
  }
}

Update an article

PATCH /articles/:id

Request body

{
  "title": "Updated Title",
  "status": "planned",
  "date": "2024-03-01",
  "article_type": "how-to",
  "meta_description": "A comprehensive guide to..."
}
Allowed fields: title, article_type, status, published_at, scheduled_publish_at, content, meta_description, featured_image, slug, date.

Delete an article

DELETE /articles/:id

Response

{ "success": true }
If the article is linked to a keyword, the keyword status is reverted to active.

Trigger article generation

POST /articles/:id/generate
Starts the AI content generation pipeline for a planned article.

Response

{
  "success": true,
  "message": "Article generation started",
  "article_id": "uuid"
}

Errors

CodeMeaning
400Article is already being generated
404Article not found or unauthorized
500Generation trigger failed

Get calendar events

GET /articles/calendar
ParameterTypeRequiredDescription
website_idUUIDNoTarget website
startstringYesStart date (ISO format)
endstringYesEnd date (ISO format)

Response

{
  "data": [
    {
      "id": "uuid",
      "title": "SEO Guide",
      "date": "2024-02-15T00:00:00Z",
      "status": "planned",
      "pipeline_status": "pending",
      "article_type": "standard",
      "volume": 12000,
      "difficulty": 45
    }
  ]
}

Get automation settings

GET /automation
ParameterTypeDescription
website_idUUIDTarget website

Response

{
  "data": {
    "auto_generate": true,
    "auto_publish": false,
    "auto_plan_blog_posts": true,
    "auto_plan_interval": "mon_wed_fri",
    "auto_promote": false,
    "auto_youtube": false,
    "track_bot_traffic": true
  }
}

Update automation settings

PATCH /automation

Request body

{
  "website_id": "uuid",
  "auto_generate": true,
  "auto_publish": true,
  "auto_plan_blog_posts": false,
  "auto_plan_interval": "daily"
}
FieldTypeDescription
auto_generatebooleanAuto-generate articles when planned
auto_publishbooleanAuto-publish articles when generated
auto_plan_blog_postsbooleanAuto-plan keywords into articles
auto_plan_intervalstringPlanning frequency: daily, mon_wed_fri, weekdays, etc.
auto_promotebooleanAuto-promote on social media
auto_youtubebooleanAuto-generate YouTube videos
track_bot_trafficbooleanTrack AI bot traffic on website

Response

{ "success": true, "updated": { "auto_generate": true, "auto_publish": true } }