> ## Documentation Index
> Fetch the complete documentation index at: https://developers.octaviatech.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Article

> Guidelines for creating multilingual articles in Octavia AI CMS.

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:

```json theme={null}
"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


## OpenAPI

````yaml POST /articles/create
openapi: 3.1.0
info:
  title: Blog API
  version: 1.0.0
servers:
  - url: https://api.octaviatech.app/cms
    description: Production
security:
  - ApiKeyAuth: []
tags: []
paths:
  /articles/create:
    post:
      tags:
        - Articles
      summary: Create article
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - mainTitle
                - body
                - category
                - author
              properties:
                mainTitle:
                  type: object
                  description: Main title in multiple languages
                  additionalProperties: false
                  properties:
                    en:
                      type: string
                    es:
                      type: string
                title2:
                  type: object
                  description: Optional secondary title in multiple languages
                  additionalProperties: false
                  properties:
                    en:
                      type: string
                    es:
                      type: string
                title3:
                  type: object
                  description: Optional tertiary title in multiple languages
                  additionalProperties: false
                  properties:
                    en:
                      type: string
                    es:
                      type: string
                slug:
                  type: string
                  description: URL-friendly unique identifier
                summary:
                  type: object
                  description: Short summary in multiple languages
                  additionalProperties: false
                  properties:
                    en:
                      type: string
                    es:
                      type: string
                body:
                  type: object
                  description: Main article content (HTML allowed)
                  additionalProperties: false
                  properties:
                    en:
                      type: string
                      description: HTML string
                    es:
                      type: string
                      description: HTML string
                thumbnail:
                  type: string
                  format: uri
                  description: Thumbnail image URL
                banner:
                  type: string
                  format: uri
                  description: Banner image URL
                tags:
                  type: array
                  description: List of tags
                  items:
                    type: string
                category:
                  type: array
                  description: Array of category IDs
                  items:
                    type: string
                    pattern: ^[a-fA-F0-9]{24}$
                subCategory:
                  type: array
                  description: Array of sub-category IDs
                  items:
                    type: string
                    pattern: ^[a-fA-F0-9]{24}$
                author:
                  type: string
                  description: Author ID
                  pattern: ^[a-fA-F0-9]{24}$
                gallery:
                  type: array
                  description: Optional gallery image URLs
                  items:
                    type: string
                    format: uri
                publishDate:
                  type: string
                  format: date-time
                  description: Publish date in ISO 8601
                isPublished:
                  type: boolean
                  description: Publish state
                isPrivate:
                  type: boolean
                  description: If true, restricts visibility
                language:
                  type: string
                  description: Preferred language for immediate rendering/preview
                  enum:
                    - en
                    - es
                autoSummarize:
                  type: boolean
                  description: If true, backend may auto-create a summary
            examples:
              Create Article:
                value:
                  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
      responses:
        '201':
          description: Created
          content:
            application/json:
              example:
                success: true
                statusCode: 201
                message: Created
                data:
                  id: '{{objectId}}'
                  slug: hello-world
        '401':
          description: Unauthorized
          content:
            application/json:
              example:
                success: false
                statusCode: 401
                message: Unauthorized
                data: null
        '403':
          description: Forbidden
          content:
            application/json:
              example:
                success: false
                statusCode: 403
                message: Forbidden
                data: null
        '409':
          description: Conflict (slug exists)
          content:
            application/json:
              example:
                success: false
                statusCode: 409
                message: Slug already exists
                data: null
        '422':
          description: Validation error
          content:
            application/json:
              example:
                success: false
                statusCode: 422
                message: Validation failed
                data: null
        '500':
          description: Server error
          content:
            application/json:
              example:
                success: false
                statusCode: 500
                message: Internal server error
                data: null
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````