Open Caven

Reference

Authentication

Creating API keys, scopes, and how a key decides what you can read

4 min read

Every request needs an API key in the X-API-Key header:

curl https://developers.caven.io/public/v1/recordings \
  -H "X-API-Key: sk_your_key_here"

Keys start with sk_, followed by 64 hexadecimal characters. Authorization: Bearer is not accepted. A request without an X-API-Key header is rejected with 401 API_KEY_REQUIRED.

Creating a key

API keys are managed by organization admins.

  1. In the web app, open Settings → API Keys and click New Key.
  2. Choose Personal or Organization (see below). This choice sits at the top of the form and only appears when you belong to an organization.
  3. Enter a Key Name (for example "CRM sync") so you can recognize it later.
  4. Optionally set an Expiry date. Leave it empty for a key that never expires.
  5. Pick the Scopes the key needs. The defaults cover all text data. For an on-prem connector, click On-prem connector to select exactly the twelve scopes a connector needs.
  6. Confirm your identity. If you have two-factor authentication turned on, enter your authenticator code. Otherwise Caven emails you a 6-digit code, valid for 10 minutes.
  7. Copy the key.

The key is shown once

Caven stores only a hash of the key, so it can't show it to you again. If you lose it, delete it and create a new one.

Personal and organization keys

Personal keyOrganization key
Who can create oneOrganization admins, for themselvesOrganization admins
RecordingsOnly recordings you madeYour own recordings and those in the spaces you can open in Caven. With recordings:organization-wide: every recording made by a member of the organization, including people who have since left
Action items, speakers, tagsYour ownThe organization's
/organization/...The organization you belong toThe key's organization
Narrow to one memberNoYes, with ?userId=

Narrowing an organization key to one member

On any recording, action item, speaker or tag list, an organization key accepts ?userId= to return only that member's data:

curl "https://developers.caven.io/public/v1/recordings?userId=cmjal5xyj0000vaz4po9spv16" \
  -H "X-API-Key: sk_your_org_key"

A user ID from outside your organization returns an empty list. Get member IDs from /organization/users.

Spaces stay confidential

An organization key reads what its creator can open in Caven: their own recordings and the recordings in the spaces they are a member of. A space they are not in, or are excluded from, stays closed to the key, the same as in the app. To read every member's recordings, grant the recordings:organization-wide scope when you create the key. An on-prem connector key reaches the organization's recordings while Docker on-prem delivery is on.

Scopes

A scope grants access to a group of endpoints. A request to an endpoint the key has no scope for fails with 403 INSUFFICIENT_SCOPE.

ScopeGrantsDefault
recordings:listGET /recordingsYes
recordings:getGET /recordings/:idYes
transcripts:listTranscripts and notesYes
summaries:listAI summariesYes
action-items:listAction itemsYes
speakers:listSpeaker profilesYes
tags:listTagsYes
organization:readOrganization, members, teams, foldersYes
media:listList a recording's stored media filesNo
media:downloadDownload stored media (encrypted)No
media:keyRetrieve media decryption keysNo
connector:registerRegister an on-prem connectorNo
recordings:organization-wideOrganization keys only: read every member's recordings, including spaces the key's creator is not a member ofNo

The four media and connector scopes are never part of Select all or the defaults. They let a caller download recordings and obtain the keys to decrypt them, so you must grant them on purpose, one by one or with the On-prem connector button. See On-prem connector.

Older scope names

Keys created with earlier scope names keep working. recordings:read covers recordings:list and recordings:get, transcripts:read covers transcripts:list, summaries:read covers summaries:list, and recordings:transcript, recordings:summary, recordings:action-items and recordings:speakers cover the matching :list scope. None of the older names grant the media or connector scopes.

Older keys without scopes

Keys created before scopes existed have an empty scope list. Those keys can reach every endpoint except the media and connector ones. Create a new key if you want to limit access.

Managing keys

Under Settings → API Keys you can:

  • Deactivate a key. It stops working immediately with 401 API_KEY_INVALID, and you can turn it back on later.
  • Delete a key. This is permanent.
  • See when each key was last used, plus a log of recent requests (method, path, status and duration).

An expired key returns 401 API_KEY_EXPIRED.

Authentication errors

StatuscodeMeaning
401API_KEY_REQUIREDNo X-API-Key header
401API_KEY_INVALIDUnknown, deleted or deactivated key
401API_KEY_EXPIREDThe key's expiry date has passed
403INSUFFICIENT_SCOPEThe key exists but lacks the scope for this endpoint
500AUTH_ERRORThe key could not be checked because of a server error. Retry later
© 2026 Caven BV. All rights reserved. Built in Belgium.EU · GDPR · AI Act · Privacy-first · ISO 27001

On this page