gamma-hello-world
Generates a basic Gamma presentation using the asynchronous generate-poll-retrieve API workflow.
Install
mkdir -p .claude/skills/gamma-hello-world && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2402" && unzip -o skill.zip -d .claude/skills/gamma-hello-world && rm skill.zipInstalls to .claude/skills/gamma-hello-world
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Generate your first Gamma presentation via the API.Key capabilities
- →Submit content to create a Gamma presentation
- →Poll the API for the presentation generation status
- →Retrieve the URL for viewing the presentation in Gamma
- →Retrieve the URL for downloading the presentation export
- →Handle generation failures and report status
How it works
The skill sends content to the Gamma API to start a presentation generation, then repeatedly checks the status until it is completed or failed, and finally retrieves the presentation URLs.
Inputs & outputs
When to use gamma-hello-world
- →Initiating a new Gamma integration
- →Testing API connectivity
- →Creating a minimal presentation example
- →Verifying environment authentication
About this skill
Gamma Hello World
Overview
Generate your first presentation using Gamma's async Generate API. The workflow is: POST to create a generation, poll for status, then retrieve results (gammaUrl + exportUrl).
Prerequisites
- Completed
gamma-install-authsetup - Valid
GAMMA_API_KEYenvironment variable - Pro account with available credits
The Generate-Poll-Retrieve Pattern
All Gamma generations are asynchronous:
- POST
/v1.0/generations— submit content, receivegenerationId - GET
/v1.0/generations/{generationId}— poll every 5s untilcompletedorfailed - Result —
gammaUrl(view in app) +exportUrl(download PDF/PPTX/PNG)
Instructions
Minimal curl Example
# Step 1: Create generation
GENERATION=$(curl -s -X POST \
"https://public-api.gamma.app/v1.0/generations" \
-H "X-API-KEY: ${GAMMA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"content": "Create a 5-card presentation about the benefits of AI in business",
"outputFormat": "presentation"
}')
GEN_ID=$(echo "$GENERATION" | jq -r '.generationId')
echo "Generation started: $GEN_ID"
# Step 2: Poll until complete (every 5 seconds)
while true; do
STATUS=$(curl -s \
"https://public-api.gamma.app/v1.0/generations/${GEN_ID}" \
-H "X-API-KEY: ${GAMMA_API_KEY}")
STATE=$(echo "$STATUS" | jq -r '.status')
echo "Status: $STATE"
[ "$STATE" = "completed" ] || [ "$STATE" = "failed" ] && break
sleep 5
done
# Step 3: Retrieve results
echo "$STATUS" | jq '{gammaUrl, exportUrl, creditsUsed}'
Node.js / TypeScript Example
const GAMMA_BASE = "https://public-api.gamma.app/v1.0";
const headers = {
"X-API-KEY": process.env.GAMMA_API_KEY!,
"Content-Type": "application/json",
};
async function generatePresentation(content: string) {
// Step 1: Create generation
const createRes = await fetch(`${GAMMA_BASE}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
content,
outputFormat: "presentation",
}),
});
if (!createRes.ok) throw new Error(`Create failed: ${createRes.status}`);
const { generationId } = await createRes.json();
console.log(`Generation started: ${generationId}`);
// Step 2: Poll for completion
while (true) {
const pollRes = await fetch(`${GAMMA_BASE}/generations/${generationId}`, { headers });
const result = await pollRes.json();
if (result.status === "completed") {
console.log(`View: ${result.gammaUrl}`);
console.log(`Download: ${result.exportUrl}`);
console.log(`Credits used: ${result.creditsUsed}`);
return result;
}
if (result.status === "failed") {
throw new Error(`Generation failed: ${JSON.stringify(result)}`);
}
console.log(`Status: ${result.status}...`);
await new Promise((r) => setTimeout(r, 5000));
}
}
// Run it
await generatePresentation("Create a 5-card intro to machine learning");
Python Example
import os, time, requests
BASE = "https://public-api.gamma.app/v1.0"
HEADERS = {
"X-API-KEY": os.environ["GAMMA_API_KEY"],
"Content-Type": "application/json",
}
def generate_presentation(content: str) -> dict:
# Step 1: Create
resp = requests.post(f"{BASE}/generations", headers=HEADERS, json={
"content": content,
"outputFormat": "presentation",
})
resp.raise_for_status()
gen_id = resp.json()["generationId"]
print(f"Generation started: {gen_id}")
# Step 2: Poll
while True:
poll = requests.get(f"{BASE}/generations/{gen_id}", headers=HEADERS)
result = poll.json()
if result["status"] == "completed":
print(f"View: {result['gammaUrl']}")
print(f"Download: {result['exportUrl']}")
return result
if result["status"] == "failed":
raise Exception(f"Failed: {result}")
print(f"Status: {result['status']}...")
time.sleep(5)
generate_presentation("5-card intro to sustainable energy")
Expected Output
{
"generationId": "gen_abc123",
"status": "completed",
"gammaUrl": "https://gamma.app/docs/Benefits-of-AI-abc123",
"exportUrl": "https://export.gamma.app/gen_abc123.pdf",
"creditsUsed": 42
}
Output Formats
outputFormat | Result |
|---|---|
presentation | Slide deck (default) |
document | Long-form document |
webpage | Web page |
social_post | Social media content |
Error Handling
| Error | Cause | Solution |
|---|---|---|
| 401 on POST | Bad API key | Verify X-API-KEY header |
| 422 on POST | Invalid parameters | Check content and outputFormat values |
status: "failed" | Generation could not complete | Simplify content or reduce card count |
| Poll timeout | Very large generation | Increase poll duration beyond 2 minutes |
Resources
Next Steps
Proceed to gamma-core-workflow-a for advanced generation with themes, images, and export options.
When not to use it
- →When advanced generation with themes, images, and export options is needed
Prerequisites
Limitations
- →Does not support advanced generation features like themes or images
- →Does not support all output formats beyond 'presentation', 'document', 'webpage', or 'social_post'
How it compares
This workflow automates the asynchronous process of generating a Gamma presentation, polling for completion, and retrieving results, unlike manually performing each API call.
Compared to similar skills
gamma-hello-world side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| gamma-hello-world (this skill) | 4 | 27d | Caution | Beginner |
| webapp-testing | 353 | 3mo | Review | Intermediate |
| resolve-conflicts | 81 | 8mo | Review | Intermediate |
| telegram-bot-builder | 106 | 6mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
webapp-testing
anthropics
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
resolve-conflicts
antinomyhq
Use this skill immediately when the user mentions merge conflicts that need to be resolved. Do not attempt to resolve conflicts directly - invoke this skill first. This skill specializes in providing a structured framework for merging imports, tests, lock files (regeneration), configuration files, and handling deleted-but-modified files with backup and analysis.
telegram-bot-builder
davila7
Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot.
dev-browser
SawyerHood
Browser automation with persistent page state. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, or automate browser workflows. Trigger phrases include "go to [url]", "click on", "fill out the form", "take a screenshot", "scrape", "automate", "test the website", "log into", or any browser interaction request.
openspec-onboard
studyzy
Guided onboarding for OpenSpec - walk through a complete workflow cycle with narration and real codebase work.
codex-cli-bridge
alirezarezvani
Bridge between Claude Code and OpenAI Codex CLI - generates AGENTS.md from CLAUDE.md, provides Codex CLI execution helpers, and enables seamless interoperability between both tools