Generate presentations, documents, webpages, and social posts with Gamma's AI, and manage the results.
Gamma ships in the w6w first-party pack. It declares 20 actions, 1 health check, and the host runs its code in a sandbox that never sees the credential.
io.w6w.gammaGamma turns a topic or an existing document into a polished presentation, document, webpage, or social post using AI. This app covers the Gamma Public API end to end: kick off a generation from raw text or a multi-page outline, or adapt an existing Gamma as a template; poll for the result (view URL, export URL, and credit usage); and generate a standalone on-brand image the same way.
Beyond generation, it covers the management surface a workflow needs to operate on what it created — searching gammas and templates, reading metadata and comment threads, archiving, exporting to PDF/PPTX/PNG, and deleting — plus doc-level, per-card, and per-viewer engagement analytics for a finished Gamma.
A health check tracks Gamma’s own status page (status.gamma.app), and the credential probe (List Themes) needs no more permission than an ordinary workspace member has, so a scoped-down key still reports healthy.
Three routes to the same 20 actions. The Workflow tab is generated from Gamma's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
archive-gamma Archive a Gamma to remove it from the active workspace without deleting it. Requires edit permission. Use the API file ID (e.g. g_l0mf2jvf1fpmi1v), not the web app URL slug.
archive-image Remove a generated image from the workspace media library without deleting the underlying file — existing URLs keep working. Idempotent.
create-generation Start an asynchronous generation from text — Gamma determines the layout. Provide inputText for a single-page File, or Pages (JSON) for a multi-page File. Poll Get Generation Status with the returned generationId.
create-generation-from-template Adapt, remix, or transform an existing single-page Gamma. The template's structure is preserved by default and changes only when the prompt asks. Poll Get Generation Status with the returned generationId.
create-image-generation Generate a standalone on-brand image from a text prompt. Poll Get Image Generation Status with the returned imageGenerationId.
delete-gamma Permanently delete a Gamma document. Requires a workspace admin role on the API key's workspace. The Gamma becomes immediately inaccessible and is no longer addressable via the API.
export-gamma Start an asynchronous export of an existing Gamma to PDF, PPTX, or PNG. Accepts a gamma (file) ID or a page/doc ID.
get-export-status Poll an export job. When complete, the response includes exportUrl. render_timeout and export_failed are safe to retry; deck_too_large and no_content require changing the input.
get-gamma Fetch title, thumbnail, URL, and other metadata for a single gamma. Accepts a file ID or the doc ID from the web app's document URL.
get-gamma-analytics Doc-level engagement metrics for a Gamma: total views, unique viewers/editors, card count, last opened time, and a 30-day daily unique-viewer breakdown.
get-gamma-card-analytics Per-card engagement for a Gamma: view time in seconds and viewer reach as a percentage, for every card.
get-gamma-viewer-analytics Paginated per-viewer engagement rows for a Gamma — display name, email, last-opened time, and cards viewed. Capped at 500 viewers total.
get-gamma-viewer-detail-analytics One authenticated viewer's engagement with a Gamma: display name, email, last-opened time, cards viewed, and relative time spent per card.
get-generation-status Poll a generation job. Returns gammaUrl, exportUrl and credits once status is completed, or an error object once failed.
get-image-generation-status Poll an image generation job. When complete, the response includes the image URL, dimensions, and savedMediaId for the workspace media library.
list-folders List folders the authenticated user is a member of. Use a returned id as folderId when generating into a specific folder.
list-gamma-comments List comment threads on a Gamma, cursor-paginated. Requires comment-level access on the Gamma.
list-themes List themes available to the workspace — standard (built-in) and custom. Use a returned id as themeId in a generation request.
search-gammas Full-text search over gammas the caller can access, matched against titles and body text. With no query and at least one filter, results are ordered by last-updated descending. A 403 means search isn't enabled for this workspace yet.
search-templates Search the caller's workspace templates and the official Gamma explore templates in one request. Only workspaceTemplates ids can be passed as gammaId to Create Generation From Template.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Gamma's real ids.
{
"manifestVersion": "2",
"name": "gamma-example",
"steps": [
{
"id": "create-generation-from-template",
"uses": {
"app": "io.w6w.gamma",
"action": "create-generation-from-template",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"prompt": "<prompt>",
"gammaId": "<gammaId>"
}
}
]
}create-generation-from-template create-generation create-image-generation export-gamma get-export-status +15 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Gamma, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Gamma. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "create-generation-from-template",
payload: {
prompt: "<value>",
gammaId: "<value>",
// title: "<value>",
// themeId: "<value>",
// folderId: "<value>",
// exportAs: "<value>",
// imageOptions: "<value>",
// sharingOptions: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action create-generation-from-template --payload '{"prompt":"<value>","gammaId":"<value>"}' Give an AI agent Gamma — without giving it Gamma's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.gamma#create-generation-from-template",
"input": {
"prompt": "<prompt>",
"gammaId": "<gammaId>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Gamma connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Gamma's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Gamma itself is MIT, and the runtime that executes it is source-available (FSL).
Gamma declares its own checks, so its health is a property of the app rather than something the host guesses at.
Incident history from status.gamma.app (Instatus). An incident is 'open' until its own latest status line reads Resolved; unrecognised entries are treated as open rather than guessed at.