Documentation Index
Fetch the complete documentation index at: https://docs.slideless.ai/llms.txt
Use this file to discover all available pages before exploring further.
What a share token is
A share token is the secret embedded in a share URL:- Is independently revocable
- Tracks its own view count and
lastAccessedAt - Has a name (e.g.
default,John Doe,q4-board) for human readability - Has a version mode —
latest(follows updates) orpinnedto a specific version N - Is generated server-side as 48 random bytes (384 bits of entropy), encoded base64url
Why multiple tokens
A single presentation can be shared with many people, each via their own token, so you can:| Scenario | What you do |
|---|---|
| Send a deck to two prospects, see who’s looking | Create one token per prospect, watch accessCount for each |
| One contact leaves their company | Revoke their token — others keep working |
| Run an A/B test on send copy | Different tokens in different emails, compare lastAccessedAt |
| Public version + private version | One default token, one revocable “guest” token |
slideless share <presentationId> to mint the first token (named default unless you pass --name). Add more by calling slideless share <presentationId> --name <label> again, or from the dashboard’s presentation detail page. To inspect every token’s view counter from the terminal, run slideless get <presentationId>.
Share tokens are view-only. They grant read access to the rendered deck at the URL. For editors (someone who should push new versions), see Collaboration and the
invite command.Emailing a deck mints one token per recipient automatically. When you use
slideless share-email, the dashboard’s “Share via email” modal, or the share-presentation-email plugin skill, each recipient gets their own named token (name = recipient email). You don’t have to call slideless share manually for each one — per-recipient opens show up under that recipient’s address in the Share links table.Lifecycle
Anatomy
| Field | Type | Description |
|---|---|---|
tokenId | UUIDv7 string | The internal ID (stable, used for revocation + pinning) |
token | base64url string | The actual secret in the URL — 384 bits of entropy |
name | string | Human-readable label (e.g. "default", "John at Acme") |
versionMode | {type:'latest'} or {type:'pinned', version:N} | Which version this token resolves to. See Versioning. |
createdAt, createdBy | timestamp / userId | When and by whom |
revoked | boolean | If true, the share URL returns 403 |
revokedAt, revokedBy | timestamp / userId / null | Set on revocation |
lastAccessedAt | timestamp / null | Most recent view |
accessCount | number | Total views via this token |
Pin a token to a specific version
?v=N query parameter. A latest token sees the current version; a pinned token sees exactly that version. Only the owner, from the dashboard, can browse history. See Versioning for why.
Security guarantees
Share tokens are designed to be safe to put in URLs:- 384 bits of entropy — far beyond brute-forcing. No rate limit needed for this reason alone.
- Constant-time comparison — token validation iterates all tokens and uses bitwise XOR to prevent timing attacks. An attacker can’t infer how close their guess was from the response time.
- Generic 404s — if the token is wrong or the share ID doesn’t exist, you get the same
404response. There’s no way to enumerate share IDs by probing.
What a token does NOT do
- It doesn’t authenticate the viewer (no login required, no identity checked).
- It doesn’t expire (in v1 —
expiresAtexists in the data model but isn’t enforced). - It doesn’t restrict who can view — anyone with the URL can open it. Use revocation when a token shouldn’t be valid anymore.
Operational notes
- Don’t shorten the URL through public link shorteners — they often log clicks and can leak the token.
- Treat the URL like a password for the deck content. If you wouldn’t email the content directly, don’t email the URL.
- For high-sensitivity decks that need access control (login, allowlist), Slideless isn’t the right tool today. The share-token model assumes public-with-tracking, not gated access.