Skip to main content

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.

For most use cases, the slideless CLI is easier than calling these endpoints directly. The CLI wraps every operation, handles auth, and offers stable JSON output via --json. This reference is for when you can’t (or don’t want to) use the CLI.

Base URL

https://europe-west1-slideless-ai.cloudfunctions.net
All endpoints are Cloud Functions in europe-west1. There is no URL versioning — the base above is the only stable one.

Authentication

Every endpoint (except getSharedPresentation, which is token-based) requires the Authorization header:
Authorization: Bearer cko_your_organization_api_key
Two key formats are accepted:
PrefixTypeWhen to use
cko_Organization API keyAlmost always
cka_Admin API keyInternal platform tooling only
See Authentication and API keys for the full story.

Response format

Every CLI-facing endpoint wraps its payload in a consistent envelope: Success:
{ "success": true, "data": { "...": "endpoint-specific payload" } }
Error:
{
  "success": false,
  "error": {
    "code": "unauthenticated",
    "message": "Invalid or missing API key."
  }
}
Some errors carry error.nextAction (a machine-readable hint) and error.details (extra structured context). The public viewer endpoint (getSharedPresentation) is the only exception — it returns raw bytes (HTML, image, video, etc.) because it feeds the share iframe directly.

Status codes

StatusMeaning
200Success
206Partial content (Range response on getSharedPresentation asset fetches)
304Not Modified (asset matches If-None-Match)
400Bad request — missing or invalid arguments, or hash mismatch on asset upload
401Missing or invalid API key
403Authenticated but not allowed (wrong owner, revoked token, missing scope)
404Resource not found, or generically returned to prevent enumeration
405Wrong HTTP method
409Conflict — push’s expectedBaseVersion lags the server
410Gone — token revoked or share expired
413Payload too large (exceeds plan cap)
500Internal error — retry with backoff

The three-step upload flow

Creating or updating a presentation uses content-addressed storage across three endpoints:
  1. POST /precheckAssets — hash every local file, ask the backend which hashes it already has.
  2. POST /uploadPresentationAsset — multipart upload, once per missing blob. Hash-verified server-side.
  3. POST /commitPresentationVersion — send the manifest, backend writes a new immutable version.
Unchanged blobs across versions dedupe automatically — updates transfer only what actually changed.

Endpoint index

Upload flow

EndpointMethodAuthPurpose
/precheckAssetsPOSTAPI keyWhich hashes are missing? Mints upload session on new-presentation flow.
/uploadPresentationAssetPOSTAPI keyUpload one blob (multipart). Hash-verified.
/commitPresentationVersionPOSTAPI keyCommit the manifest. Creates presentation or bumps version.

Discovery + management

EndpointMethodAuthPurpose
/listMyPresentationsGETAPI keyList presentations you can access (owned + shared-with-you), cap 100
/getSharedPresentationInfo/{presentationId}GETAPI keyFull metadata + token list for one presentation
/addPresentationTokenPOSTAPI keyMint a new named token
/setTokenVersionModePOSTAPI key (owner)Pin a token to a version or follow latest
/listPresentationVersions/{presentationId}GETAPI key (owner or dev)List every version’s summary
/getPresentationVersion/{presentationId}/{version}GETAPI key (owner or dev)Get a specific version’s full manifest
/downloadPresentationAssetGETAPI key (owner or dev)Authenticated streaming download of a single asset by sha256
/unsharePresentationPOSTAPI key (owner)Revoke one token or every token on the deck
/deletePresentationPOSTAPI key (owner)Hard delete — Firestore doc, every version, every asset, every collaborator row
/inviteCollaboratorPOSTAPI key (owner)Grant dev (edit) access by email
/uninviteCollaboratorPOSTAPI key (owner)Revoke a dev collaborator
/listCollaboratorsPOSTAPI key (owner)Every collaborator row (pending/active/revoked)
/sharePresentationViaEmailPOSTAPI keyEmail to 1–20 recipients with per-recipient tracked links

Public viewer

EndpointMethodAuthPurpose
/getSharedPresentation/{presentationId}/_t/{token}/...GETToken in URLServes entry HTML + assets. Range-request aware for video.

Auth

EndpointMethodAuthPurpose
/verifyApiKeyPOSTAPI keyValidate a key, return its metadata
CLI OTP flowPOSTnoneSignup/login via 6-digit email OTP

Limits

Plan-dependent. See Presentations → Size and file-count caps for the full table. Free tier summary:
LimitValue
Single HTML file10 MB
Single asset blob50 MB
Total deck size250 MB
Files per manifest500
Precheck hashes per call2000
Upload session TTL1 hour
List response cap100 presentations (no cursor pagination)
API keys per organization20

CORS

All HTTP endpoints set cors: true — they accept browser requests from any origin. Authorization and Content-Type are allowed headers.

Idempotency

  • precheckAssets is idempotent — repeat calls return the same missing set.
  • uploadPresentationAsset is idempotent — if the blob already exists, the call succeeds and returns size: 0.
  • commitPresentationVersion is NOT idempotent — each call bumps currentVersion.