---
title: slides
description: Read and create presentations and call the Slides API.
canonical_url: https://orchestor.io/docs/en/cli/slides
markdown_url: https://orchestor.io/docs/en/cli/slides.md
contentType: reference
---

# slides

`orc slides` selects a slides backend with `--target CONNECTION_ID`. Google Workspace is the currently supported backend. The connection ID is a flag.

`get` returns the presentations.get response; `create` accepts `--title`. `api get` and `api update` call read and write methods from the pinned Discovery document. `batch-requests create` validates exactly one Request key per object. `schemas list/get` inspect methods, Request types, and schemas without a connection.

Reconnect existing Workspace connections to grant Slides scopes. Writes require manage access. `--readonly` blocks writes; `--wrap-untrusted` wraps external text. After a timeout, read the presentation before retrying a write.

`exports get PRESENTATION_ID --format pdf|pptx --output FILE` saves PDF or PowerPoint (Drive export, maximum 10 MB). The `drive.file` grant covers files created by the app or explicitly opened with it through Picker or a similar app file picker. User ownership alone is insufficient; sharing with the account or reconnecting does not itself grant app access to every existing file. Inaccessible files return CONFLICT with share/reconnect guidance. Orchestor does not request the restricted drive or drive.readonly scopes.

`thumbnails get PRESENTATION_ID PAGE_ID [--size SMALL|MEDIUM|LARGE]` returns `content_url`, `width`, and `height`. With `--output FILE`, the CLI downloads the PNG. The URL normally lasts 30 minutes; anyone with it can access the image. Both commands work with `--readonly`.

`create --markdown FILE` creates a deck from Slidev Markdown; `update PRESENTATION_ID --markdown FILE` replaces every slide. FILE is a UTF-8 file path, or `-` for raw stdin. API clients send the content in markdown. Headmatter title names the presentation. Creating with only `--title` remains supported. Titles, body text, notes, and hide are converted. Unsupported features use safe plain text fallbacks and appear in report with a zero-based slide_index.

`get PRESENTATION_ID --format markdown [--output deck.md]` converts an existing presentation to Slidev Markdown. It retains titles, body text, lists, tables, image URLs, speaker notes and skipped slides, and reads hand-added text in position order. The API returns `{ markdown, report }`. Layout aliases normalize to cover or center where Google cannot distinguish them. Unsupported shapes, videos, charts and other elements appear in report, as do expiring contentUrl references. Images prefer sourceUrl.

## Usage

```bash title="terminal"
orc slides get PRESENTATION_ID --target CONNECTION_ID --workspace WORKSPACE_ID --wrap-untrusted --json
```

*Get a presentation*

```bash title="terminal"
orc slides create --target CONNECTION_ID --title "Weekly review" --workspace WORKSPACE_ID --json
```

*Create a presentation*

## Subcommands

### `get`

Get a presentation

```bash title="terminal"
orc slides get <presentation-id> [options]
```

#### Unique options

##### `--target`

Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Required.

```bash title="terminal"
orc slides get <presentation-id> --target <value>
```

### `create`

Create a presentation

```bash title="terminal"
orc slides create [options]
```

#### Unique options

##### `--markdown`

Path to a UTF-8 file, or - for stdin. Slidev Markdown content. CLI: path to a UTF-8 file, or - for stdin.; max 1000000 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides create --markdown <value>
```

##### `--target`

(required) Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides create --target <value>
```

##### `--title`

Body field: title; max 500 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides create --title <value>
```

### `api get`

Call a read-only Slides API method

```bash title="terminal"
orc slides api get [options]
```

#### Unique options

##### `--method`

(required) Read-only Discovery method ID, for example presentations.pages.get.; enum: presentations.get|presentations.pages.get|presentations.pages.getThumbnail

Type: `string`. Optional.

```bash title="terminal"
orc slides api get --method <value>
```

##### `--params`

Path and query parameters by Discovery name, for example {"presentationId":"…","pageObjectId":"…"}. Run `orc slides schemas get <method>` for parameters.; (JSON object, e.g. '{"custom_id":"x"}')

Type: `string`. Optional.

```bash title="terminal"
orc slides api get --params <value>
```

##### `--target`

(required) Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides api get --target <value>
```

### `api update`

Call a mutating Slides API method

```bash title="terminal"
orc slides api update [options]
```

#### Unique options

##### `--body`

Request body in the Discovery request schema.; (JSON object, e.g. '{"custom_id":"x"}')

Type: `string`. Optional.

```bash title="terminal"
orc slides api update --body <value>
```

##### `--method`

(required) Mutating Discovery method ID, for example presentations.batchUpdate.; enum: presentations.batchUpdate|presentations.create

Type: `string`. Optional.

```bash title="terminal"
orc slides api update --method <value>
```

##### `--params`

