Google Docs Connector: Google Docs: create, edit, format documents. Tables, images, headers, page breaks. Export to PDF/DOCX/HTML. Share and manage permissions. Use when an agent needs google docs connector, document automation, report generation, template creation, collaborative editing, batch update, document id, requests through AgentPMT-hosted remote tool calls. Discovery terms: google docs connector, document automation, report generation, template creation, collaborative editing.
设计与多媒体
Google Slides
试用通过托管 OAuth 代理,使用 Slides API 创建和管理 Google Slides 演示文稿。
它能做什么
通过 Google Slides API 创建和修改演示文稿。支持新建演示文稿、使用预定义版式添加幻灯片、插入文本和图片、创建图形、应用文本样式,以及通过 batchUpdate 替换模板占位符。所有请求都经过 Maton API 代理转发,OAuth 令牌由代理自动注入。需要配置 MATON_API_KEY 环境变量,并通过 api.maton.ai 管理已激活的 Google Slides OAuth 连接。
什么时候用它
- 新建演示文稿并使用预定义版式添加幻灯片
- 在幻灯片中插入文本、图形和图片
- 应用文本样式并替换模板占位符
- 获取幻灯片缩略图与页面详情
技能文档
Google Slides
Access the Google Slides API with managed OAuth authentication. Create and manage presentations, add slides, insert text and images, and control formatting.
Quick Start
# Create a new presentation
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'title': 'My Presentation'}).encode()
req = urllib.request.Request('https://api.maton.ai/google-slides/v1/presentations', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://api.maton.ai/google-slides/{native-api-path}
Maton proxies requests to slides.googleapis.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Google OAuth connections at https://api.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=google-slides&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'google-slides'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-slides",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection
If you have multiple Google Slides connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'title': 'My Presentation'}).encode()
req = urllib.request.Request('https://api.maton.ai/google-slides/v1/presentations', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always include this header to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to presentations, slides, and slide content within the connected Google Slides account.
- All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
API Reference
Presentations
Create Presentation
POST /google-slides/v1/presentations
Content-Type: application/json
{
"title": "My Presentation"
}
Get Presentation
GET /google-slides/v1/presentations/{presentationId}
Pages (Slides)
Get Page
GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}
Get Page Thumbnail
GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}/thumbnail
With custom size:
GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}/thumbnail?thumbnailProperties.mimeType=PNG&thumbnailProperties.thumbnailSize=LARGE
Batch Update
The batchUpdate endpoint is used for most modifications. It accepts an array of requests that are applied atomically.
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [...]
}
Create Slide
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"createSlide": {
"objectId": "slide_001",
"slideLayoutReference": {
"predefinedLayout": "TITLE_AND_BODY"
}
}
}
]
}
Available predefined layouts:
BLANKTITLETITLE_AND_BODYTITLE_AND_TWO_COLUMNSTITLE_ONLYSECTION_HEADERONE_COLUMN_TEXTMAIN_POINTBIG_NUMBER
Insert Text
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"insertText": {
"objectId": "{shapeId}",
"text": "Hello, World!",
"insertionIndex": 0
}
}
]
}
Delete Text
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"deleteText": {
"objectId": "{shapeId}",
"textRange": {
"type": "ALL"
}
}
}
]
}
Create Shape
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"createShape": {
"objectId": "shape_001",
"shapeType": "TEXT_BOX",
"elementProperties": {
"pageObjectId": "{slideId}",
"size": {
"width": {"magnitude": 300, "unit": "PT"},
"height": {"magnitude": 100, "unit": "PT"}
},
"transform": {
"scaleX": 1,
"scaleY": 1,
"translateX": 100,
"translateY": 100,
"unit": "PT"
}
}
}
}
]
}
Create Image
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"createImage": {
"objectId": "image_001",
"url": "https://example.com/image.png",
"elementProperties": {
"pageObjectId": "{slideId}",
"size": {
"width": {"magnitude": 200, "unit": "PT"},
"height": {"magnitude": 200, "unit": "PT"}
},
"transform": {
"scaleX": 1,
"scaleY": 1,
"translateX": 200,
"translateY": 200,
"unit": "PT"
}
}
}
}
]
}
Delete Object
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"deleteObject": {
"objectId": "{objectId}"
}
}
]
}
Update Text Style
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"updateTextStyle": {
"objectId": "{shapeId}",
"textRange": {
"type": "ALL"
},
"style": {
"bold": true,
"fontSize": {"magnitude": 24, "unit": "PT"},
"foregroundColor": {
"opaqueColor": {
"rgbColor": {"red": 0.2, "green": 0.4, "blue": 0.8}
}
}
},
"fields": "bold,fontSize,foregroundColor"
}
}
]
}
Replace All Text
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"replaceAllText": {
"containsText": {
"text": "{{placeholder}}",
"matchCase": true
},
"replaceText": "Actual Value"
}
}
]
}
Code Examples
JavaScript
// Create a presentation
const response = await fetch(
'https://api.maton.ai/google-slides/v1/presentations',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({ title: 'My Presentation' })
}
);
const presentation = await response.json();
const presentationId = presentation.presentationId;
// Add a slide
await fetch(
`https://api.maton.ai/google-slides/v1/presentations/${presentationId}:batchUpdate`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({
requests: [
{
createSlide: {
slideLayoutReference: { predefinedLayout: 'TITLE_AND_BODY' }
}
}
]
})
}
);
Python
import os
import requests
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'
}
# Create a presentation
response = requests.post(
'https://api.maton.ai/google-slides/v1/presentations',
headers=headers,
json={'title': 'My Presentation'}
)
presentation = response.json()
presentation_id = presentation['presentationId']
# Add a slide
requests.post(
f'https://api.maton.ai/google-slides/v1/presentations/{presentation_id}:batchUpdate',
headers=headers,
json={
'requests': [
{
'createSlide': {
'slideLayoutReference': {'predefinedLayout': 'TITLE_AND_BODY'}
}
}
]
}
)
Notes
- Object IDs must be unique within a presentation
- Use batchUpdate for all modifications (adding slides, text, shapes, etc.)
- Multiple requests in a batchUpdate are applied atomically
- Sizes and positions use PT (points) as the unit (72 points = 1 inch)
- Use
replaceAllTextfor template-based presentation generation - IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Google Slides connection |
| 401 | Invalid or missing Maton API key |
| 404 | Presentation not found |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Google Slides API |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
google-slides. For example:
- Correct:
https://api.maton.ai/google-slides/v1/presentations - Incorrect:
https://api.maton.ai/slides/v1/presentations
Resources
相关技能
通过托管 OAuth,让代理安全访问 Google Drive 进行文件和文件夹操作。
通过托管 OAuth 的统一网关读写 Google Sheets 数据。
Edit a Google Slides deck in place from the command line: pull it to editable local SML, change it (semantic selectors, roles, components, images, layout), preview an exact diff, and push batchUpdates back to the SAME deck. Use for any task that creates or restyles Google Slides while keeping them native and editable — new slides, deck-wide restyles, media/galleries, cross-deck theme transfer — instead of generating an image or a throwaway .pptx.
Use when working in the PPTAgent or BotSlide repository to add features, fix bugs, or adjust slide generation, editing, export, prompt rules, project version...
通过托管 OAuth 管理 Google Meet 会议空间、参会者、会议记录、录制和转写稿。
byungkyu 的更多技能
浏览全部技能通过 OAuth 代理调用 Twilio API,完成短信发送、语音外呼与电话号资源管理。
通过托管 OAuth 的统一网关读写 Google Sheets 数据。
通过托管 OAuth,让代理安全访问 Google Drive 进行文件和文件夹操作。
通过托管 OAuth 管理 Google Meet 会议空间、参会者、会议记录、录制和转写稿。
通过 Microsoft Graph 接入 Outlook,读取、发送、管理邮件、文件夹、日历事件和联系人,OAuth 由平台托管。
通过托管网关调用第三方 API,免去自行管理 OAuth 和密钥的负担。