Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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".
.claude/skills/jeremylongshore-gamma-install-auth/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 1% | 0% |
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 librarybash# 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
bash# 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
typescript// 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`);
pythonimport 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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,288 | 11,884 | +16% | 1 | 1 | 0% | 1,576 | 2,635 | +67% | 0 | 0 | — |
case-02 | fail→pass | 17,705 | 17,204 | -3% | 1 | 1 | 0% | 2,581 | 3,379 | +31% | 0 | 0 | — |
case-03 | fail→fail | 16,027 | 11,036 | -31% | 1 | 1 | 0% | 2,853 | 3,538 | +24% | 0 | 0 | — |
case-04 | fail→pass | 14,391 | 9,061 | -37% | 1 | 1 | 0% | 1,505 | 1,992 | +32% | 0 | 0 | — |
case-05 | fail→pass | 7,149 | 7,693 | +8% | 1 | 1 | 0% | 1,446 | 1,685 | +17% | 0 | 0 | — |
case-06 | fail→pass | 10,184 | 7,833 | -23% | 1 | 1 | 0% | 1,739 | 1,757 | +1% | 0 | 0 | — |
case-07 | fail→pass | 12,928 | 4,803 | -63% | 1 | 1 | 0% | 1,419 | 2,201 | +55% | 0 | 0 | — |
case-08 | pass→pass | 6,415 | 2,216 | -65% | 1 | 1 | 0% | 1,148 | 1,669 | +45% | 0 | 0 | — |
case-09 | fail→pass | 10,064 | 11,104 | +10% | 1 | 1 | 0% | 1,738 | 2,356 | +36% | 0 | 0 | — |
case-10 | pass→pass | 18,820 | 5,404 | -71% | 1 | 1 | 0% | 1,931 | 2,097 | +9% | 0 | 0 | — |
case-11 | pass→pass | 18,017 | 20,977 | +16% | 1 | 1 | 0% | 2,392 | 4,223 | +77% | 0 | 0 | — |
case-12 | pass→pass | 11,257 | 18,243 | +62% | 1 | 1 | 0% | 1,889 | 3,953 | +109% | 0 | 0 | — |
case-13 | fail→pass | 13,197 | 10,017 | -24% | 1 | 1 | 0% | 1,292 | 2,205 | +71% | 0 | 0 | — |
case-14 | fail→fail | 13,404 | 16,259 | +21% | 1 | 1 | 0% | 2,252 | 3,277 | +46% | 0 | 0 | — |
case-15 | fail→pass | 19,960 | 6,857 | -66% | 1 | 1 | 0% | 1,353 | 1,493 | +10% | 0 | 0 | — |
case-16 | fail→pass | 12,232 | 6,551 | -46% | 1 | 1 | 0% | 2,057 | 1,466 | -29% | 0 | 0 | — |
case-17 | pass→pass | 13,440 | 16,452 | +22% | 1 | 1 | 0% | 2,375 | 3,212 | +35% | 0 | 0 | — |
case-18 | fail→pass | 6,963 | 2,751 | -60% | 1 | 1 | 0% | 1,258 | 1,724 | +37% | 0 | 0 | — |
case-19 | fail→pass | 10,406 | 8,943 | -14% | 1 | 1 | 0% | 1,184 | 2,121 | +79% | 0 | 0 | — |
case-20 | fail→fail | 15,417 | 20,768 | +35% | 1 | 1 | 0% | 2,265 | 4,829 | +113% | 0 | 0 | — |
case-21 | fail→fail | 11,904 | 17,807 | +50% | 1 | 1 | 0% | 2,527 | 4,239 | +68% | 0 | 0 | — |
case-22 | fail→fail | 7,180 | 8,461 | +18% | 1 | 1 | 0% | 1,532 | 3,009 | +96% | 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. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 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.