Slide
A single slide. Content can be authored as a full-slide root payload, or inside promoted named region keys such as 'left', 'center+right', and 'top:left'.
Metadata
#/$defs/Slide
object
spec/schemas/opf.schema.json
Fields
| Field | Type | Req | Description |
|---|---|---|---|
| id | string | — | Optional stable identifier for the slide within the document. Use when another system needs to reference a slide across edits, comments, generation state, exports, or narrative tooling. Slide order is defined by the slides array, so simple decks may omit this. |
| type | enum | — | Optional full-slide content kind. When omitted, engines infer the kind from root payload fields. |
| beat | string | array<string> | — | Optional reference to one or more narrative beats (each value matches an id from narrative.beats or the resolved template). A single string declares the slide's primary beat; an array declares that one slide covers multiple beats. Declares the slide's role in the story arc; does… |
| layout | string | — | Optional slide layout reference. Resolves to the 'id' of a 'layouts' catalog record. When omitted, engines infer a layout from the slide's root payload or promoted region keys. Accepts a bare id (lowercase kebab-case, e.g. 'title-subtitle'), an HTTPS URL pointing at a record fil… |
| title | string | — | Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there. |
| subtitle | string | — | Slide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there. |
| tag | string | — | Small slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there. |
| text | string | array<ref:TextRun> | — | Full-slide text payload. Use a string for plain text or TextRun[] for inline rich text. TextRun items may be plain strings or formatted run objects. |
| items | array<ref:ListItem> | — | Full-slide generic list payload. Presence of this field infers type 'list'. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for layout-agnostic blocks. |
| bullets | array<ref:BulletItem> | — | Full-slide text-style bullet payload. Presence of this field infers type 'text'. |
| image | ref:Asset | — | Full-slide image source. Presence of this field infers type 'image'. |
| video | ref:Asset | — | Full-slide video source. Presence of this field infers type 'video'. |
| chart | ref:Chart | — | Full-slide chart payload. Presence of this field infers type 'chart'. |
| table | ref:Table | — | Full-slide table payload. Presence of this field infers type 'table'. |
| code | string | ref:Code | — | Full-slide code payload. A string is shorthand for { "source": value }; object form carries optional syntax language and filename metadata. |
| metric | string | number | ref:Metric | — | Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them for display. Presence of this field infers type 'metric'. |
| quote | string | ref:Quote | — | Full-slide quote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata. Presence of this field infers type 'quote'. |
| timeline | ref:Timeline | — | Full-slide timeline payload. An array is shorthand for { "events": value }; object form carries optional name and description metadata. Presence of this field infers type 'timeline'. |
| blocks | array<ref:ContentPayload> | — | Layout-agnostic content blocks rendered together as a composed payload when exact placement is unspecified. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for equivalent blocks. |
| design | ref:Design | — | Slide-level design applied on top of the deck-wide design. |
| left | ref:ContentPayload | — | |
| center | ref:ContentPayload | — | |
| right | ref:ContentPayload | — | |
| left+center | ref:ContentPayload | — | |
| center+right | ref:ContentPayload | — | |
| left+center+right | ref:ContentPayload | — | |
| top | ref:ContentPayload | — | |
| middle | ref:ContentPayload | — | |
| bottom | ref:ContentPayload | — | |
| top+middle | ref:ContentPayload | — | |
| middle+bottom | ref:ContentPayload | — | |
| top+middle+bottom | ref:ContentPayload | — | |
| top:left | ref:ContentPayload | — | |
| top:center | ref:ContentPayload | — | |
| top:right | ref:ContentPayload | — | |
| top:left+center | ref:ContentPayload | — | |
| top:center+right | ref:ContentPayload | — | |
| top:left+center+right | ref:ContentPayload | — | |
| middle:left | ref:ContentPayload | — | |
| middle:center | ref:ContentPayload | — | |
| middle:right | ref:ContentPayload | — | |
| middle:left+center | ref:ContentPayload | — | |
| middle:center+right | ref:ContentPayload | — | |
| middle:left+center+right | ref:ContentPayload | — | |
| bottom:left | ref:ContentPayload | — | |
| bottom:center | ref:ContentPayload | — | |
| bottom:right | ref:ContentPayload | — | |
| bottom:left+center | ref:ContentPayload | — | |
| bottom:center+right | ref:ContentPayload | — | |
| bottom:left+center+right | ref:ContentPayload | — | |
| top+middle:left | ref:ContentPayload | — | |
| top+middle:center | ref:ContentPayload | — | |
| top+middle:right | ref:ContentPayload | — | |
| top+middle:left+center | ref:ContentPayload | — | |
| top+middle:center+right | ref:ContentPayload | — | |
| top+middle:left+center+right | ref:ContentPayload | — | |
| middle+bottom:left | ref:ContentPayload | — | |
| middle+bottom:center | ref:ContentPayload | — | |
| middle+bottom:right | ref:ContentPayload | — | |
| middle+bottom:left+center | ref:ContentPayload | — | |
| middle+bottom:center+right | ref:ContentPayload | — | |
| middle+bottom:left+center+right | ref:ContentPayload | — | |
| top+middle+bottom:left | ref:ContentPayload | — | |
| top+middle+bottom:center | ref:ContentPayload | — | |
| top+middle+bottom:right | ref:ContentPayload | — | |
| top+middle+bottom:left+center | ref:ContentPayload | — | |
| top+middle+bottom:center+right | ref:ContentPayload | — | |
| top+middle+bottom:left+center+right | ref:ContentPayload | — | |
| notes | string | — | Speaker notes shown in presenter view. |
| section | string | — | PowerPoint-style slide section label. Consecutive slides with the same value belong to the same section in presenter view, outlines, and PowerPoint section-aware exports. |
| hidden | boolean | — | Whether the slide is hidden from the presented sequence. |
id
Type: string · Optional · Default: —
Optional stable identifier for the slide within the document. Use when another system needs to reference a slide across edits, comments, generation state, exports, or narrative tooling. Slide order is defined by the slides array, so simple decks may omit this.
{
"id": "s1"
}type
Type: enum · Optional · Default: —
Optional full-slide content kind. When omitted, engines infer the kind from root payload fields.
{
"type": "text"
}beat
Type: string | array<string> · Optional · Default: —
Optional reference to one or more narrative beats (each value matches an id from narrative.beats or the resolved template). A single string declares the slide's primary beat; an array declares that one slide covers multiple beats. Declares the slide's role in the story arc; does…
{
"beat": "beat-value"
}layout
Type: string · Optional · Default: —
Optional slide layout reference. Resolves to the 'id' of a 'layouts' catalog record. When omitted, engines infer a layout from the slide's root payload or promoted region keys. Accepts a bare id (lowercase kebab-case, e.g. 'title-subtitle'), an HTTPS URL pointing at a record fil…
{
"layout": "title"
}title
Type: string · Optional · Default: —
Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there.
{
"title": "Quarterly Review"
}subtitle
Type: string · Optional · Default: —
Slide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there.
{
"subtitle": "Prepared for the board"
}tag
Type: string · Optional · Default: —
Small slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there.
{
"tag": "Intro"
}text
Type: string | array<ref:TextRun> · Optional · Default: —
Full-slide text payload. Use a string for plain text or TextRun[] for inline rich text. TextRun items may be plain strings or formatted run objects.
{
"text": "text-value"
}items
Type: array<ref:ListItem> · Optional · Default: —
Full-slide generic list payload. Presence of this field infers type 'list'. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for layout-agnostic blocks.
{
"items": []
}bullets
Type: array<ref:BulletItem> · Optional · Default: —
Full-slide text-style bullet payload. Presence of this field infers type 'text'.
{
"bullets": []
}image
Type: ref:Asset · Optional · Default: —
Full-slide image source. Presence of this field infers type 'image'.
{
"image": "image-value"
}video
Type: ref:Asset · Optional · Default: —
Full-slide video source. Presence of this field infers type 'video'.
{
"video": "video-value"
}chart
Type: ref:Chart · Optional · Default: —
Full-slide chart payload. Presence of this field infers type 'chart'.
{
"chart": "chart-value"
}table
Type: ref:Table · Optional · Default: —
Full-slide table payload. Presence of this field infers type 'table'.
{
"table": "table-value"
}code
Type: string | ref:Code · Optional · Default: —
Full-slide code payload. A string is shorthand for { "source": value }; object form carries optional syntax language and filename metadata.
{
"code": "code-value"
}metric
Type: string | number | ref:Metric · Optional · Default: —
Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them for display. Presence of this field infers type 'metric'.
{
"metric": "metric-value"
}quote
Type: string | ref:Quote · Optional · Default: —
Full-slide quote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata. Presence of this field infers type 'quote'.
{
"quote": "quote-value"
}timeline
Type: ref:Timeline · Optional · Default: —
Full-slide timeline payload. An array is shorthand for { "events": value }; object form carries optional name and description metadata. Presence of this field infers type 'timeline'.
{
"timeline": "timeline-value"
}blocks
Type: array<ref:ContentPayload> · Optional · Default: —
Layout-agnostic content blocks rendered together as a composed payload when exact placement is unspecified. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for equivalent blocks.
{
"blocks": []
}design
Type: ref:Design · Optional · Default: —
Slide-level design applied on top of the deck-wide design.
{
"design": "design-value"
}left
Type: ref:ContentPayload · Optional · Default: —
{
"left": "left-value"
}center
Type: ref:ContentPayload · Optional · Default: —
{
"center": "center-value"
}right
Type: ref:ContentPayload · Optional · Default: —
{
"right": "right-value"
}left+center
Type: ref:ContentPayload · Optional · Default: —
{
"left+center": "left+center-value"
}center+right
Type: ref:ContentPayload · Optional · Default: —
{
"center+right": "center+right-value"
}left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"left+center+right": "left+center+right-value"
}top
Type: ref:ContentPayload · Optional · Default: —
{
"top": "top-value"
}middle
Type: ref:ContentPayload · Optional · Default: —
{
"middle": "middle-value"
}bottom
Type: ref:ContentPayload · Optional · Default: —
{
"bottom": "bottom-value"
}top+middle
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle": "top+middle-value"
}middle+bottom
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom": "middle+bottom-value"
}top+middle+bottom
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom": "top+middle+bottom-value"
}top:left
Type: ref:ContentPayload · Optional · Default: —
{
"top:left": "top:left-value"
}top:center
Type: ref:ContentPayload · Optional · Default: —
{
"top:center": "top:center-value"
}top:right
Type: ref:ContentPayload · Optional · Default: —
{
"top:right": "top:right-value"
}top:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"top:left+center": "top:left+center-value"
}top:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top:center+right": "top:center+right-value"
}top:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top:left+center+right": "top:left+center+right-value"
}middle:left
Type: ref:ContentPayload · Optional · Default: —
{
"middle:left": "middle:left-value"
}middle:center
Type: ref:ContentPayload · Optional · Default: —
{
"middle:center": "middle:center-value"
}middle:right
Type: ref:ContentPayload · Optional · Default: —
{
"middle:right": "middle:right-value"
}middle:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"middle:left+center": "middle:left+center-value"
}middle:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"middle:center+right": "middle:center+right-value"
}middle:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"middle:left+center+right": "middle:left+center+right-value"
}bottom:left
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:left": "bottom:left-value"
}bottom:center
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:center": "bottom:center-value"
}bottom:right
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:right": "bottom:right-value"
}bottom:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:left+center": "bottom:left+center-value"
}bottom:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:center+right": "bottom:center+right-value"
}bottom:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"bottom:left+center+right": "bottom:left+center+right-value"
}top+middle:left
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:left": "top+middle:left-value"
}top+middle:center
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:center": "top+middle:center-value"
}top+middle:right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:right": "top+middle:right-value"
}top+middle:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:left+center": "top+middle:left+center-value"
}top+middle:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:center+right": "top+middle:center+right-value"
}top+middle:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle:left+center+right": "top+middle:left+center+right-value"
}middle+bottom:left
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:left": "middle+bottom:left-value"
}middle+bottom:center
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:center": "middle+bottom:center-value"
}middle+bottom:right
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:right": "middle+bottom:right-value"
}middle+bottom:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:left+center": "middle+bottom:left+center-value"
}middle+bottom:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:center+right": "middle+bottom:center+right-value"
}middle+bottom:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"middle+bottom:left+center+right": "middle+bottom:left+center+right-value"
}top+middle+bottom:left
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:left": "top+middle+bottom:left-value"
}top+middle+bottom:center
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:center": "top+middle+bottom:center-value"
}top+middle+bottom:right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:right": "top+middle+bottom:right-value"
}top+middle+bottom:left+center
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:left+center": "top+middle+bottom:left+center-value"
}top+middle+bottom:center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:center+right": "top+middle+bottom:center+right-value"
}top+middle+bottom:left+center+right
Type: ref:ContentPayload · Optional · Default: —
{
"top+middle+bottom:left+center+right": "top+middle+bottom:left+center+right-value"
}notes
Type: string · Optional · Default: —
Speaker notes shown in presenter view.
{
"notes": "Open with the customer story; pause for questions before moving to the architecture slide."
}section
Type: string · Optional · Default: —
PowerPoint-style slide section label. Consecutive slides with the same value belong to the same section in presenter view, outlines, and PowerPoint section-aware exports.
{
"section": "Intro"
}