---
{
  "id": "platform.slide.content-elements-and-limits",
  "topic": "slide",
  "title": "Slide content versions, elements, themes, and limits",
  "locale": "en",
  "version": "2026-07-25",
  "summary": "Slide content is versioned structured JSON with bounded size and element count, a strict deck-theme allowlist, and forward-compatible element extension keys.",
  "content": "A slide body is structured JSON with top-level `version` and `elements`. Runtime accepts legacy version 1 and canonical version 2; version 3 does not exist. New blank slides use version 2 with an empty element array. Element types are `text`, `image`, `shape` (`rect` or `ellipse`), and `table`. Each needs a unique non-empty slide-local ID plus finite x, y, width, and height; width and height must be positive. Type-specific fields are validated, with image rules detailed separately.\n\nA deck may contain 200 slides, each slide 200 elements, and serialized content at most 256 KiB (262,144 bytes). These are behavior constants. A table is an array of rows; row, column, and cell-text limits return `invalid_arguments`, with exact details owned by runtime errors. Oversized text and speaker notes are also rejected. Split long prose across slides or use Memo instead of packing it into one text element. Use `arinova.action.get_schema` for the current Action argument envelope.\n\nDeck theme is a separate metadata object with a strict allowlist of known keys and recursively safe JSON values. Unknown theme keys are rejected. The default aspect ratio accepts `16:9` or `4:3`. By contrast, unknown extra keys inside individual elements are deliberately retained for forward compatibility when all required base and type-specific fields are valid. Do not strip such extension keys during a read-modify-write cycle.\n",
  "aliases": [
    "presentation JSON",
    "content version",
    "text shape table",
    "element limit",
    "deck theme",
    "aspect ratio"
  ],
  "tags": [
    "slide",
    "content",
    "elements",
    "limits",
    "theme"
  ],
  "relatedActions": [
    "arinova.slide.create_deck",
    "arinova.slide.get_deck",
    "arinova.slide.add_slide",
    "arinova.slide.update_slide"
  ],
  "relatedActionPrefixes": [],
  "url": "https://docs.arinova.ai/en/kb/slide/content-elements-and-limits/"
}
---

A slide body is structured JSON with top-level `version` and `elements`. Runtime accepts legacy version 1 and canonical version 2; version 3 does not exist. New blank slides use version 2 with an empty element array. Element types are `text`, `image`, `shape` (`rect` or `ellipse`), and `table`. Each needs a unique non-empty slide-local ID plus finite x, y, width, and height; width and height must be positive. Type-specific fields are validated, with image rules detailed separately.

A deck may contain 200 slides, each slide 200 elements, and serialized content at most 256 KiB (262,144 bytes). These are behavior constants. A table is an array of rows; row, column, and cell-text limits return `invalid_arguments`, with exact details owned by runtime errors. Oversized text and speaker notes are also rejected. Split long prose across slides or use Memo instead of packing it into one text element. Use `arinova.action.get_schema` for the current Action argument envelope.

Deck theme is a separate metadata object with a strict allowlist of known keys and recursively safe JSON values. Unknown theme keys are rejected. The default aspect ratio accepts `16:9` or `4:3`. By contrast, unknown extra keys inside individual elements are deliberately retained for forward compatibility when all required base and type-specific fields are valid. Do not strip such extension keys during a read-modify-write cycle.
