{}OPF
DocsObject referenceEdit on GitHub

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

Definition

#/$defs/Slide

Type

object

Source

spec/schemas/opf.schema.json

Fields

FieldTypeReqDescription
idstringOptional 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.
typeenumOptional full-slide content kind. When omitted, engines infer the kind from root payload fields.
beatstring | 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…
layoutstringOptional 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…
titlestringSlide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there.
subtitlestringSlide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there.
tagstringSmall slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there.
textstring | 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.
itemsarray<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.
bulletsarray<ref:BulletItem>Full-slide text-style bullet payload. Presence of this field infers type 'text'.
imageref:AssetFull-slide image source. Presence of this field infers type 'image'.
videoref:AssetFull-slide video source. Presence of this field infers type 'video'.
chartref:ChartFull-slide chart payload. Presence of this field infers type 'chart'.
tableref:TableFull-slide table payload. Presence of this field infers type 'table'.
codestring | ref:CodeFull-slide code payload. A string is shorthand for { "source": value }; object form carries optional syntax language and filename metadata.
metricstring | number | ref:MetricFull-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'.
quotestring | ref:QuoteFull-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'.
timelineref:TimelineFull-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'.
blocksarray<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.
designref:DesignSlide-level design applied on top of the deck-wide design.
leftref:ContentPayload
centerref:ContentPayload
rightref:ContentPayload
left+centerref:ContentPayload
center+rightref:ContentPayload
left+center+rightref:ContentPayload
topref:ContentPayload
middleref:ContentPayload
bottomref:ContentPayload
top+middleref:ContentPayload
middle+bottomref:ContentPayload
top+middle+bottomref:ContentPayload
top:leftref:ContentPayload
top:centerref:ContentPayload
top:rightref:ContentPayload
top:left+centerref:ContentPayload
top:center+rightref:ContentPayload
top:left+center+rightref:ContentPayload
middle:leftref:ContentPayload
middle:centerref:ContentPayload
middle:rightref:ContentPayload
middle:left+centerref:ContentPayload
middle:center+rightref:ContentPayload
middle:left+center+rightref:ContentPayload
bottom:leftref:ContentPayload
bottom:centerref:ContentPayload
bottom:rightref:ContentPayload
bottom:left+centerref:ContentPayload
bottom:center+rightref:ContentPayload
bottom:left+center+rightref:ContentPayload
top+middle:leftref:ContentPayload
top+middle:centerref:ContentPayload
top+middle:rightref:ContentPayload
top+middle:left+centerref:ContentPayload
top+middle:center+rightref:ContentPayload
top+middle:left+center+rightref:ContentPayload
middle+bottom:leftref:ContentPayload
middle+bottom:centerref:ContentPayload
middle+bottom:rightref:ContentPayload
middle+bottom:left+centerref:ContentPayload
middle+bottom:center+rightref:ContentPayload
middle+bottom:left+center+rightref:ContentPayload
top+middle+bottom:leftref:ContentPayload
top+middle+bottom:centerref:ContentPayload
top+middle+bottom:rightref:ContentPayload
top+middle+bottom:left+centerref:ContentPayload
top+middle+bottom:center+rightref:ContentPayload
top+middle+bottom:left+center+rightref:ContentPayload
notesstringSpeaker notes shown in presenter view.
sectionstringPowerPoint-style slide section label. Consecutive slides with the same value belong to the same section in presenter view, outlines, and PowerPoint section-aware exports.
hiddenbooleanWhether 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.json
{
  "id": "s1"
}

type

Type: enum · Optional · Default:

Optional full-slide content kind. When omitted, engines infer the kind from root payload fields.

type.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "items": []
}

bullets

Type: array<ref:BulletItem> · Optional · Default:

Full-slide text-style bullet payload. Presence of this field infers type 'text'.

bullets.json
{
  "bullets": []
}

image

Type: ref:Asset · Optional · Default:

Full-slide image source. Presence of this field infers type 'image'.

image.json
{
  "image": "image-value"
}

video

Type: ref:Asset · Optional · Default:

Full-slide video source. Presence of this field infers type 'video'.

video.json
{
  "video": "video-value"
}

chart

Type: ref:Chart · Optional · Default:

Full-slide chart payload. Presence of this field infers type 'chart'.

chart.json
{
  "chart": "chart-value"
}

table

Type: ref:Table · Optional · Default:

Full-slide table payload. Presence of this field infers type 'table'.

table.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "blocks": []
}

design

Type: ref:Design · Optional · Default:

Slide-level design applied on top of the deck-wide design.

design.json
{
  "design": "design-value"
}

left

Type: ref:ContentPayload · Optional · Default:

left.json
{
  "left": "left-value"
}

center

Type: ref:ContentPayload · Optional · Default:

center.json
{
  "center": "center-value"
}

left+center

Type: ref:ContentPayload · Optional · Default:

left+center.json
{
  "left+center": "left+center-value"
}

center+right

Type: ref:ContentPayload · Optional · Default:

center+right.json
{
  "center+right": "center+right-value"
}

left+center+right

Type: ref:ContentPayload · Optional · Default:

left+center+right.json
{
  "left+center+right": "left+center+right-value"
}

top

Type: ref:ContentPayload · Optional · Default:

top.json
{
  "top": "top-value"
}

middle

Type: ref:ContentPayload · Optional · Default:

middle.json
{
  "middle": "middle-value"
}

bottom

Type: ref:ContentPayload · Optional · Default:

bottom.json
{
  "bottom": "bottom-value"
}

top+middle

Type: ref:ContentPayload · Optional · Default:

top+middle.json
{
  "top+middle": "top+middle-value"
}

middle+bottom

Type: ref:ContentPayload · Optional · Default:

middle+bottom.json
{
  "middle+bottom": "middle+bottom-value"
}

top+middle+bottom

Type: ref:ContentPayload · Optional · Default:

top+middle+bottom.json
{
  "top+middle+bottom": "top+middle+bottom-value"
}

top:left

Type: ref:ContentPayload · Optional · Default:

top:left.json
{
  "top:left": "top:left-value"
}

top:center

Type: ref:ContentPayload · Optional · Default:

top:center.json
{
  "top:center": "top:center-value"
}

top:right

Type: ref:ContentPayload · Optional · Default:

top:right.json
{
  "top:right": "top:right-value"
}

top:left+center

Type: ref:ContentPayload · Optional · Default:

top:left+center.json
{
  "top:left+center": "top:left+center-value"
}

top:center+right

Type: ref:ContentPayload · Optional · Default:

top:center+right.json
{
  "top:center+right": "top:center+right-value"
}

top:left+center+right

Type: ref:ContentPayload · Optional · Default:

top:left+center+right.json
{
  "top:left+center+right": "top:left+center+right-value"
}

middle:left

Type: ref:ContentPayload · Optional · Default:

middle:left.json
{
  "middle:left": "middle:left-value"
}

middle:center

Type: ref:ContentPayload · Optional · Default:

middle:center.json
{
  "middle:center": "middle:center-value"
}

middle:right

Type: ref:ContentPayload · Optional · Default:

middle:right.json
{
  "middle:right": "middle:right-value"
}

middle:left+center

Type: ref:ContentPayload · Optional · Default:

middle:left+center.json
{
  "middle:left+center": "middle:left+center-value"
}

middle:center+right

Type: ref:ContentPayload · Optional · Default:

middle:center+right.json
{
  "middle:center+right": "middle:center+right-value"
}

middle:left+center+right

Type: ref:ContentPayload · Optional · Default:

middle:left+center+right.json
{
  "middle:left+center+right": "middle:left+center+right-value"
}

bottom:left

Type: ref:ContentPayload · Optional · Default:

