> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsair.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Slides plugin

> Presentation editor for building and sharing slide decks, with slides, text, shapes, images, tables and speaker notes.

Use **Google Slides** through Corsair: one client, typed API calls, local DB sync.

Google Slides exposes presentation creation, slide creation and ordering, text editing and styling, bullet lists, speaker notes, shapes, images, tables, element transforms and grouping, plus PDF or PPTX export.

Scopes. The plugin requests `presentations` for slide content and `drive` for listing, copying, exporting and deleting a file, which are Drive calls.

Ids. `presentations.list` returns `presentationId` per file. `slides.list` returns each slide's `objectId`, and `slides.get` returns its `pageElements`. Text and element writes take the `objectId` of a shape or table, not a slide.

Placeholders. A slide created from a layout has placeholder shapes whose ids Google generates. Read the slide back to get them, or pass `placeholderIdMappings` through `batch.update` to choose ids up front.

Speaker notes. `slides.setNotes` reads the slide first to find the notes shape, deletes the existing text, then inserts the new text. A slide whose notes shape has never been created has no id for Google to write to, so the call explains that instead of guessing.

Text ranges. A range takes `type: 'ALL'`, `FROM_START_INDEX` with `startIndex`, or `FIXED_RANGE` with both indexes. Indexes are Unicode code units counted from the start of the shape's text, and Google appends a newline the caller did not type.

Destructive operations. `presentations.delete`, `slides.remove`, `text.delete` and `batch.update` are marked destructive for Corsair permissions. In `text.updateStyle`, a property named in `fields` but absent from `style` is reset to its default.

Rate limits. Google answers a quota burst with 429, or with a 403 whose body says `rateLimitExceeded`. Both are retried up to four times, waiting for `Retry-After` when present and sixty seconds otherwise, so a call can wait several minutes before it gives up. An exhausted daily quota is not retried, because no wait inside the request can clear it.

Raw requests. `batch.update` takes the `batchUpdate` request types without a typed endpoint, such as `mergeTableCells` or `updateParagraphStyle`. Deletions are refused there; use the typed operation.

Webhooks. Google Slides sends no push notifications, so the plugin has none.

**What you get:**

* 31 typed API operations
* 1 synced entity (`presentations`) for fast `.search()` / `.list()`

## Setup

**1. Install**

```bash npm theme={null}
npm install corsair @corsair-dev/googleslides better-sqlite3
npm install --save-dev @types/better-sqlite3
```

```bash yarn theme={null}
yarn add corsair @corsair-dev/googleslides better-sqlite3
yarn add --dev @types/better-sqlite3
```

```bash pnpm theme={null}
pnpm install corsair @corsair-dev/googleslides better-sqlite3
pnpm install --save-dev @types/better-sqlite3
```

```bash bun theme={null}
bun add corsair @corsair-dev/googleslides better-sqlite3
bun add --dev @types/better-sqlite3
```

**2. Add the plugin**

```ts corsair.ts theme={null}
import Database from 'better-sqlite3';
import { createCorsair } from 'corsair';
import { googleslides } from '@corsair-dev/googleslides';

export const corsair = createCorsair({
	plugins: [
		googleslides(),
	],
	database: new Database('corsair.db'),
	kek: process.env.CORSAIR_KEK!,
	multiTenancy: true,
	hub: {
		projectApiKey: process.env.CORSAIR_API_KEY!,
		signingSecret: process.env.CORSAIR_SIGNING_SECRET!,
	},
});
```

With `multiTenancy: true`, scope calls with `corsair.withTenant(id)`. See [Quick start](https://docs.corsair.dev/quick-start.md) for KEK + Hub keys, and [Multi-tenancy](https://docs.corsair.dev/concepts/multi-tenancy.md) for account isolation.

**3. Choose authentication**

> [tab] OAuth 2.0 (Recommended)
>
> Open [hub.corsair.dev](https://hub.corsair.dev/dashboard), navigate to your project, and enter the **client ID** and **client secret** from your Google Slides OAuth app.
>
> ```ts theme={null}
> googleslides()
> ```
>
> More: [OAuth 2.0](https://docs.corsair.dev/concepts/oauth)

**4. Connect a tenant**

Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see [Connect / OAuth](https://docs.corsair.dev/management/connect).

```ts theme={null}
const { connectUrl } = await corsair.manage.connect.createLink({
	plugin: 'googleslides',
	tenantId: 'acme',
});
// redirect the user's browser to connectUrl
```

## Example API calls

**List the slides in a presentation**

```ts theme={null}
const tenant = corsair.withTenant('acme');
await tenant.googleslides.api.slides.list({ presentationId: '1AbCdEfGhIjKlMnOpQrStUvWxYz' });
```

**Fill a shape with text**

```ts theme={null}
const tenant = corsair.withTenant('acme');
await tenant.googleslides.api.text.insert({ presentationId: '1AbCdEfGhIjKlMnOpQrStUvWxYz', objectId: 'title_box', text: 'Quarterly review' });
```

See the full list on the [API](https://docs.corsair.dev/plugins/googleslides/api.md) page.

## Query synced data

Synced entities support `tenant.googleslides.db.<entity>.search()` and `.list()`: `presentations`.

See [Database](https://docs.corsair.dev/plugins/googleslides/database.md) for filters and operators.

## What's next

> [card] [API reference](https://docs.corsair.dev/plugins/googleslides/api.md)
>
> Every `googleslides.api.*` operation with input and output types.

> [card] [Database](https://docs.corsair.dev/plugins/googleslides/database.md)
>
> Synced entities, search filters, and operators.

> [card] [Connect / OAuth](https://docs.corsair.dev/management/connect)
>
> createLink, Hub delivery, and tenant connect flows.

> [card] [Use with agents](https://docs.corsair.dev/mcp-adapters/mcp-adapters)
>
> Expose this plugin's operations as MCP tools.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.