TL;DR
<shareId>. Run slideless share first if you don’t have a shareId yet.
What this does
- Sends a nicely branded email (via Resend, from
noreply@mail.slideless.ai) to 1–20 recipients - By default, mints a unique named token per recipient so per-recipient open analytics come for free (via
accessCount/lastAccessedAton each token) - Records every send in the audit log, one entry per recipient, visible in the dashboard
Revoke click kills all of them), pass --token-id <existing-id> to reuse an existing token instead of minting new ones.
Prerequisites
- A presentation already uploaded — you need a
shareId. Get one withslideless shareor from the dashboard. - An authenticated CLI session:
slideless auth login-request+login-complete, orslideless loginto paste a dashboard key. - The active key needs
presentations:writescope.
From the CLI
Single recipient, no message
Multiple recipients with a personal note
Reuse a single existing link
If you already have a token (e.g. one named"Newsletter subscribers"), you can send that one to everyone instead of minting per-recipient tokens:
Revoke click in the dashboard.
From the plugin (Claude Code / Cursor)
Invoke theshare-presentation-email skill after share-presentation. Give it the share_id, an emails array, and an optional message:
slideless share-email --json under the hood. It surfaces a per-recipient summary, and if some addresses fail (bad syntax, Resend rejection), it tells you which and why.
From the dashboard
On any presentation detail page, click Share via email in the header. The modal:- Lets you add recipients (chips input — Enter/comma/Tab to add)
- Optional custom subject (falls back to
"<your email> shared: <title>") - Optional personal note (≤2000 chars)
- By default, mints a per-recipient tracked token. If you already have active tokens, you can pick one to reuse instead.
Response shape (success)
failed[] is a per-recipient list inside an otherwise-successful response. The call only returns success: false when zero emails could be attempted (preflight failure like auth/permission/archived).
Limits
| Limit | Value |
|---|---|
| Recipients per call | 20 |
| Personal message length | 2000 characters |
| Custom subject length | 200 characters |
HTML payload (via share) | 10 MB |
Per-recipient analytics
Each recipient’s named token shows up in the dashboard’s Share links table, with its ownaccessCount and lastAccessedAt. To query programmatically:
Troubleshooting
Every failure includeserror.code, error.message, and error.nextAction. The nextAction field is written for agents and humans alike — it tells you exactly what to try next.
error.code | When | What to do |
|---|---|---|
unauthenticated | Missing or invalid API key | Run slideless auth login-request + login-complete, or pass --api-key. |
permission-denied | Key doesn’t own the share | Verify the key belongs to the org that owns shareId. |
not-found | shareId doesn’t exist | Double-check the id. If just created, retry once after 2s. |
archived | Share is archived | Un-archive or create a new share with slideless share. |
missing-recipients | No --to flags | Add one or more recipients. |
too-many-recipients | >20 recipients | Split into batches of ≤20. |
message-too-long | --message >2000 chars | Shorten or omit. |
invalid-email | Bad email syntax | Per-recipient (lands in failed[]). Show the user which addresses were rejected. |
email-send-failed | Resend API failure | Per-recipient. Retry once; if persistent, Resend is having issues. |
rate-limited | Too many calls | Back off ~30s, retry. |
internal | Backend 5xx | Retry once; report with shareId if it persists. |
Related
slideless share— upload the presentation first- Share tokens — how the per-recipient token model works
- Plugin skill:
share-presentation-email— invoke this from Claude Code / Cursor