For most use cases, the
slideless CLI handles the upload flow end-to-end — you rarely need to call this endpoint directly. This reference is for custom tooling that can’t run Node.The three-step upload flow
Slideless uses a content-addressed upload protocol. Each file is stored by its SHA-256 hash, so unchanged files across deck versions dedupe automatically.POST /precheckAssets— send hashes, get back which ones are missing. (This page.)POST /uploadPresentationAsset— upload each missing blob (multipart, streamed).POST /commitPresentationVersion— commit the manifest, bump the version.
Endpoint
Auth
| Header | Value |
|---|---|
Authorization | Bearer cko_… (or cka_…) |
Content-Type | application/json |
presentations:write.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
hashes | string[] | yes | SHA-256 hashes (64 lowercase hex chars each). Max 2000 per call. |
presentationId | string | no | Check against this existing presentation’s blob store. Requires ownership. |
sessionId | string | no | Carry a session from a prior call. Mutually exclusive with presentationId. |
- New presentation (first call): omit both
presentationIdandsessionId. Response includessessionId+ reservedpresentationIdto use foruploadPresentationAssetandcommitPresentationVersion. - Update existing presentation: pass
presentationId. Backend checks dedup against that presentation’s blob store. - Subsequent calls in a new-presentation flow: pass the
sessionIdyou got from the first call.
Response (200)
New-presentation flow (no presentationId in request)
Update flow (presentationId in request)
| Field | Description |
|---|---|
missing | Subset of input hashes that need uploading. Everything else is already in the store. |
sessionId | Only present on new-presentation flow. Pass on subsequent calls. Sessions auto-expire after 1 hour. |
presentationId | Only present on new-presentation flow. The reserved presentationId for the final commit. |
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid-argument | hashes isn’t an array, >2000 entries, or entries don’t match the sha256 regex |
401 | unauthenticated | Missing/invalid API key |
403 | permission-denied | Key lacks presentations:write, or caller is not the owner or an active dev collaborator |
404 | not-found | presentationId or sessionId doesn’t exist (sessions expire after 1 hour) |
Next
- POST /uploadPresentationAsset — upload missing blobs (step 2).
- POST /commitPresentationVersion — commit the manifest (step 3).