bottom:left.json
{
  "bottom:left": "bottom:left-value"
}

bottom:center

Type: ref:ContentPayload · Optional · Default:

bottom:center.json
{
  "bottom:center": "bottom:center-value"
}

bottom:right

Type: ref:ContentPayload · Optional · Default:

bottom:right.json
{
  "bottom:right": "bottom:right-value"
}

bottom:left+center

Type: ref:ContentPayload · Optional · Default:

bottom:left+center.json
{
  "bottom:left+center": "bottom:left+center-value"
}

bottom:center+right

Type: ref:ContentPayload · Optional · Default:

bottom:center+right.json
{
  "bottom:center+right": "bottom:center+right-value"
}

bottom:left+center+right

Type: ref:ContentPayload · Optional · Default:

bottom:left+center+right.json
{
  "bottom:left+center+right": "bottom:left+center+right-value"
}

top+middle:left

Type: ref:ContentPayload · Optional · Default:

top+middle:left.json
{
  "top+middle:left": "top+middle:left-value"
}

top+middle:center

Type: ref:ContentPayload · Optional · Default:

top+middle:center.json
{
  "top+middle:center": "top+middle:center-value"
}

top+middle:right

Type: ref:ContentPayload · Optional · Default:

top+middle:right.json
{
  "top+middle:right": "top+middle:right-value"
}

top+middle:left+center

Type: ref:ContentPayload · Optional · Default:

top+middle:left+center.json
{
  "top+middle:left+center": "top+middle:left+center-value"
}

top+middle:center+right

Type: ref:ContentPayload · Optional · Default:

top+middle:center+right.json
{
  "top+middle:center+right": "top+middle:center+right-value"
}

top+middle:left+center+right

Type: ref:ContentPayload · Optional · Default:

top+middle:left+center+right.json
{
  "top+middle:left+center+right": "top+middle:left+center+right-value"
}

middle+bottom:left

Type: ref:ContentPayload · Optional · Default:

middle+bottom:left.json
{
  "middle+bottom:left": "middle+bottom:left-value"
}

middle+bottom:center

Type: ref:ContentPayload · Optional · Default:

middle+bottom:center.json
{
  "middle+bottom:center": "middle+bottom:center-value"
}

middle+bottom:right

Type: ref:ContentPayload · Optional · Default:

middle+bottom:right.json
{
  "middle+bottom:right": "middle+bottom:right-value"
}

middle+bottom:left+center

Type: ref:ContentPayload · Optional · Default:

middle+bottom:left+center.json
{
  "middle+bottom:left+center": "middle+bottom:left+center-value"
}

middle+bottom:center+right

Type: ref:ContentPayload · Optional · Default:

middle+bottom:center+right.json
{
  "middle+bottom:center+right": "middle+bottom:center+right-value"
}

middle+bottom:left+center+right

Type: ref:ContentPayload · Optional · Default:

middle+bottom:left+center+right.json
{
  "middle+bottom:left+center+right": "middle+bottom:left+center+right-value"
}

top+middle+bottom:left

Type: ref:ContentPayload · Optional · Default:

top+middle+bottom:left.json
{
  "top+middle+bottom:left": "top+middle+bottom:left-value"
}

top+middle+bottom:center

Type: ref:ContentPayload · Optional · Default:

top+middle+bottom:center.json
{
  "top+middle+bottom:center": "top+middle+bottom:center-value"
}

top+middle+bottom:right

Type: ref:ContentPayload · Optional · Default:

top+middle+bottom:right.json
{
  "top+middle+bottom:right": "top+middle+bottom:right-value"
}

top+middle+bottom:left+center

Type: ref:ContentPayload · Optional · Default:

top+middle+bottom:left+center.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "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.json
{
  "section": "Intro"
}

hidden

Type: boolean · Optional · Default:

Whether the slide is hidden from the presented sequence.

hidden.json
{
  "hidden": true
}