{}OPF
DocsObject referenceView source

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

Field index

FieldTypeReq.Description
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.
compositionref:Composition
extensionsobjectCustom data passthrough for agent workflows at slide scope; ignored by the engine but preserved across read/write round-trips. Use for review state, generation provenance, or authoring conventions such as { "authoring": { "locked": true } }.

id

typestringrequirednodefault

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

typeenumrequirednodefault

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

type.json
{
  "type": "text"
}

beat

typestring | array<string>requirednodefault

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

typestringrequirednodefault

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

typestringrequirednodefault

Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there.

title.json
{
  "title": "Quarterly Review"
}

subtitle

typestringrequirednodefault

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

typestringrequirednodefault

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

typestring | array<ref:TextRun>requirednodefault

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

typearray<ref:ListItem>requirednodefault

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

typearray<ref:BulletItem>requirednodefault

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

bullets.json
{
  "bullets": []
}

image

typeref:Assetrequirednodefault

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

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

video

typeref:Assetrequirednodefault

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

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

chart

typeref:Chartrequirednodefault

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

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

table

typeref:Tablerequirednodefault

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

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

code

typestring | ref:Coderequirednodefault

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

typestring | number | ref:Metricrequirednodefault

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

typestring | ref:Quoterequirednodefault

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

typeref:Timelinerequirednodefault

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

typearray<ref:ContentPayload>requirednodefault

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

typeref:Designrequirednodefault

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

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

left

typeref:ContentPayloadrequirednodefault

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

center

typeref:ContentPayloadrequirednodefault

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

left+center

typeref:ContentPayloadrequirednodefault

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

center+right

typeref:ContentPayloadrequirednodefault

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

left+center+right

typeref:ContentPayloadrequirednodefault

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

top

typeref:ContentPayloadrequirednodefault

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

middle

typeref:ContentPayloadrequirednodefault

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

bottom

typeref:ContentPayloadrequirednodefault

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

top+middle

typeref:ContentPayloadrequirednodefault

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

middle+bottom

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom

typeref:ContentPayloadrequirednodefault

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

top:left

typeref:ContentPayloadrequirednodefault

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

top:center

typeref:ContentPayloadrequirednodefault

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

top:right

typeref:ContentPayloadrequirednodefault

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

top:left+center

typeref:ContentPayloadrequirednodefault

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

top:center+right

typeref:ContentPayloadrequirednodefault

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

top:left+center+right

typeref:ContentPayloadrequirednodefault

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

middle:left

typeref:ContentPayloadrequirednodefault

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

middle:center

typeref:ContentPayloadrequirednodefault

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

middle:right

typeref:ContentPayloadrequirednodefault

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

middle:left+center

typeref:ContentPayloadrequirednodefault

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

middle:center+right

typeref:ContentPayloadrequirednodefault

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

middle:left+center+right

typeref:ContentPayloadrequirednodefault

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

bottom:left

typeref:ContentPayloadrequirednodefault

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

bottom:center

typeref:ContentPayloadrequirednodefault

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

bottom:right

typeref:ContentPayloadrequirednodefault

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

bottom:left+center

typeref:ContentPayloadrequirednodefault

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

bottom:center+right

typeref:ContentPayloadrequirednodefault

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

bottom:left+center+right

typeref:ContentPayloadrequirednodefault

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

top+middle:left

typeref:ContentPayloadrequirednodefault

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

top+middle:center

typeref:ContentPayloadrequirednodefault

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

top+middle:right

typeref:ContentPayloadrequirednodefault

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

top+middle:left+center

typeref:ContentPayloadrequirednodefault

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

top+middle:center+right

typeref:ContentPayloadrequirednodefault

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

top+middle:left+center+right

typeref:ContentPayloadrequirednodefault

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

middle+bottom:left

typeref:ContentPayloadrequirednodefault

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

middle+bottom:center

typeref:ContentPayloadrequirednodefault

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

middle+bottom:right

typeref:ContentPayloadrequirednodefault

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

middle+bottom:left+center

typeref:ContentPayloadrequirednodefault

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

middle+bottom:center+right

typeref:ContentPayloadrequirednodefault

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

middle+bottom:left+center+right

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:left

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:center

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:right

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:left+center

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:center+right

typeref:ContentPayloadrequirednodefault

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

top+middle+bottom:left+center+right

typeref:ContentPayloadrequirednodefault

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

notes

typestringrequirednodefault

Speaker notes shown in presenter view.

notes.json
{
  "notes": "Open with the customer story; pause for questions before moving to the architecture slide."
}

section

typestringrequirednodefault

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

typebooleanrequirednodefault

Whether the slide is hidden from the presented sequence.

hidden.json
{
  "hidden": true
}

composition

typeref:Compositionrequirednodefault

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

extensions

typeobjectrequirednodefault

Custom data passthrough for agent workflows at slide scope; ignored by the engine but preserved across read/write round-trips. Use for review state, generation provenance, or authoring conventions such as { "authoring": { "locked": true } }.

extensions.json
{
  "extensions": {}
}