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
subtitles:readView subtitles
subtitles:writeGenerate 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
usage:readView usage statistics
process:writeUse one-shot process endpoint

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"
}
}

Scope-to-endpoint mapping

EndpointRequired scope
GET /v1/videosvideos:read
POST /v1/videos/uploadvideos: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_*).