Two key types
| Type | Prefix | Scope | Created via |
|---|---|---|---|
| Organization key | cko_ | Acts on behalf of one org | Dashboard → Organization → API Keys |
| Admin key | cka_ | Cross-org platform admin | Internal tooling only — not user-creatable |
Where the key goes
Every API call sends the key in theX-Process-Manager-Key header:
Authorization: Bearer … — that pattern doesn’t apply here. The X-Process-Manager-Key header is the only accepted form.
Scopes
When you create an organization key, you pick scopes:| Scope | What it allows |
|---|---|
presentations:write | Upload, update, archive presentations |
presentations:read | List your presentations, get presentation metadata |
403 forbidden from the affected endpoint. Pick the narrowest scope set that fits the use case — a script that only lists decks should use presentations:read only.
Lifecycle
| Transition | How |
|---|---|
| Create | Dashboard → Organization → API Keys → “Create API key” |
| View raw value | Once, at creation. Slideless stores only a SHA-256 hash. |
| Use | Send in X-Process-Manager-Key header |
| Revoke | Dashboard → API Keys → click “Revoke” |
| Rotate | Create a new key, update your callers, revoke the old key |
What’s stored, what isn’t
Slideless stores:- A SHA-256 hash of the key (not the raw value)
- The prefix (first 8 chars) for display in the UI
- Metadata: name, description, scopes, organizationId, userId, createdAt, lastUsedAt, expiresAt
Limits
| Limit | Value |
|---|---|
| API keys per organization | 20 |
| Keys per user | No additional cap |
| Key length | Fixed (auto-generated; you can’t choose) |
| Per-key rate limit | None enforced in v1 |
Verifying a key
You can test a key without making a destructive call:200 with metadata (name, scopes, organizationId, expiresAt) on success, 401 on failure. The marketplace setup-slideless skill uses this endpoint to validate keys before saving them locally.
See POST /verifyApiKey for the full response shape.
Errors you might see
| Status | Meaning | Fix |
|---|---|---|
401 unauthenticated | Missing or invalid key | Check the X-Process-Manager-Key header value |
403 forbidden | Key valid but missing the required scope | Recreate the key with the correct scope |
403 forbidden | Key has been revoked | Create a new key |
Operational guidance
- Treat keys as secrets. Don’t commit them to git, don’t paste them in chat, don’t put them in client-side code.
- Use one key per integration. Easier to rotate, easier to attribute usage.
- Set
lastUsedAtreminders. If a key hasn’t been used in a long time, it’s a candidate for revocation. - Prefer scoped keys over admin-style “do anything” keys. Even if the dashboard only offers
presentations:readandpresentations:writetoday, picking the minimum reduces blast radius later.