Path and query parameters by Discovery name, for example {"presentationId":"…","pageObjectId":"…"}. Run `orc slides schemas get <method>` for parameters.; (JSON object, e.g. '{"custom_id":"x"}')

Type: `string`. Optional.

```bash title="terminal"
orc slides api update --params <value>
```

##### `--target`

(required) Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides api update --target <value>
```

### `batch-requests create`

Apply Slides batchUpdate requests

```bash title="terminal"
orc slides batch-requests create <presentation-id> [options]
```

#### Unique options

##### `--requests`

(required) batchUpdate requests, each with exactly one Request key, for example {"createSlide":{…}}. Run `orc slides schemas list` for types.; JSON array of objects (use --stdin for large resources)

Type: `string`. Optional.

```bash title="terminal"
orc slides batch-requests create <presentation-id> --requests <value>
```

##### `--target`

(required) Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides batch-requests create <presentation-id> --target <value>
```

##### `--write-control`

Slides WriteControl, for example {"requiredRevisionId":"…"}.; (JSON object, e.g. '{"custom_id":"x"}')

Type: `string`. Optional.

```bash title="terminal"
orc slides batch-requests create <presentation-id> --write-control <value>
```

### `schemas list`

List Slides API methods and request types

```bash title="terminal"
orc slides schemas list [options]
```

### `schemas get`

Get a Slides API schema

```bash title="terminal"
orc slides schemas get <name> [options]
```

### `exports get`

Export a presentation

```bash title="terminal"
orc slides exports get <presentation-id> [options]
```

#### Unique options

##### `--target`

Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Required.

```bash title="terminal"
orc slides exports get <presentation-id> --target <value>
```

### `thumbnails get`

Get a slide thumbnail

```bash title="terminal"
orc slides thumbnails get <presentation-id> <page-id> [options]
```

#### Unique options

##### `--target`

Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Required.

```bash title="terminal"
orc slides thumbnails get <presentation-id> <page-id> --target <value>
```

##### `--size`

Thumbnail width: SMALL 200px, MEDIUM 800px, LARGE 1600px. Google chooses the default when omitted.; enum: SMALL|MEDIUM|LARGE

Type: `string`. Optional.

```bash title="terminal"
orc slides thumbnails get <presentation-id> <page-id> --size <value>
```

### `update`

Replace all slides from Slidev Markdown

```bash title="terminal"
orc slides update <presentation-id> [options]
```

#### Unique options

##### `--markdown`

