Skip to main content
POST
/
articles
/
create
Create article
curl --request POST \
  --url https://api.octaviatech.app/cms/articles/create \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "mainTitle": {
    "en": "Hello World",
    "es": "Hola Mundo"
  },
  "title2": {
    "en": "Subheadline",
    "es": "Subtítulo"
  },
  "title3": {
    "en": "Additional Section Title",
    "es": "Título de Sección Adicional"
  },
  "slug": "hello-world",
  "summary": {
    "en": "Short summary of the article for readers.",
    "es": "Breve resumen del artículo para los lectores."
  },
  "body": {
    "en": "<p>This is the main HTML body of the article.</p>",
    "es": "<p>Este es el cuerpo principal en HTML del artículo.</p>"
  },
  "thumbnail": "https://cdn.example.com/img.jpg",
  "banner": "https://cdn.example.com/banner.jpg",
  "tags": [
    "news",
    "ai"
  ],
  "category": [
    "64b1f2c9a7d4f1a2b3c4d5e6"
  ],
  "subCategory": [
    "64b1f2c9a7d4f1a2b3c4d5e7"
  ],
  "author": "64b1f2c9a7d4f1a2b3c4d5e8",
  "language": "en",
  "gallery": [
    "https://cdn.example.com/g1.jpg",
    "https://cdn.example.com/g2.jpg"
  ],
  "publishDate": "2025-10-01T12:00:00Z",
  "isPublished": true,
  "isPrivate": false,
  "autoSummarize": false
}
'
{
  "success": true,
  "statusCode": 201,
  "message": "Created",
  "data": {
    "id": "{{objectId}}",
    "slug": "hello-world"
  }
}
When creating an article in Octavia AI CMS, you can include content in multiple languages.
Fields that support localization must be sent in the standard multilingual format, where each language is represented by a lowercase ISO 639-1 code (for example, en, es, fr).
Example format:
"mainTitle": {
  "en": "Building modern content workflows with Octavia AI CMS",
  "es": "Creación de flujos de contenido modernos con Octavia AI CMS",
  ...
}

Rules

  • ✅ Keys must be lowercase ISO 639-1 codes (en, es, de, etc.)
  • ✅ At least one language (your default) is required
  • ✅ Values must be plain strings (HTML allowed for content)
  • ❌ Do not send a single string for multilingual fields
  • ❌ Do not use uppercase or non-standard codes (e.g., EN, eng)

Validation & Behavior

  • Slug must be unique within your workspace
  • Publish controls: isPublished, isPrivate, and publishDate are optional
  • Language fallback: if the requested lang doesn’t exist, the API returns the default language
  • Content field supports only HTML, not Markdown
  • Category, subCategory, and author fields expect valid IDs
  • When using the lang header, localized fields are flattened to a single string; otherwise, the full language map is returned

Authorizations

x-api-key
string
header
required

Body

application/json
mainTitle
object
required

Main title in multiple languages

body
object
required

Main article content (HTML allowed)

category
string[]
required

Array of category IDs

author
string
required

Author ID

title2
object

Optional secondary title in multiple languages

title3
object

Optional tertiary title in multiple languages

slug
string

URL-friendly unique identifier

summary
object

Short summary in multiple languages

thumbnail
string<uri>

Thumbnail image URL

banner
string<uri>

Banner image URL

tags
string[]

List of tags

subCategory
string[]

Array of sub-category IDs

Optional gallery image URLs

publishDate
string<date-time>

Publish date in ISO 8601

isPublished
boolean

Publish state

isPrivate
boolean

If true, restricts visibility

language
enum<string>

Preferred language for immediate rendering/preview

Available options:
en,
es
autoSummarize
boolean

If true, backend may auto-create a summary

Response

Created