API reference

Video

Video projects: proxies and mixdowns uploaded in parts, the poster frame, transcriptions into captions, and the app's limits and export presets.

See Video. A video project is an office file (application/vnd.si.video), so it's created, opened, co-edited, versioned and commented on through the Documents, Sheets and Slides routes with kind: "video", and its media are Drive files. These routes add what Video keeps beside a project. They're under /v1/orgs/:orgId/video (an organization's projects) and /v1/me/video (your own); an organization's need a plan with Documents, Sheets, Slides and Video.

Proxies and mixdowns upload like Drive's files: POST files/:fileId/proxies answers the part size and links for the first parts; PUT each part's bytes to its link, ask …/parts for more links, then …/complete. They're stored with the project, count against its space's storage, can be read by anyone who can read the project (GET /v1/orgs/:orgId/office/files/:fileId/media/:mediaId), and go when it's deleted. Making a copy of a project leaves its proxies behind.

Transcriptions run on Amazon Transcribe in the platform's home region and take a minute or more. The caption track arrives in the project by itself, so people with it open see it appear; GET …/transcriptions/:transcriptionId reports progress. Each person has a daily allowance of minutes (video.transcribeMinutesPerDay).

Times are in flicks, 1/705,600,000 of a second, as in the project itself.

Changes need drive:write as well as edit access to the project.

GET /v1/orgs/:orgId/video/files/:fileId/proxies

The project's finished proxies: each one's media item (mediaRef), name, type and size. Read a proxy through Office's GET …/office/files/:fileId/media/:mediaId.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.

Response 200

{
  proxies: {
    mediaId: string
    mediaRef: null | string
    name: string
    mime: string
    size: number
    createdAt: number
  }[]
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/orgs/:orgId/video/files/:fileId/proxies

Starts an upload into the project in parts: a proxy of a media item (mediaRef, MP4 or WebM, up to video.proxyMb) or, with purpose: "audio", the mixdown to transcribe. Answers mediaId, partSize, partCount and links for the first parts. Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.

Request body

FieldTypeRequiredNotes
mediaRefstringNoup to 64 characters
namestringYes1–255 characters
sizeintegerYes≥ 1
mimestringYesup to 100 characters
purpose"proxy" | "audio"No

Response 201

{
  mediaId: string
  uploadId: string
  partSize: number
  partCount: number
  urls: {
    [key: number]: string
  }
  expiresIn: number
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/orgs/:orgId/video/files/:fileId/proxies/:mediaId/parts

Links for more parts (parts, 1 to 100 part numbers).

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Request body

FieldTypeRequiredNotes
partsinteger[]Yes1–100 items; each 1–10000

Response 200

{
  urls: {
    [key: number]: string
  }
  expiresIn: number
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/orgs/:orgId/video/files/:fileId/proxies/:mediaId/complete

Finishes the upload once every part is in; it then counts against the space's storage.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Response 200

{
  mediaId: string
  size: number
  mime: string
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

DELETE /v1/orgs/:orgId/video/files/:fileId/proxies/:mediaId

Deletes a proxy, a mixdown or an unfinished upload of one, giving its storage back (when its media item leaves the project, or to make it again). Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Response 200

{
  deleted: boolean
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

PUT /v1/orgs/:orgId/video/files/:fileId/poster

Saves the project's poster frame (the body: a WebP or JPEG of at most 1 MB). Drive's thumbnail of the project follows. Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.

Response 200

{
  mediaId: string
  size: number
  mime: string
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.
413Posters can be at most 1 MB.

POST /v1/orgs/:orgId/video/files/:fileId/transcriptions

Captions from speech: the uploaded mixdown (audioMediaId, duration in flicks) or one media item (source: "media", mediaId) into a new caption track of sequenceId from from, in language (or auto), with up to speakers voices told apart. 202 with the job; the track arrives in the project when it's done. Counts against your daily transcription minutes.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.

Response 202

{
  transcription: {
    id: string
    fileId: string
    sequenceId: string
    status: "queued" | "done" | "failed" | "running"
    language: string
    detected?: string
    minutes: number
    trackId?: string
    cues?: number
    error?: string
    createdAt: number
  }
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

GET /v1/orgs/:orgId/video/files/:fileId/transcriptions/:transcriptionId

A transcription job: status (running, done, failed), the caption track it made (trackId) and its cue count, or why it failed.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:orgIdOrganization id (org_…).
:fileIdFile id, as returned when the upload was created.
:transcriptionIdA Video transcription job's id (vtr_…).

Response 200

{
  transcription: {
    id: string
    fileId: string
    sequenceId: string
    status: "queued" | "done" | "failed" | "running"
    language: string
    detected?: string
    minutes: number
    trackId?: string
    cues?: number
    error?: string
    createdAt: number
  }
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

GET /v1/me/video/files/:fileId/proxies

The project's finished proxies: each one's media item (mediaRef), name, type and size. Read a proxy through Office's GET …/office/files/:fileId/media/:mediaId.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.

Response 200

{
  proxies: {
    mediaId: string
    mediaRef: null | string
    name: string
    mime: string
    size: number
    createdAt: number
  }[]
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/me/video/files/:fileId/proxies

Starts an upload into the project in parts: a proxy of a media item (mediaRef, MP4 or WebM, up to video.proxyMb) or, with purpose: "audio", the mixdown to transcribe. Answers mediaId, partSize, partCount and links for the first parts. Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.

Request body

FieldTypeRequiredNotes
mediaRefstringNoup to 64 characters
namestringYes1–255 characters
sizeintegerYes≥ 1
mimestringYesup to 100 characters
purpose"proxy" | "audio"No

Response 201

{
  mediaId: string
  uploadId: string
  partSize: number
  partCount: number
  urls: {
    [key: number]: string
  }
  expiresIn: number
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/me/video/files/:fileId/proxies/:mediaId/parts

Links for more parts (parts, 1 to 100 part numbers).

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Request body

FieldTypeRequiredNotes
partsinteger[]Yes1–100 items; each 1–10000

Response 200

{
  urls: {
    [key: number]: string
  }
  expiresIn: number
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

POST /v1/me/video/files/:fileId/proxies/:mediaId/complete

Finishes the upload once every part is in; it then counts against the space's storage.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Response 200

{
  mediaId: string
  size: number
  mime: string
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

DELETE /v1/me/video/files/:fileId/proxies/:mediaId

Deletes a proxy, a mixdown or an unfinished upload of one, giving its storage back (when its media item leaves the project, or to make it again). Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.
:mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (med_…): pictures, Video's proxies, its poster and transcription mixdowns.

Response 200

{
  deleted: boolean
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

PUT /v1/me/video/files/:fileId/poster

Saves the project's poster frame (the body: a WebP or JPEG of at most 1 MB). Drive's thumbnail of the project follows. Editors only.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.

Response 200

{
  mediaId: string
  size: number
  mime: string
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.
413Posters can be at most 1 MB.

POST /v1/me/video/files/:fileId/transcriptions

Captions from speech: the uploaded mixdown (audioMediaId, duration in flicks) or one media item (source: "media", mediaId) into a new caption track of sequenceId from from, in language (or auto), with up to speakers voices told apart. 202 with the job; the track arrives in the project when it's done. Counts against your daily transcription minutes.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.

Response 202

{
  transcription: {
    id: string
    fileId: string
    sequenceId: string
    status: "queued" | "done" | "failed" | "running"
    language: string
    detected?: string
    minutes: number
    trackId?: string
    cues?: number
    error?: string
    createdAt: number
  }
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

GET /v1/me/video/files/:fileId/transcriptions/:transcriptionId

A transcription job: status (running, done, failed), the caption track it made (trackId) and its cue count, or why it failed.

Auth: user access token or platform agent key · Scope: drive:read

Path parameterDescription
:fileIdFile id, as returned when the upload was created.
:transcriptionIdA Video transcription job's id (vtr_…).

Response 200

{
  transcription: {
    id: string
    fileId: string
    sequenceId: string
    status: "queued" | "done" | "failed" | "running"
    language: string
    detected?: string
    minutes: number
    trackId?: string
    cues?: number
    error?: string
    createdAt: number
  }
}

Errors

StatusMessage
403Personal files are only for the person, signed in.
403This key has no person behind it, so it can't open Drive files.
403The person who made this key isn't in the organization any more.

GET /v1/video/config

Video's limits (limits, from Admin → Limits), the export presets (presets, with the platform's changes) and what Transcribe offers (transcribe: whether it's on, its languages and the minutes allowed). People only.

Auth: user access token or platform agent key

Response 200

{
  limits: {
    "video.clipsPerProject": number
    "video.tracksPerSequence": number
    "video.mediaPerProject": number
    "video.mediaGb": number
    "video.proxyMb": number
    "video.maxExportSide": number
    "video.exportMinutes": number
    "video.cacheGb": number
    "video.historyStates": number
    "video.transcribeMinutesPerDay": number
    "video.transcribeMinutesPerJob": number
  }
  catalog: {
    id: "video.clipsPerProject" | "video.tracksPerSequence" | "video.mediaPerProject" | "video.mediaGb" | "video.proxyMb" | "video.maxExportSide" | "video.exportMinutes" | "video.cacheGb" | "video.historyStates" | "video.transcribeMinutesPerDay" | "video.transcribeMinutesPerJob"
    label: "History states" | "Clips per project" | "Tracks per sequence" | "Media items per project" | "Largest source file (GB)" | "Largest proxy (MB)" | "Largest export side (pixels)" | "Longest export (minutes)" | "Device cache, largest (GB)" | "Transcription per person per day (minutes)" | "Longest transcription (minutes)"
  }[]
  presets: {
    id: string
    label: string
    description?: string
    settings: {
      container: "mp4" | "webm"
      video: null | {
        codec: "av1" | "avc" | "hevc" | "vp9"
        width: number
        height: number
        frameRate: {
          num: number
          den: number
        }
        bitrate: number
        bitrateMode: "variable" | "constant"
        keyframeEvery: number
        profile?: string
        hardware: "no-preference" | "prefer-hardware" | "prefer-software"
      }
      audio: null | {
        codec: "aac" | "opus"
        sampleRate: 48000 | 44100
        channels: 2 | 1
        bitrate: number
      }
      timecodeOverlay?: boolean
      loudness?: null | {
        target: number
        truePeak: number
      }
    }
  }[]
  transcribe: {
    available: boolean
    languages: [{
      code: "en-AU"
      label: "English (Australia)"
    }, {
      code: "en-US"
      label: "English (US)"
    }, {
      code: "en-GB"
      label: "English (UK)"
    }, {
      code: "en-NZ"
      label: "English (New Zealand)"
    }, {
      code: "en-IN"
      label: "English (India)"
    }, {
      code: "en-IE"
      label: "English (Ireland)"
    }, {
      code: "en-ZA"
      label: "English (South Africa)"
    }, {
      code: "zh-CN"
      label: "Chinese (Simplified)"
    }, {
      code: "zh-TW"
      label: "Chinese (Traditional)"
    }, {
      code: "zh-HK"
      label: "Cantonese"
    }, {
      code: "es-ES"
      label: "Spanish (Spain)"
    }, {
      code: "es-US"
      label: "Spanish (US)"
    }, {
      code: "fr-FR"
      label: "French (France)"
    }, {
      code: "fr-CA"
      label: "French (Canada)"
    }, {
      code: "de-DE"
      label: "German"
    }, {
      code: "it-IT"
      label: "Italian"
    }, {
      code: "pt-BR"
      label: "Portuguese (Brazil)"
    }, {
      code: "pt-PT"
      label: "Portuguese (Portugal)"
    }, {
      code: "ja-JP"
      label: "Japanese"
    }, {
      code: "ko-KR"
      label: "Korean"
    }, {
      code: "hi-IN"
      label: "Hindi"
    }, {
      code: "ar-SA"
      label: "Arabic"
    }, {
      code: "ru-RU"
      label: "Russian"
    }, {
      code: "nl-NL"
      label: "Dutch"
    }, {
      code: "sv-SE"
      label: "Swedish"
    }, {
      code: "da-DK"
      label: "Danish"
    }, {
      code: "no-NO"
      label: "Norwegian"
    }, {
      code: "fi-FI"
      label: "Finnish"
    }, {
      code: "pl-PL"
      label: "Polish"
    }, {
      code: "tr-TR"
      label: "Turkish"
    }, {
      code: "el-GR"
      label: "Greek"
    }, {
      code: "he-IL"
      label: "Hebrew"
    }, {
      code: "id-ID"
      label: "Indonesian"
    }, {
      code: "ms-MY"
      label: "Malay"
    }, {
      code: "th-TH"
      label: "Thai"
    }, {
      code: "vi-VN"
      label: "Vietnamese"
    }, {
      code: "tl-PH"
      label: "Filipino"
    }, {
      code: "uk-UA"
      label: "Ukrainian"
    }]
    minutesPerDay: number
    minutesPerJob: number
  }
}

Errors

StatusMessage
403Video's settings are for people signed in.