Files
2026-07-13 12:20:06 +08:00

3.2 KiB

Auth and Processing Modes

Authentication Model

Scribe uses a Build-platform JWT bearer token.

JWT shape:

  • algorithm: HS256
  • issuer claim: Build-platform credential identifier used by the Scribe API
  • expiration: keep to one hour or less

Node example:

import { KJUR } from 'jsrsasign';

export function generateJWT(apiKey, apiSecret) {
  const iat = Math.round(Date.now() / 1000) - 30;
  const exp = iat + 60 * 60;
  return KJUR.jws.JWS.sign(
    'HS256',
    JSON.stringify({ alg: 'HS256', typ: 'JWT' }),
    JSON.stringify({ iss: apiKey, iat, exp }),
    apiSecret,
  );
}

Credential Naming Drift

Zoom docs currently use inconsistent labels across AI Services pages:

  • API key / API secret
  • SDK key / SDK secret
  • Build platform credentials

For implementation, treat them as the Build-platform JWT issuer/secret pair used to sign Scribe requests. Verify the exact labels in the current portal UI before shipping.

Fast Mode vs Batch Mode

Mode Best for Transport Result timing
Fast mode One short file, interactive UX POST /transcribe Immediate synchronous JSON
Batch mode Archives, long media, many files POST /jobs then status/webhook Asynchronous

Fast Mode Request Shape

  • required: file, config
  • common config: language, word_time_offsets, channel_separation, timestamps, output_format, profanity_filter, diarization

Batch Mode Request Shape

  • required: input, output, config
  • input modes: SINGLE, PREFIX, MANIFEST
  • storage provider currently surfaced in the OpenAPI as S3
  • optional webhook callback: notifications.webhook_url + notifications.secret

Operational Choice

Choose fast mode when:

  • user uploads one file
  • latency matters more than throughput
  • file size and duration are manageable
  • you are building pseudo-streaming over short microphone chunks from a browser UI

Choose batch mode when:

  • many files must be processed
  • transcripts can arrive later
  • storage-centric workflows fit better than direct upload

Browser Microphone Pseudo-Streaming

Scribe is file-oriented, so a browser microphone UX should be modeled as repeated short uploads, not a long-lived stream.

Recommended pattern:

  1. capture browser microphone audio with MediaRecorder
  2. flush short chunks to your backend
  3. submit each chunk through the async fast-mode wrapper
  4. poll by request ID
  5. append transcript chunks in order

Recommended starting values:

  • chunk size: 5 seconds
  • acceptable range: 5-10 seconds
  • concurrent in-flight chunks: 2-3

Why this works:

  • lowers the chance of frontend 504 on longer synchronous requests
  • gives incremental transcript updates without waiting for one long request

Guardrail:

  • this is pseudo-streaming over file uploads
  • this is not the preferred production design for live audio capture
  • use it only when a lightweight browser demo or rough incremental transcript is acceptable
  • avoid it when you need stable low-latency live transcription, lower overhead, or stronger continuity across utterances
  • for true live media streams, low-latency server ingest, or continuous in-meeting audio, use rtms