---
name: gamma-core-workflow-a
description: |
Generate presentations, documents, and webpages via Gamma API.
Use when creating content from text prompts, configuring themes,
image styles, text modes, and output formats.
Trigger: "gamma generate", "gamma presentation from text",
"gamma AI slides", "gamma create deck", "gamma content generation".
allowed-tools: Read, Write, Edit, Bash(curl:*), Bash(node:*)
version: 1.0.0
license: MIT
author: Jeremy Longshore <[email protected]>
compatible-with: claude-code, codex, openclaw
tags: [saas, gamma, workflow, generation]
---
# Gamma Core Workflow A: Content Generation
## Overview
Generate presentations, documents, webpages, and social posts using Gamma's Generate API (`POST /v1.0/generations`). This skill covers the full parameter set: content, output format, text mode, text amount, themes, image options, sharing, folders, and export format.
## Prerequisites
- Completed `gamma-sdk-patterns` (client wrapper ready)
- Pro account with available credits
- Workspace themes configured (optional)
## API Parameters Reference
| Parameter | Type | Options | Default |
|-----------|------|---------|---------|
| `content` | string | Your text/prompt | Required |
| `outputFormat` | string | `presentation`, `document`, `webpage`, `social_post` | `presentation` |
| `textMode` | string | `generate`, `condense`, `preserve` | `generate` |
| `textAmount` | string | `brief`, `medium`, `detailed`, `extensive` | `medium` |
| `themeId` | string | From `GET /v1.0/themes` | Workspace default |
| `imageOptions.style` | string | Free text (e.g., `"photorealistic"`, `"watercolor illustration"`) | AI default |
| `exportAs` | string | `pdf`, `pptx`, `png` | None (no auto-export) |
| `sharingOptions` | object | `workspaceAccess`, `externalAccess` | Workspace defaults |
| `folderIds` | string[] | From `GET /v1.0/folders` | Root folder |
## Instructions
### Step 1: Basic Presentation Generation
```typescript
import { createGammaClient, pollUntilDone } from "./lib/gamma";
const gamma = createGammaClient({ apiKey: process.env.GAMMA_API_KEY! });
// Simple generation — just content and format
const { generationId } = await gamma.generate({
content: "Create a 10-card pitch deck for a sustainable energy startup",
outputFormat: "presentation",
});
const result = await pollUntilDone(gamma, generationId);
console.log(`View: ${result.gammaUrl}`);
```
### Step 2: Full Parameter Generation
```typescript
// Use all available parameters for precise control
async function generateFullControl() {
// First, discover workspace themes
const themes = await gamma.listThemes();
const corporateTheme = themes.find((t) => t.name.includes("Corporate"));
// Discover folders
const folders = await gamma.listFolders();
const reportsFolder = folders.find((f) => f.name === "Reports");
const { generationId } = await gamma.generate({
content: `
Q1 2026 Business Review
- Revenue up 23% YoY
- Customer acquisition cost reduced by 15%
- Three new product lines launched
- Team grew from 45 to 62 employees
`,
outputFormat: "presentation",
textMode: "generate", // AI expands your bullet points
textAmount: "detailed", // More text per card
themeId: corporateTheme?.id,
exportAs: "pptx", // Auto-generate PPTX download
imageOptions: {
style: "professional corporate photography",
},
sharingOptions: {
workspaceAccess: "comment", // Team can comment
externalAccess: "view", // External viewers read-only
},
folderIds: reportsFolder ? [reportsFolder.id] : [],
});
const result = await pollUntilDone(gamma, generationId);
console.log(`View: ${result.gammaUrl}`);
console.log(`Download PPTX: ${result.exportUrl}`);
console.log(`Credits used: ${result.creditsUsed}`);
}
```
### Step 3: Text Mode Comparison
```typescript
// Same content, different text modes
const content = "Benefits of remote work: flexibility, reduced commute, global talent access";
// "generate" — AI expands bullets into full paragraphs
await gamma.generate({ content, textMode: "generate", outputFormat: "presentation" });
// "condense" — AI summarizes, keeps it concise
await gamma.generate({ content, textMode: "condense", outputFormat: "presentation" });
// "preserve" — uses your text as-is, no AI rewriting
await gamma.generate({ content, textMode: "preserve", outputFormat: "presentation" });
```
### Step 4: Document and Webpage Generation
```typescript
// Long-form document
const { generationId: docId } = await gamma.generate({
content: "Comprehensive guide to implementing CI/CD pipelines with GitHub Actions",
outputFormat: "document",
textAmount: "extensive",
exportAs: "pdf",
});
// Webpage
const { generationId: webId } = await gamma.generate({
content: "Product landing page for an AI-powered code review tool",
outputFormat: "webpage",
imageOptions: { style: "modern minimalist tech" },
});
// Social post
const { generationId: socialId } = await gamma.generate({
content: "Announcing our Series A funding round of $12M",
outputFormat: "social_post",
textAmount: "brief",
});
```
### Step 5: Batch Generation with Rate Limiting
```typescript
import pLimit from "p-limit";
const limit = pLimit(3); // Max 3 concurrent generations
const topics = [
"Machine Learning Fundamentals",
"Cloud Architecture Best Practices",
"API Design Patterns",
"DevOps Culture and Practices",
];
const results = await Promise.allSettled(
topics.map((topic) =>
limit(async () => {
const { generationId } = await gamma.generate({
content: `Create a training deck: ${topic}`,
outputFormat: "presentation",
textAmount: "medium",
exportAs: "pdf",
});
return pollUntilDone(gamma, generationId);
})
)
);
results.forEach((r, i) => {
if (r.status === "fulfilled") {
console.log(`${topics[i]}: ${r.value.gammaUrl}`);
} else {
console.error(`${topics[i]}: FAILED — ${r.reason.message}`);
}
});
```
### Step 6: curl Reference
```bash
# Generate with all parameters
curl -X POST "https://public-api.gamma.app/v1.0/generations" \
-H "X-API-KEY: ${GAMMA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"content": "5-card overview of AI in healthcare",
"outputFormat": "presentation",
"textMode": "generate",
"textAmount": "medium",
"themeId": "theme_abc123",
"exportAs": "pdf",
"imageOptions": { "style": "medical illustration" },
"sharingOptions": {
"workspaceAccess": "edit",
"externalAccess": "view"
}
}'
```
## Credit Cost Awareness
| Image Model Tier | Credits per Image |
|-------------------|-------------------|
| Standard | 2-15 |
| Advanced | 20-33 |
| Premium | 34-75 |
| Ultra | 30-125 |
A 10-card deck with 5 standard images costs approximately 20-60 credits.
## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| 422 Unprocessable | Invalid parameter combination | Check parameter types and allowed values |
| `status: "failed"` | Content too complex or long | Simplify content or reduce scope |
| 429 Rate Limited | Too many concurrent generations | Use `p-limit` for concurrency control |
| Empty `exportUrl` | No `exportAs` specified | Add `exportAs: "pdf"` to request |
## Resources
- [Generate a Gamma](https://developers.gamma.app/reference/generate-a-gamma)
- [Generate API Parameters Explained](https://developers.gamma.app/guides/generate-api-parameters-explained)
- [Themes and Folders APIs](https://developers.gamma.app/docs/list-themes-and-list-folders-apis-explained)
## Next Steps
Proceed to `gamma-core-workflow-b` for template-based generation and export retrieval.