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

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_*).