Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate your first Gamma presentation via the API. Use when learning the generate-poll-retrieve workflow, testing API connectivity, or creating a minimal example. Trigger: "gamma hello world", "gamma quick start", "first gamma presentation", "gamma example", "gamma test".
.claude/skills/jeremylongshore-gamma-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 91% | 0% |
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).
gamma-install-auth setupGAMMA_API_KEY environment variableAll Gamma generations are asynchronous:
/v1.0/generations — submit content, receive generationId/v1.0/generations/{generationId} — poll every 5s until completed or failedgammaUrl (view in app) + exportUrl (download PDF/PPTX/PNG)bash# 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}'
typescriptconst 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");
pythonimport 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")
json{ "generationId": "gen_abc123", "status": "completed", "gammaUrl": "https://gamma.app/docs/Benefits-of-AI-abc123", "exportUrl": "https://export.gamma.app/gen_abc123.pdf", "creditsUsed": 42 }
| outputFormat | Result | |----------------|--------| | presentation | Slide deck (default) | | document | Long-form document | | webpage | Web page | | social_post | Social media content |
| 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 |
Proceed to gamma-core-workflow-a for advanced generation with themes, images, and export options.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 20,486 | 12,246 | -40% | 1 | 1 | 0% | 3,226 | 3,168 | -2% | 0 | 0 | — |
case-02 | fail→pass | 20,282 | 14,027 | -31% | 1 | 1 | 0% | 2,966 | 3,622 | +22% | 0 | 0 | — |
case-03 | fail→pass | 16,974 | 13,392 | -21% | 1 | 1 | 0% | 2,304 | 3,370 | +46% | 0 | 0 | — |
case-04 | fail→fail | 17,344 | 21,037 | +21% | 1 | 1 | 0% | 2,350 | 4,612 | +96% | 0 | 0 | — |
case-05 | fail→fail | 18,859 | 17,902 | -5% | 1 | 1 | 0% | 2,414 | 3,816 | +58% | 0 | 0 | — |
case-06 | fail→pass | 11,964 | 12,454 | +4% | 1 | 1 | 0% | 2,010 | 2,863 | +42% | 0 | 0 | — |
case-07 | fail→pass | 12,286 | 3,490 | -72% | 1 | 1 | 0% | 1,167 | 2,225 | +91% | 0 | 0 | — |
case-08 | fail→pass | 10,541 | 2,519 | -76% | 1 | 1 | 0% | 957 | 2,009 | +110% | 0 | 0 | — |
case-09 | fail→pass | 13,302 | 5,670 | -57% | 1 | 1 | 0% | 2,275 | 2,769 | +22% | 0 | 0 | — |
case-10 | fail→pass | 13,821 | 4,056 | -71% | 1 | 1 | 0% | 1,520 | 2,448 | +61% | 0 | 0 | — |
case-11 | fail→pass | 15,807 | 9,775 | -38% | 1 | 1 | 0% | 1,982 | 2,370 | +20% | 0 | 0 | — |
case-12 | pass→pass | 19,201 | 12,974 | -32% | 1 | 1 | 0% | 2,812 | 3,271 | +16% | 0 | 0 | — |
case-13 | fail→pass | 14,275 | 6,425 | -55% | 1 | 1 | 0% | 1,699 | 2,884 | +70% | 0 | 0 | — |
case-14 | pass→pass | 16,627 | 7,000 | -58% | 1 | 1 | 0% | 2,032 | 2,899 | +43% | 0 | 0 | — |
case-15 | fail→pass | 7,908 | 2,613 | -67% | 1 | 1 | 0% | 1,515 | 2,014 | +33% | 0 | 0 | — |
case-16 | fail→pass | 6,480 | 1,896 | -71% | 1 | 1 | 0% | 989 | 1,942 | +96% | 0 | 0 | — |
case-17 | fail→pass | 6,974 | 7,318 | +5% | 1 | 1 | 0% | 904 | 2,071 | +129% | 0 | 0 | — |
case-18 | pass→pass | 8,631 | 3,916 | -55% | 1 | 1 | 0% | 1,848 | 2,405 | +30% | 0 | 0 | — |
case-19 | pass→pass | 6,247 | 3,720 | -40% | 1 | 1 | 0% | 1,327 | 2,282 | +72% | 0 | 0 | — |
case-20 | pass→pass | 7,002 | 1,221 | -83% | 1 | 1 | 0% | 341 | 1,776 | +421% | 0 | 0 | — |
case-21 | fail→pass | 12,440 | 6,662 | -46% | 1 | 1 | 0% | 1,290 | 1,879 | +46% | 0 | 0 | — |
case-22 | pass→pass | 3,705 | 1,304 | -65% | 1 | 1 | 0% | 748 | 1,805 | +141% | 0 | 0 | — |
case-23 | pass→pass | 12,804 | 2,621 | -80% | 1 | 1 | 0% | 1,490 | 2,021 | +36% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +61 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.