Skip to main content

OAuth Scopes

Scopes control what an OAuth token can access. Users see scope descriptions on the consent screen before approving.

Available scopes​

ScopeDescription
videos:readView videos in the workspace
videos:writeUpload and modify videos
projects:readView project folders
projects:writeCreate, update, and delete project folders
subtitles:readView subtitles
subtitles:writeGenerate and edit subtitles
export:writeExport videos
translate:writeTranslate videos
voiceover:writeGenerate voiceovers
article:readView help articles
article:writeGenerate help articles
analyze:writeAnalyze videos
tools:readList and view tools
tools:writeExecute tools
jobs:readView job status
courses:readView courses and their storyboards
courses:writeCreate courses and run planning, storyboarding and generation
studio:readView Studio projects and templates
studio:writeCreate, edit and share Studio projects
modules:readView training modules, results and qualifications
modules:writeCreate, edit and translate training modules; record attempts and sign-offs
remixes:readView remixes and their analysis
remixes:writeCreate remixes and run analysis
recordings:readView AI Recorder jobs and saved logins
recordings:writeStart recordings and manage saved logins
knowledge_base:readView the knowledge base, its articles and analytics
knowledge_base:writeCreate and edit knowledge base content
brand_kit:readView Brand Kit settings, skills and glossary
brand_kit:writeChange Brand Kit settings, skills and glossary
usage:readView usage statistics
voices:readList available voices
voices:writeDelete cloned voices
avatars:readList available AI avatars
avatars:writeCreate custom AI avatars
webhooks:readView webhook subscriptions
webhooks:writeCreate, update, and delete webhooks
process:writeUse one-shot process endpoint
approvals:readView approval rounds and requests
approvals:writeRequest, decide and withdraw approvals
comments:readView comments on videos
comments:writeAdd and delete comments
locks:writeLock and unlock videos and modules

Requesting scopes​

Pass scopes as a space-separated string in the authorization URL:

scope=videos:read+analyze:write+jobs:read

Or URL-encoded:

scope=videos%3Aread%20analyze%3Awrite%20jobs%3Aread

Scope enforcement​

  • Tokens can only use the scopes that were approved by the user
  • Requesting an endpoint without the required scope returns 403:
{
"error": {
"code": "insufficient_scope",
"message": "This action requires the \"export:write\" scope. Your token has: videos:read, analyze:write"
}
}

Scopes are not the only gate​

A scope says what your integration asked for. The workspace role of the user who authorized it says what that person may do, and both must allow the action. A token granted videos:write by someone whose role is viewer is still refused, with insufficient_role.

RoleCan createCan editCan deleteCan export
owner, admin, creatoryesyesyesyes
developer, editornoyesnoyes
viewernononoyes

Request the narrowest scopes you need, and expect that some users will authorize your app with less power than the scopes imply.

Scope-to-endpoint mapping​

EndpointRequired scope
GET /v1/videosvideos:read
POST /v1/videos/uploadvideos:write
GET /v1/projectsprojects:read
GET /v1/projects/:idprojects:read
POST /v1/projectsprojects:write
PATCH /v1/projects/:idprojects:write
DELETE /v1/projects/:idprojects:write
POST /v1/videos/:id/analyzeanalyze:write
POST /v1/videos/:id/exportexport:write
POST /v1/videos/:id/translatetranslate:write
GET /v1/videos/:id/subtitlessubtitles:read
POST /v1/videos/:id/voiceovervoiceover:write
POST /v1/videos/:id/articlearticle:write
POST /v1/videos/processprocess:write
GET /v1/toolstools:read
POST /v1/tools/:type/executetools:write
GET /v1/jobs/:idjobs:read
GET /v1/usageusage:read

API keys and scopes​

API keys (vdo_live_*) bypass scope checks entirely — they have full access to all endpoints allowed by the workspace plan. Scopes only apply to OAuth access tokens (vdo_oat_*).