# Google Slides

Google Slides is a cloud-based presentation editor with real-time collaboration, template gallery, and integration with other Google Workspace apps

- **Category:** documents
- **Auth:** OAUTH2
- **Composio Managed App Available?** Yes
- **Tools:** 9
- **Triggers:** 1
- **Slug:** `GOOGLESLIDES`
- **Version:** 20260309_00

## Frequently Asked Questions

### How do I set up custom Google OAuth credentials for Google Slides?

For a step-by-step guide on creating and configuring your own Google OAuth credentials with Composio, see [How to create OAuth2 credentials for Google Apps](https://composio.dev/auth/googleapps).

### Why am I seeing "App is blocked" when connecting Google Slides?

The OAuth client is requesting scopes that Google hasn't verified for that client. This usually happens when you add extra scopes beyond the defaults.

Remove the additional scopes from your auth config, or create your own OAuth app and submit the scopes for verification. See [How to create OAuth2 credentials for Google Apps](https://composio.dev/auth/googleapps).

### Why am I getting "Google Slides API has not been used in project" error?

When using custom OAuth credentials, the Google Slides API must be enabled in the Google Cloud project that owns those credentials. Enable it in Google Cloud Console under APIs & Services, wait a few minutes, and retry.

### Why am I getting "Error 400: invalid_scope"?

The requested scopes are invalid or incorrectly formatted in the authorization URL. Verify your scope values against the [Google OAuth scopes docs](https://developers.google.com/identity/protocols/oauth2). If you're creating auth configs programmatically, see the [programmatic auth config guide](/docs/auth-configuration/programmatic-auth-configs).

### Why does the OAuth consent screen show "Composio" instead of my app?

By default, the consent screen uses Composio's OAuth app. To show your own app name and logo, create your own OAuth app and set a custom redirect URL. See [White-labeling authentication](/docs/white-labeling-authentication#using-your-own-oauth-apps).

### Why am I getting 401 errors on tool calls?

The user's access token is no longer valid. Common causes: the user revoked access, changed their password or 2FA, a Workspace admin policy changed, or Google's refresh token limit (~50 per account) was exceeded. Re-authenticating the user typically resolves this.

### Why am I getting "Quota Exhausted" or "rate limit exhausted"?

Google enforces per-minute and daily request quotas. If you're using Composio's default OAuth app, you share that quota with other users, which can cause limits to be hit faster. Use your own OAuth app credentials to get a dedicated quota, and add exponential backoff and retries to handle transient rate limits.

---

## Tools

### Create Google Slides Presentation

**Slug:** `GOOGLESLIDES_CREATE_PRESENTATION`

Tool to create a blank Google Slides presentation. Use when you need to initialize a new presentation with a specific title, locale, or page size.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `title` | string | No | The title of the presentation. If omitted, the API uses a default title. |
| `locale` | string | No | The locale of the presentation, as an IETF BCP 47 language tag (e.g., 'en-US', 'fr-FR', 'ja-JP'). If omitted, the API uses a default locale. |
| `pageSize` | object | No | The size of a page in the presentation. |
| `presentationId` | string | No | The ID to use for the new presentation. If provided, it is used as the ID of the new presentation. Otherwise, a new ID is automatically generated. Must be a valid Google Drive/Slides ID format (long alphanumeric string). Note: Human-readable IDs (e.g., 'my-presentation') are not valid and will cause API errors. Only provide this if you have a valid Google Drive/Slides ID format; otherwise omit to let the API generate one. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Slides from Markdown

**Slug:** `GOOGLESLIDES_CREATE_SLIDES_MARKDOWN`

Creates a new Google Slides presentation from Markdown text. Automatically splits content into slides using '---' separators and applies appropriate templates based on content structure.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `title` | string | Yes | The title for the new Google Slides presentation. |
| `markdown_text` | string | Yes |              The content for the slides, formatted as Markdown. Creates professional, enterprise-ready presentations with intelligent auto-sizing, dynamic font scaling, and beautiful themes.                          ## THEME SELECTION             Add a theme line at the beginning of your markdown to apply professional backgrounds and colors:             - `Theme: default` - Clean white background (default)             - `Theme: corporate_blue` - Professional dark blue background with white text             - `Theme: modern_dark` - Sleek dark background with light text             - `Theme: professional_gray` - Light gray background with dark text             - `Theme: creative_purple` - Vibrant purple background for creative presentations             - `Theme: warm_orange` - Energetic orange background for dynamic presentations             - `Theme: forest_green` - Natural green background for environmental/growth topics             - `Theme: minimal_beige` - Subtle beige background for minimalist presentations                          Example: `Theme: corporate_blue` at the start of your markdown                          ## SLIDE SEPARATION             - Use '\n---\n' (on its own line) to separate slides             - Each slide auto-detects its type based on content                          ## SUPPORTED SLIDE TYPES & FEATURES             1. **Title Slide** (first slide): `# Title\nSubtitle text`             2. **Bullet Slides**: Use `•`, `-`, or `*` for bullets             3. **Table Slides**: Standard markdown tables with intelligent auto-sizing             4. **Quote Slides**: Use `> Quote text` for styled quotes               5. **Text Slides**: Regular paragraphs and content             6. **Image Slides**: `![description](URL)` - URLs must be publicly accessible and meet strict requirements             7. **Two-Column Slides**: Use `\|\|\|` on its own line to separate left/right content                          ## IMAGE REQUIREMENTS & BEST PRACTICES             **⚠️ CRITICAL: Google Slides has strict image requirements:**                          **✅ VERIFIED WORKING IMAGE SOURCES:**             - `https://www.google.com/images/branding/*` - Google official assets             - `https://github.githubassets.com/images/*` - GitHub official assets               - `https://images.unsplash.com/*` - Unsplash direct image links             - `https://raw.githubusercontent.com/*` - GitHub raw files (public repos)                          **❌ KNOWN BLOCKED SOURCES:**             - `https://via.placeholder.com/*` - Blocked by Google             - `https://picsum.photos/*` - Dynamic generation blocked             - `http://placekitten.com/*` - Dynamic generation blocked             - Any URL requiring authentication or redirects                          **📏 TECHNICAL REQUIREMENTS:**             - Must be **publicly accessible** (no login required)             - Must be **less than 50MB** in file size             - Cannot exceed **25 megapixels** in resolution             - Must be in **PNG, JPEG, or GIF** format only             - URL must be **no larger than 2kB** in length             - No dynamic image generation services                          **🎨 POSITIONING & SIZING:**             - Images automatically sized to 300x200 points             - Positioned at center-right of slide (160pt x, 120pt y)             - Maintains aspect ratio and professional appearance             - Works best with landscape-oriented images                          **💡 EXAMPLES OF WORKING IMAGE MARKDOWN:**             ```             ![Google Logo](https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png)             ![GitHub Mark](https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png)             ![Unsplash Photo](https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&h=600)             ```  ## DYNAMIC FONT SIZING The system automatically adjusts font sizes to prevent overflow and optimize readability:  **For Titles**:  - Short titles (< 30 chars): Large 28pt headers - Medium titles (30-60 chars): Standard 22pt headers   - Long titles (> 60 chars): Compact 18pt headers  **For Content**: - Short content (< 100 chars): Large 18pt text for impact - Medium content (100-300 chars): Standard 16pt for readability - Long content (300-600 chars): Compact 14pt for density - Very long content (> 600 chars): Small 12pt to prevent overflow  **For Tables**: - Small tables (< 200 chars): 14pt for clarity - Medium tables (200-500 chars): 12pt for balance - Large tables (> 500 chars): 10pt for dense data - Extreme tables (overflow detected): 8pt with aggressive sizing  ## FORMATTING FEATURES - **Bold text**: Use `**text**` for bold formatting in any content - **Smart auto-sizing**: Tables and text boxes resize based on content density - **Aggressive overflow prevention**: Iterative sizing down to 8pt ensures perfect fit - **Auto-centering**: Tables automatically center on slides for professional appearance - **Professional positioning**: Clean layouts with no placeholder text - **Emoji support**: Use emojis freely in titles and content - **Multi-line content**: Preserves line breaks and formatting  ## CONTENT DENSITY GUIDELINES - **For concise slides**: Use shorter text for larger, impactful fonts - **For detailed slides**: Longer content automatically gets smaller fonts - **For tables**: Smart column-width distribution based on content length - **For wide tables**: Tables with 7+ columns may be recommended for splitting - **For quotes**: Long quotes scale down to fit properly  ## BEST PRACTICES - Start with a title slide: `# Main Title\nSubtitle description` - For maximum readability: Keep content concise when possible - For dense information: Trust the auto-sizing to handle large content - Use descriptive but reasonably-sized headings - Mix content types for engaging presentations - Use consistent bullet styles within each slide  ## TECHNICAL NOTES - Font sizes range from 28pt (large titles) to 8pt (extreme tables) - Text boxes automatically resize based on estimated content lines - Tables use dynamic column widths, row heights, and auto-centering - Tables positioned higher on slides for improved visual balance - The system prevents text overflow while maintaining maximum readability  ## LIMITATIONS - Images must be publicly accessible URLs (no authentication required) - One primary content type per slide works best - Extremely large content may still need manual review - Complex nested formatting not supported  ## TECHNICAL NOTES - Uses BLANK layouts for complete control over positioning - Automatically handles Google Slides placeholder removal - Generates optimized API requests for performance - Supports enterprise-scale content generation          |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Page Thumbnail v2

**Slug:** `GOOGLESLIDES_GET_PAGE_THUMBNAIL2`

Tool to generate a thumbnail of the latest version of a specified page. Use when you need a preview image URL for a slide page. This request counts as an expensive read request for quota purposes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `pageObjectId` | string | Yes | The object ID of the page whose thumbnail to retrieve. |
| `presentationId` | string | Yes | The ID of the presentation to retrieve. |
| `thumbnailProperties.mimeType` | string | No | The optional mime type of the thumbnail image. Defaults to PNG if not specified. |
| `thumbnailProperties.thumbnailSize` | string ("THUMBNAIL_SIZE_UNSPECIFIED" | "LARGE" | "MEDIUM" | "SMALL") | No | The optional thumbnail image size. LARGE = 1600px, MEDIUM = 800px, SMALL = 200px. Defaults to LARGE if not specified. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Presentation (Batch/Markdown)

**Slug:** `GOOGLESLIDES_PRESENTATIONS_BATCH_UPDATE`

Update Google Slides presentations using markdown content or raw API text. Supports professional themes, auto-formatting, and multiple slide types (title, bullet, table, quote, image, two-column).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `requests` | array | No | List of update requests, each a dict with one of these valid Slides API request types:  **Common requests:** - createSlide - Add new slides - createShape - Insert shapes - createTable - Add tables - createImage - Embed images - insertText - Insert text content - updateTextStyle - Format text - updateShapeProperties - Modify shape styling - updatePageProperties - Modify page/slide settings (backgrounds, color schemes) - updateParagraphStyle - Modify paragraph formatting - deleteObject - Remove page elements - updateTableCellProperties - Format table cells - updateTableColumnProperties - Adjust column properties - replaceAllText - Find and replace text  **Other requests:** createVideo, createSheetsChart, createLine, insertTableRows, insertTableColumns, deleteTableRow, deleteTableColumn, updatePageElementTransform, updateSlidesPosition, deleteText, refreshSheetsChart, updateImageProperties, updateVideoProperties, updateLineProperties, createParagraphBullets, replaceAllShapesWithImage, duplicateObject, replaceAllShapesWithSheetsChart, deleteParagraphBullets, updateTableBorderProperties, updateTableRowProperties, mergeTableCells, unmergeTableCells, groupObjects, ungroupObjects, updatePageElementAltText, replaceImage, updateSlideProperties, updatePageElementsZOrder, updateLineCategory, rerouteLine  **IMPORTANT:** To update slide backgrounds, use `updatePageProperties` (NOT `updateSlideProperties`). The field `pageBackgroundFill` exists in PageProperties, not SlideProperties.  Required if markdown_text is not provided. |
| `writeControl` | object | No | Options that control how write requests are executed. |
| `markdown_text` | string | No |  Optional markdown content to add as new slides to the presentation. Creates professional, enterprise-ready slides with intelligent auto-sizing and dynamic font scaling.  ## SLIDE SEPARATION - Use '\n---\n' (on its own line) to separate slides - Each slide auto-detects its type based on content  ## SUPPORTED SLIDE TYPES & FEATURES 1. **Title Slide** (first slide): `# Title\nSubtitle text` 2. **Bullet Slides**: Use `•`, `-`, or `*` for bullets 3. **Table Slides**: Standard markdown tables with intelligent auto-sizing 4. **Quote Slides**: Use `> Quote text` for styled quotes   5. **Text Slides**: Regular paragraphs and content 6. **Image Slides**: `![description](URL)` - URLs must be publicly accessible 7. **Two-Column Slides**: Use `\|\|\|` on its own line to separate left/right content  ## THEME SELECTION Add a theme line at the beginning of your markdown to apply professional backgrounds and colors: - `Theme: default` - Clean white background (default) - `Theme: corporate_blue` - Professional dark blue background with white text - `Theme: modern_dark` - Sleek dark gradient with light text - `Theme: professional_gray` - Elegant gray gradient - `Theme: creative_purple` - Vibrant purple gradient for creative presentations - `Theme: warm_orange` - Energetic orange gradient for dynamic presentations - `Theme: forest_green` - Natural green gradient for environmental/growth topics - `Theme: minimal_beige` - Subtle beige for minimalist presentations  ## DYNAMIC FONT SIZING (Notion-like Hierarchy) The system automatically adjusts font sizes to prevent overflow and optimize readability:  **For Titles**:  - Short titles (< 30 chars): Large 28pt headers - Medium titles (30-60 chars): Standard 22pt headers   - Long titles (> 60 chars): Compact 18pt headers  **For Content**: - Short content (< 100 chars): Large 18pt text for impact - Medium content (100-300 chars): Standard 16pt for readability - Long content (300-600 chars): Compact 14pt for density - Very long content (> 600 chars): Small 12pt to prevent overflow  **For Tables**: - Small tables (< 200 chars): 14pt for clarity - Medium tables (200-500 chars): 12pt for balance - Large tables (> 500 chars): 10pt for dense data - Extreme tables (overflow detected): 8pt with aggressive sizing  ## FORMATTING FEATURES - **Bold text**: Use `**text**` for bold formatting in any content - **Smart auto-sizing**: Tables and text boxes resize based on content density - **Aggressive overflow prevention**: Iterative sizing down to 8pt ensures perfect fit - **Auto-centering**: Tables automatically center on slides for professional appearance - **Professional positioning**: Clean layouts with no placeholder text - **Emoji support**: Use emojis freely in titles and content - **Multi-line content**: Preserves line breaks and formatting  ## CONTENT DENSITY GUIDELINES - **For concise slides**: Use shorter text for larger, impactful fonts - **For detailed slides**: Longer content automatically gets smaller fonts - **For tables**: Smart column-width distribution based on content length - **For wide tables**: Tables with 7+ columns may be recommended for splitting - **For quotes**: Long quotes scale down to fit properly  ## BEST PRACTICES - Start with a title slide: `# Main Title\nSubtitle description` - For maximum readability: Keep content concise when possible - For dense information: Trust the auto-sizing to handle large content - Use descriptive but reasonably-sized headings - Mix content types for engaging presentations - Use consistent bullet styles within each slide  ## TECHNICAL NOTES - Font sizes range from 28pt (large titles) to 8pt (extreme tables) - Text boxes automatically resize based on estimated content lines - Tables use dynamic column widths, row heights, and auto-centering - Tables positioned higher on slides for improved visual balance - The system prevents text overflow while maintaining maximum readability  ## LIMITATIONS - Images must be publicly accessible URLs (no authentication required) - One primary content type per slide works best - Extremely large content may still need manual review - Complex nested formatting not supported  ## EXAMPLES ```markdown Theme: corporate_blue  # Welcome to Our Company **Professional presentation** with branded themes  ---  # Key Features • **Dynamic sizing** - Content auto-fits perfectly • **Multiple themes** - Professional color schemes • **Smart tables** - Auto-sizing with overflow protection  ---  # Performance Data \| Metric \| Q1 \| Q2 \| Q3 \| \|--------\|----\|----\|----\|  \| Revenue \| $1.2M \| $1.5M \| $1.8M \| \| Growth \| 15% \| 25% \| 20% \| ```  |
| `presentationId` | string | Yes | The ID of the presentation to apply the updates to. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Copy Google Slides from Template

**Slug:** `GOOGLESLIDES_PRESENTATIONS_COPY_FROM_TEMPLATE`

Tool to create a new Google Slides presentation by duplicating an existing template deck via Drive file copy. Use when you need to preserve themes, masters, and layouts exactly as they appear in the template. After copying, use GOOGLESLIDES_PRESENTATIONS_BATCH_UPDATE to replace placeholder text or images.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `new_title` | string | No | The name/title for the copied presentation. If omitted, a default name like 'Copy of [original]' is used. |
| `parent_folder_id` | string | No | The ID of the destination folder in Google Drive. If provided, the copied presentation will be placed in this folder. If omitted, the copy is placed in the user's root folder. |
| `template_presentation_id` | string | Yes | The Drive file ID of the Slides template to copy. This is the presentationId of the existing deck you want to duplicate. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Presentation

**Slug:** `GOOGLESLIDES_PRESENTATIONS_GET`

Tool to retrieve the latest version of a presentation. Use after obtaining the presentation ID.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `fields` | string | No | Comma-separated selector specifying which fields to include in a partial response. Nested fields use parentheses that must be properly balanced (equal number of opening and closing parentheses). Examples: 'presentationId,title', 'slides(pageElements)', 'slides(objectId,pageElements(objectId,shape(text(textElements(textRun(content))))))' |
| `presentationId` | string | No | The ID of the presentation to retrieve. Either presentation_id or presentation_name must be provided. |
| `presentationName` | string | No | The name of the presentation to search for and retrieve. If provided, the action will search Google Drive for a presentation with this name. Either presentation_id or presentation_name must be provided. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Presentation Page

**Slug:** `GOOGLESLIDES_PRESENTATIONS_PAGES_GET`

Tool to get the latest version of a specific page in a presentation. Use when you need to inspect slide, layout, master, or notes page details.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `pageObjectId` | string | Yes | The object ID of the page to retrieve. |
| `presentationId` | string | Yes | The ID of the presentation from which to fetch the page. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Page Thumbnail (Deprecated)

**Slug:** `GOOGLESLIDES_PRESENTATIONS_PAGES_GET_THUMBNAIL`

DEPRECATED: Use GOOGLESLIDES_GET_PAGE_THUMBNAIL2 instead. Tool to generate and return a thumbnail image URL for a specific page. Use when you need a quick preview of a slide page after loading it.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `pageObjectId` | string | Yes | The object ID of the page whose thumbnail to retrieve. |
| `presentationId` | string | Yes | The ID of the presentation containing the page. |
| `thumbnailProperties.mimeType` | string | No | Optional thumbnail image MIME type. Currently only 'PNG' is supported by the API. Defaults to 'PNG' if omitted. |
| `thumbnailProperties.thumbnailSize` | string ("THUMBNAIL_SIZE_UNSPECIFIED" | "LARGE" | "MEDIUM" | "SMALL") | No | Optional thumbnail size. One of 'LARGE', 'MEDIUM', 'SMALL', or 'THUMBNAIL_SIZE_UNSPECIFIED'. Defaults to 'LARGE' if omitted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | object | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |


## Triggers

### New Slide Added

**Slug:** `GOOGLESLIDES_SLIDE_ADDED_TRIGGER`

**Type:** poll

Fires when a new slide is added to a Google Slides presentation.

#### Configuration

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `interval` | number | No | Periodic Interval to Check for Updates & Send a Trigger in Minutes |
| `presentation_id` | string | Yes | The ID of the presentation to monitor for new slides |

#### Payload

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `event_type` | string | No | Type of slide event |
| `slide` | object | Yes | The slide object that was added |
