From gamma-pack
Set up Gamma API v1.0 authentication and first request. Use when configuring API keys, setting up X-API-KEY header, or initializing Gamma REST API access in a project. Trigger: "install gamma", "setup gamma API", "gamma auth", "gamma API key", "configure gamma".
npx claudepluginhub flight505/skill-forge --plugin gamma-packThis skill is limited to using the following tools:
Configure authentication for the Gamma Generate API v1.0 (GA since Nov 2025). Gamma uses a REST API at `https://public-api.gamma.app/v1.0/` — there is no official SDK package. All requests authenticate via the `X-API-KEY` header.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Configure authentication for the Gamma Generate API v1.0 (GA since Nov 2025). Gamma uses a REST API at https://public-api.gamma.app/v1.0/ — there is no official SDK package. All requests authenticate via the X-API-KEY header.
curl or HTTP client library# Set environment variable (add to .env or shell profile)
export GAMMA_API_KEY="gma_your_api_key_here"
# .env file approach
echo 'GAMMA_API_KEY=gma_your_api_key_here' >> .env
# Quick verification with curl
curl -s -o /dev/null -w "%{http_code}" \
-H "X-API-KEY: ${GAMMA_API_KEY}" \
https://public-api.gamma.app/v1.0/themes
# 200 = authenticated, 401 = invalid key
// gamma-client.ts — thin wrapper around the REST API
const GAMMA_BASE = "https://public-api.gamma.app/v1.0";
interface GammaConfig {
apiKey: string;
baseUrl?: string;
}
export function createGammaClient(config: GammaConfig) {
const headers = {
"X-API-KEY": config.apiKey,
"Content-Type": "application/json",
};
const base = config.baseUrl ?? GAMMA_BASE;
return {
async listThemes() {
const res = await fetch(`${base}/themes`, { headers });
if (!res.ok) throw new Error(`Gamma API ${res.status}: ${await res.text()}`);
return res.json();
},
async listFolders() {
const res = await fetch(`${base}/folders`, { headers });
if (!res.ok) throw new Error(`Gamma API ${res.status}: ${await res.text()}`);
return res.json();
},
};
}
// Verify connection
const gamma = createGammaClient({ apiKey: process.env.GAMMA_API_KEY! });
const themes = await gamma.listThemes();
console.log(`Connected — ${themes.length} workspace themes available`);
import os, requests
GAMMA_BASE = "https://public-api.gamma.app/v1.0"
HEADERS = {
"X-API-KEY": os.environ["GAMMA_API_KEY"],
"Content-Type": "application/json",
}
# Verify connection
resp = requests.get(f"{GAMMA_BASE}/themes", headers=HEADERS)
resp.raise_for_status()
themes = resp.json()
print(f"Connected — {len(themes)} workspace themes available")
| Practice | Implementation |
|---|---|
| Never commit keys | Add GAMMA_API_KEY to .gitignore and .env |
| Rotate regularly | Regenerate in Settings > API key tab |
| Scope per environment | Separate keys for dev/staging/prod workspaces |
| Audit usage | Monitor credit consumption at gamma.app/settings/billing |
| HTTP Status | Meaning | Fix |
|---|---|---|
| 401 Unauthorized | Invalid or missing API key | Verify X-API-KEY header value |
| 403 Forbidden | Account not on Pro+ plan | Upgrade at gamma.app/pricing |
| 429 Too Many Requests | Rate limit exceeded | Implement backoff; contact Gamma support for higher limits |
| 5xx Server Error | Gamma service issue | Retry with exponential backoff |
fetch/requests directly.X-API-KEY, not Authorization: Bearer.Proceed to gamma-hello-world for your first presentation generation.