For most use cases, the
slideless CLI is easier than calling this endpoint directly. The CLI command equivalent is slideless share-email <shareId> --to <email>. End-to-end walkthrough: Send a presentation by email.When to use
You already have ashareId (from POST /uploadSharedPresentation or from the dashboard) and you want to email it to one or more recipients. The endpoint:
- Mints a unique named token per recipient by default (recipient email becomes the token name), so per-recipient open tracking comes for free via the existing
accessCount/lastAccessedAtfields on eachShareToken. - Sends a branded email via Resend (from
noreply@mail.slideless.ai). - Records every send in
shared_presentations/{shareId}/email_sends/{autoId}as an append-only audit trail.
tokenId.
Endpoint
Auth
| Header | Value |
|---|---|
Authorization | Bearer cko_… (org key) or Bearer cka_… (admin key) |
Content-Type | application/json |
presentations:write. Organization keys must belong to the same org as the shareId.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
shareId | string | yes | The presentation to email. Must belong to the caller’s org and not be archived. |
emails | string[] | yes | 1–20 recipient email addresses. Case-insensitive, de-duplicated. |
message | string | no | Personal note shown in the email body. ≤2000 chars. |
subject | string | no | Custom subject line. Defaults to "<senderEmail> shared: <title>" (or "Shared with you: <title>" if no sender email is known). ≤200 chars. |
tokenId | string | no | If set, reuse this existing token for every recipient instead of minting per-recipient tokens. Must be an active (non-revoked) token on the share. |
Response (200)
failed[] contains per-recipient failures inside an otherwise-200 response. The endpoint only returns a non-2xx status when a preflight condition fails (auth, not-found, archived, too-many-recipients, …) — i.e. when no email could be attempted for any recipient.
Error responses
| Status | code | When |
|---|---|---|
| 400 | missing-recipients | emails was empty |
| 400 | too-many-recipients | >20 recipients |
| 400 | message-too-long | message >2000 chars |
| 400 | invalid-argument | Invalid shareId, subject too long, unknown tokenId |
| 401 | unauthenticated | Missing/invalid API key |
| 403 | permission-denied | Key doesn’t belong to the share’s org |
| 404 | not-found | shareId doesn’t exist |
| 409 | archived | Share is archived |
| 429 | rate-limited | Too many calls |
| 500 | internal | Backend error |
nextAction string written for consumers (including agents) to act on programmatically.
Examples
curl
Node.js
See also
- Send a presentation by email (guide)
POST /uploadSharedPresentation— to create theshareIdin the first place- Share tokens — the per-recipient token model