(required) Path to a UTF-8 file, or - for stdin. Slidev Markdown content. CLI: path to a UTF-8 file, or - for stdin.; max 1000000 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides update <presentation-id> --markdown <value>
```

##### `--target`

(required) Connection ID of the slides backend (currently a google-workspace connection); max 200 chars

Type: `string`. Optional.

```bash title="terminal"
orc slides update <presentation-id> --target <value>
```

## Examples

### Inspect a method schema

```bash title="terminal"
orc slides schemas get presentations.pages.get --workspace WORKSPACE_ID --json
```

*Inspect a method schema*

### Read a page

```bash title="terminal"
orc slides api get --target CONNECTION_ID --method presentations.pages.get --params '{"presentationId":"PRESENTATION_ID","pageObjectId":"PAGE_ID"}' --workspace WORKSPACE_ID --readonly --json
```

*Read a page*

### Apply batch requests

```bash title="terminal"
orc slides batch-requests create PRESENTATION_ID --target CONNECTION_ID --requests '[{"createSlide":{"objectId":"slide_1"}}]' --workspace WORKSPACE_ID --dry-run
```

*Apply batch requests*

### Export PDF

```bash title="terminal"
orc slides exports get PRESENTATION_ID --target CONNECTION_ID --format pdf --output deck.pdf --workspace WORKSPACE_ID --readonly
```

*Export PDF*

### Export PowerPoint

```bash title="terminal"
orc slides exports get PRESENTATION_ID --target CONNECTION_ID --format pptx --output deck.pptx --workspace WORKSPACE_ID --readonly
```

*Export PowerPoint*

### Save a slide thumbnail

```bash title="terminal"
orc slides thumbnails get PRESENTATION_ID PAGE_ID --target CONNECTION_ID --size LARGE --output slide.png --workspace WORKSPACE_ID --readonly
```

*Save a slide thumbnail*

### Create from Markdown

```bash title="terminal"
orc slides create --target CONNECTION_ID --markdown deck.md --workspace WORKSPACE_ID --dry-run --json
```

*Create from Markdown*

### Replace all slides from stdin

```bash title="terminal"
cat deck.md | orc slides update PRESENTATION_ID --target CONNECTION_ID --markdown - --workspace WORKSPACE_ID --json
```

*Replace all slides from stdin*

### Read as Slidev Markdown

```bash title="terminal"
orc slides get --target CONNECTION_ID PRESENTATION_ID --format markdown --output deck.md --workspace WORKSPACE_ID --readonly
```

*Read as Slidev Markdown*

## Markdown and dry run

For Markdown, `--dry-run` sends dry_run: true to the API and performs no Google writes. Create does not call Google; update reads the existing slide IDs and revision. The response includes presentation_id (null for create), slide_count, requests (Phase 1), notes (slide_object_id and text), and report. Update also returns write_control.requiredRevisionId. Notes are deferred text, not requests, because their object IDs exist only after slide creation. Real execution writes slides in Phase 1, then only when notes exist reads their IDs and a fresh revision and writes all notes in Phase 2. A notes failure reports that slides were already written. Re-run update to replace the slides and retry notes.

## Markdown elements and layouts

Lists become native bullets or numbering, including nesting. Each top-level list uses one preset throughout; mixed nested list types use the top-level style and add a lists report entry. Tables become editable tables with a bold header row. Bold, italic, inline code (Courier New), and links become text styles, with UTF-16 ranges. Markdown images and frontmatter `image:` accept absolute HTTPS URLs; Google fetches them, and Orchestor never downloads or uploads them. `background:` sets a stretched page image. Relative, data:, and HTTP sources appear in report; other content still converts. Mermaid, KaTeX, code blocks, v-click, components, and unknown options keep report entries. Ordinary code blocks remain editable monospaced text.

| Slidev layout | Google layout | Content mapping |
| --- | --- | --- |
| cover, intro | TITLE | Title and subtitle |
| default | TITLE_AND_BODY | Title and body |
| section | SECTION_HEADER | Title; body content uses TITLE_AND_BODY and reports the fallback |
| center, end | TITLE_ONLY | Title; body content uses TITLE_AND_BODY and reports the fallback |
| two-cols | TITLE_AND_TWO_COLUMNS | Heading as title; default slot and ::left:: in BODY index 0; ::right:: in BODY index 1 |
| two-cols-header | TITLE_AND_TWO_COLUMNS | Heading and default slot text in title; ::left:: in BODY index 0; ::right:: in BODY index 1. Default-slot tables and images go in the left column |
| image-left, image-right | TITLE_AND_BODY | Frontmatter image in the named half; body placeholder replaced with sized text boxes in the opposite half; title above |
| image | BLANK | Full-page frontmatter image; any Markdown content is overlaid |
| full | BLANK | Title and body in one full-page text box; tables and images remain separate native elements |

Image placement uses a 16:9 page (9,144,000 × 5,143,500 EMU). Mixed text, tables, and Markdown images stack within each body or column; the body placeholder is replaced with explicitly sized native elements when needed. HTTPS images must be accessible to Google. createImage preserves aspect ratio; background images stretch.

## Permissions

Requires a Workspace and connector:backend-execute. Schema commands need no connection.

## Global Options

The following [global options](https://orchestor.io/docs/cli/global-flags.md) can be used with `orc slides`:

- [`--help`](https://orchestor.io/docs/cli/global-flags.md#help)
- [`--workspace`](https://orchestor.io/docs/cli/global-flags.md#workspace)
- [`--json`](https://orchestor.io/docs/cli/global-flags.md#json-output)
- [`--pretty`](https://orchestor.io/docs/cli/global-flags.md#json-output)
- [`--format`](https://orchestor.io/docs/cli/global-flags.md#output-format)
- [`--field`](https://orchestor.io/docs/cli/global-flags.md#field-selection)
- [`--fields`](https://orchestor.io/docs/cli/global-flags.md#field-selection)
- [`--raw`](https://orchestor.io/docs/cli/global-flags.md#raw-output)
- [`--output`](https://orchestor.io/docs/cli/global-flags.md#file-output)
- [`--no-pager`](https://orchestor.io/docs/cli/global-flags.md#pager)
- [`--dry-run`](https://orchestor.io/docs/cli/global-flags.md#dry-run)
- [`--yes`](https://orchestor.io/docs/cli/global-flags.md#confirmation)
- [`--stdin`](https://orchestor.io/docs/cli/global-flags.md#standard-input)
- [`--from-stdin`](https://orchestor.io/docs/cli/global-flags.md#standard-input)
- [`--page-all`](https://orchestor.io/docs/cli/global-flags.md#all-pages)
- [`--timing`](https://orchestor.io/docs/cli/global-flags.md#request-timing)
- [`--readonly`](https://orchestor.io/docs/cli/global-flags.md#read-only-mode)
- [`--wrap-untrusted`](https://orchestor.io/docs/cli/global-flags.md#untrusted-content-wrapping)

For details and examples, see [global options](https://orchestor.io/docs/cli/global-flags.md).

---

[Documentation index](https://orchestor.io/docs/llms.txt)
