Two separate things going on here, and only one is actually on Gamma's side. The rest is Zapier formatting. 1) The real fix for "people can't view it": use link sharing, not email invites. There is a public view option, but it's the External Access field, not Email Recipients. The difference:
Email Recipients = per-person invitations tied to a specific email. That person has to sign into Gamma as that exact address. That's why dgermino@gmail.com hit the "wrong account / sign up" screen. The browser was signed in as syykus@gmail.com.
External Access = view = anyone with the link can open it, no Gamma account or sign-in needed. This is what you actually want.
The "view" in your screenshot is set on Email Recipients Access Level, which is a different field than External Access. That's the mix-up. Recommended setup in your Create Generation step:
Set External Access = view
Leave Email Recipients blank (clear every email field)
Keep your final Send Outbound Email step to email the gammaUrl (from Get Generation Status) back to the sender + CC
That clears the access problem, the validation error, and the "it's required" error all at once. ⚠️ One caveat: if your workspace's sharing settings restrict external links, Gamma will quietly ignore External Access. If view links still don't work after this, check Settings → Sharing. 2) If you do want named email invites, the validation error is a Zapier formatting issue. Gamma needs each recipient to be a bare email address. Zapier is sending Damien Germino <dgermino@gmail.com> (name + brackets) from the CC field, which fails. Your successful run sent just syykus@gmail.com. The fix: add a Formatter by Zapier → Text → Extract Email Address step on the CC value before the Gamma step, then map the cleaned result into Recipients. Extract Email Address pulls one address; for multiple CCs, use Extract Pattern with an email regex. Quick answers to your other points:
No completion email to you as the owner: expected. The API doesn't notify the owner. Get Generation Status → gammaUrl plus an email-to-self step is the way to get that signal.
"Token passed as the sender email": same class of issue. That field is mapping a non-email value. Run it through the same Formatter step. If it persists, send me that run's exact From Email value.
PDF export: sounds like your multi-step zap already handles it. Export As = pdf just produces exportUrl on Get Generation Status. It never auto-emails.
If link-view still fails after step 1, send me the generationId and gammaUrl and I'll check whether workspace sharing settings are stripping External Access.
Hi Damien, thanks for the detail and screenshots. A couple things stand out. The “Wrong account” screen is likely expected if the invitation email was sent to one address, but the browser is signed into Gamma with a different address. In your screenshot, the invite appears to be for dgermino@gmail.com, while the browser was signed in as syykus@gmail.com. Gamma invitation links are tied to the invited email, so that mismatch would trigger the wrong-account page even if the access level is set to view. The validation error looks separate. Zapier appears to be passing a non-email value into the Email Recipients field, likely from the CC field when it has no data. Gamma requires every value in emailOptions.recipients to be a valid email address, so if Zapier sends something like No data, the API rejects it. For the PDF export: setting Export As = pdf does not email the PDF automatically. It tells Gamma to generate an export file. You would then use the “Get Generation Status” step to retrieve the exportUrl after the generation completes, and map that URL into a later email or storage step if you want to send/download it. Could you send one Zap run/task history link for a failed run and one run where the invite was created? The most helpful fields would be the exact Email Recipients value Zapier sent, the generationId, and the completed gammaUrl. That should let us confirm whether this is just Zap field mapping or something unexpected in the Gamma share behavior.
Hi Luiza 👋 The Gamma itself should still be there, but the exportUrl for the PDF is temporary and expires after about 7 days. So for older presentations, it’s normal for the original PDF link to stop working even though the Gamma still exists. The fix is to re-export the file from Gamma, which will generate a fresh PDF. If you need the PDF to stay available long-term in Zapier, I’d recommend downloading/storing the file as soon as the generation finishes instead of relying on the original exportUrl later. Docs: https://developers.gamma.app/docs/
Also Chowderr M. we do use Canny. Its our main place for product feedback: https://meetgamma.canny.io/
Hi Dan webhooks are not available at this time. As to if and when it will be available I dont have anything to share at this time.
Theres a timer in the presenter view!
Great question! Gamma works a bit differently than PowerPoint - instead of draggable text boxes, it uses a block-based system with Smart Layouts. For positioning text on specific sides of a card: Click the Insert menu on the right side of your screen
Select Smart Layouts
Choose a column-based layout that fits what you need (left/right splits, multi-column, etc.)
You can also adjust text alignment within any block - just highlight your text and choose left, center, or right alignment from the formatting menu. About the table issue with AI generation: This is a known limitation. When AI generates content, it doesn't always preserve table formatting perfectly, especially on cards with colored backgrounds or complex styling. Here's what I'd suggest:
Use columns instead of tables - Smart Layouts with columns often display more reliably than tables
Edit after generation - Let AI create the content, then click on the layout and switch to a different one. Gamma will automatically adjust your content to fit
Try "Try new layout" - Click the sparkle icon on any card and select "Try new layout" to have AI suggest alternatives that might work better
Here's more info on layouts and styling: Smart Layouts: https://help.gamma.app/en/articles/11029130-what-s-the-fastest-way-to-transform-content-and-layouts Card styling: https://help.gamma.app/en/articles/11969695-how-do-i-style-cards-and-adjust-layout-settings-in-my-gamma Text formatting: https://help.gamma.app/en/articles/11028318-how-do-i-add-edit-and-style-text-in-gamma Let me know if you have other questions! If you are continuing to have issues please send a video so we can look into this further.
Hey Dan! I dug into this a bit more – unfortunately, the /v1.0/themes endpoint doesn't currently support filtering by type directly. The available parameters are:
query – name search
limit – max 50 results
after – pagination cursor
Workaround: Each theme in the response includes a type field ("custom" or "standard"), so you can filter client-side: javascript
const customThemes = response.data.filter(theme => theme.type === 'custom');If you have a lot of themes, you may need to paginate through results, but this approach lets you identify which are yours. Building out the full implementation is a bit outside our support scope, but hopefully that points you in the right direction! If you'd like to see a native type filter added to the endpoint, definitely drop it in Ideas & Requests in the community Slack or on our Canny board – that's where feature requests get tracked and prioritized! 🙏
Hey Juan Diego! 👋 That CORS error is a browser security feature that blocks frontend JavaScript from making direct API calls to different domains. This is expected behavior and not specific to Gamma. Gamma-specific things to verify:
API key starts with sk-gamma-
Using X-API-KEY header (not Authorization or Bearer)
For v1.0, both inputText and textMode are required
Example request body: json
{
"inputText": "Your content here",
"textMode": "generate",
"format": "presentation",
"numCards": 10
}How your application is structured to call our API falls outside what we can help with. We focus on Gamma-specific configuration, authentication, error messages, and rate limits rather than custom application architecture. Once requests are reaching us from a server environment, if you hit any Gamma-specific errors, share the x-request-id from the response headers and I can help debug from there. Full docs: https://developers.gamma.app
