Scribe
AnthropicOfficialCreated by ZoomDistributed by Anthropic
- Skill
- Tool integration
- Automation and integrations
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Scribe is a Zoom AI service providing transcription capabilities for uploaded or stored media. It supports both synchronous fast-mode transcription for individual files and asynchronous batch processing for larger archives. The skill covers authentication via Build-platform JWTs, API endpoint usage, webhook integration for status updates, and architectural patterns for handling media transcription pipelines.
What it does
- Provides documentation for synchronous transcription of single media files.
- Details asynchronous batch job submission and management.
- Explains Build-platform JWT generation and credential handling.
- Outlines webhook integration for receiving batch job status notifications.
- Offers guidance on managing media inputs and transcript outputs via S3.
- Provides API reference for managing transcription jobs and file results.
When to use it
- When you need to transcribe stored audio or video files.
- When implementing batch processing for large sets of media files.
- When building an ETL pipeline to store transcripts in a database.
- When you need to integrate Zoom transcription into custom applications using JWT authentication.
Advantages
- Supports both synchronous and asynchronous processing modes.
- Enables automated transcription workflows for stored media.
- Provides structured API endpoints for job lifecycle management.
- Allows for webhook-driven status tracking for batch operations.
Usage examples
- “How do I perform a synchronous transcription of a single audio file?”
- The agent provides the endpoint for POST /aiservices/scribe/transcribe and explains the required file and configuration parameters.
- “What are the steps to submit a batch transcription job?”
- The agent outlines the process of using POST /aiservices/scribe/jobs with S3 source URIs and configuring the necessary output and notification settings.
- “How do I authenticate my requests to the Scribe API?”
- The agent explains the requirement for generating an HS256 JWT using the Build-platform API key and secret.
- “How can I track the status of a batch transcription job?”
- The agent describes using the GET /aiservices/scribe/jobs/{jobId} endpoint or configuring a webhook URL for status notifications.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/anthropics/scribe/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip scribe.zip -d .agents/skills
Documentation by Zoom
Zoom AI Services Scribe
Background reference for Zoom AI Services Scribe across:
synchronous single-file transcription (
POST /aiservices/scribe/transcribe)asynchronous batch jobs (
/aiservices/scribe/jobs*)browser microphone pseudo-streaming via repeated short file uploads
webhook-driven batch status updates
Build-platform JWT generation and credential handling
Official docs:
https://developers.zoom.us/api-hub/ai-services/methods/endpoints.json
Quickstart sample: https://github.com/zoom/scribe-quickstart/
Routing Guardrail
If the user needs uploaded or stored media transcribed into text, route here first.
If the user needs live meeting media without file-based upload/batch jobs, route to ../rtms/SKILL.md.
If the user needs Zoom REST API inventory for AI Services paths, chain ../rest-api/SKILL.md.
If the user needs webhook signature patterns or generic HMAC receiver hardening, optionally chain ../webhooks/SKILL.md.
Quick Links
Core Workflow
Get Build-platform credentials and generate an HS256 JWT.
Choose fast mode for one short file or batch mode for stored archives / large sets.
Submit the transcription request.
For batch jobs, poll job/file status or receive webhook notifications.
Persist and post-process transcript JSON.
Hosted Fast-Mode Guardrail
The formal fast-mode API limits are
100 MBand2 hours, but hosted browser flows can still time out before the upstream response returns.Current deployed-sample observations:
~17.2 MB MP4 completed in about
26s~38.6 MB MP4 completed in about
26-37s~59.2 MB MP4 completed in about
32-34son the backendsome ~59.2 MB browser requests still surfaced as frontend
504while backend logs later showed200
Treat frontend
504plus backend200as a browser/edge timeout race, not an automatic transcription failure.For hosted UIs, prefer an async request/polling wrapper for fast mode instead of holding the browser open for the full upstream response.
For larger or less predictable media, prefer batch mode even when the file is still within the formal fast-mode size limit.
Browser Microphone Pattern
scribedoes not expose a documented real-time streaming API surface.If you want a browser microphone experience, use pseudo-streaming:
capture microphone audio in short chunks
upload each chunk through the async fast-mode wrapper
poll for completion
append chunk transcripts in sequence
Recommended starting cadence:
chunk size:
5 secondsacceptable range:
5-10 secondsin-flight chunk requests:
2-3
This is a practical UI pattern for incremental transcript updates, not a substitute for
rtms.Treat this as a fallback demo pattern, not the preferred production architecture.
It adds repeated upload overhead, chunk-boundary drift, browser codec/container variability, and transcript stitching complexity.
If the user asks for actual live stream ingestion, low-latency continuous media, or server-push media transport, route to ../rtms/SKILL.md instead.
Endpoint Surface
| Mode | Method | Path | Use |
|---|---|---|---|
| Fast | POST | /aiservices/scribe/transcribe | Synchronous transcription for one file |
| Batch | POST | /aiservices/scribe/jobs | Submit asynchronous batch job |
| Batch | GET | /aiservices/scribe/jobs | List jobs |
| Batch | GET | /aiservices/scribe/jobs/{jobId} | Inspect job summary/state |
| Batch | DELETE | /aiservices/scribe/jobs/{jobId} | Cancel queued/processing job |
| Batch | GET | /aiservices/scribe/jobs/{jobId}/files | Inspect per-file results |
High-Level Scenarios
On-demand clip transcription after a user uploads one recording.
Batch transcription of stored S3 call archives.
Webhook-driven ETL pipeline that writes transcripts to your database/search index.
Re-transcription of Zoom-managed recordings after exporting them to your own storage.
Offline compliance or QA workflows that need timestamps, channel separation, and speaker hints.
Chaining
Stored Zoom recordings -> ../rest-api/SKILL.md +
scribeWebhook verification hardening -> ../webhooks/SKILL.md
Real-time live transcript/media -> ../rtms/SKILL.md
Cross-product routing -> ../general/SKILL.md
Operations
RUNBOOK.md - 5-minute preflight and debugging checklist.
Files
- ATTRIBUTION.mdAdded by AutoGineer968 B
- LICENSELicence file added by AutoGineer1.1 KiB
- RUNBOOK.md4.2 KiB
- SKILL.md5.8 KiB
- concepts/auth-and-processing-modes.md3.2 KiB
- examples/batch-webhook-pipeline.md1.6 KiB
- examples/fast-mode-node.md1.8 KiB
- references/api-reference.md2.6 KiB
- references/environment-variables.md1.5 KiB
- references/samples-validation.md2.0 KiB
- references/versioning-and-drift.md2.0 KiB
- scenarios/high-level-scenarios.md3.1 KiB
- troubleshooting/common-drift-and-breaks.md4.6 KiB
troubleshooting/common-drift-and-breaks.md
Common Drift and Breaks
1. Auth fails even though credentials look correct
Likely causes:
wrong credential pair from the portal
expired JWT
mixing Build-platform credentials with non-Build Zoom app credentials
valid-looking key/secret pair that is not authorized for AI Services Scribe
Check:
issvalueexpwindowcurrent credential labels in portal
if the API responds with
{"code":124,"message":"Invalid Access token"}, treat that as a real upstream auth failure, not a transport problem
2. Fast mode request shape mismatch
Docs show JSON with file URL, but the official quickstart also proxies multipart upload and forwards a FormData request.
Use one clear model per service boundary:
client upload -> your backend multipart
backend upload proxy ->
multipart/form-datato/aiservices/scribe/transcribebackend URL-based submit -> JSON body with
fileURL
Symptoms:
browser request stays pending for a long time
backend eventually returns timeout or empty upstream reply
Preferred fix:
treat uploaded files and URL-based files as two separate request paths instead of forcing both through one JSON shape
3. Fast mode returns 413 Request Entity Too Large
Likely cause:
reverse proxy rejected the upload before the request reached your app
Known deployment check:
if nginx fronts the app, raise
client_max_body_sizeto match or exceed your server-side upload limit
Current Scribe fast-mode API limits:
maximum file size:
100 MBmaximum duration:
2 hours
4. Fast mode returns 504 Gateway time-out
Likely cause:
the request reached your backend, but synchronous processing took too long for the edge/proxy path
Observed deployment behavior:
public HTTPS can time out even when the same request path is valid and the backend is healthy
observed hosted sample timings:
~17.2 MB MP4: ~26s
~38.6 MB MP4: ~26-37s
~59.2 MB MP4: ~32-34s backend completion, but some browser requests still timed out first
Guardrail:
use fast mode for smaller, interactive files
use batch mode for large uploads or longer media where waiting synchronously through the web UI is brittle
add request-level logging for:
file name
file size
mime type
upstream elapsed time
response payload size and top-level keys so you can tell whether the origin completed successfully while the browser/edge timed out
for hosted UIs, wrap fast mode in an async request/polling flow instead of holding the browser open for the entire upstream response
if nginx access logs show
499while app logs later showzoom_request_finished status: 200, the transcription succeeded and only the browser-side request path was lost
5. Batch job accepted but outputs never appear
Likely causes:
S3 URI/auth mismatch
expired STS credentials
output layout/URI mismatch
webhook endpoint unreachable if you rely on callbacks
Check:
/jobs/{jobId}summary/jobs/{jobId}/filescloud storage permissions
6. Webhook verification fails
Current sample pattern uses:
x-zm-signaturex-zm-request-timestampHMAC-SHA256 with
sha256=prefix
If verification fails:
confirm raw body capture before JSON parsing
confirm timestamp header was included in the signed string
confirm the shared secret matches the job notification config
7. Health check says credentials exist, but API calls still fail
Likely cause:
environment file contains literal placeholders such as
${ZOOM_API_KEY}or${ZOOM_API_SECRET}
Guardrail:
only treat credentials as present if they are real values, not unresolved shell placeholders
fail fast with a clear credential error before attempting Zoom calls
8. Wrong product chosen
Symptoms:
trying to use Scribe for live in-meeting media
trying to use RTMS for offline archive transcription
Guardrail:
file/storage transcription ->
scribelive meeting media ->
rtms
9. Browser microphone chunk 1 works but later chunks are empty
Likely cause:
the browser emitted a valid first container chunk, but later
MediaRecordertimeslice blobs were partial WebM/Opus clusters without fresh container headers
Symptoms:
chunk 1 transcribes normally
chunk 2 onward returns empty transcript text or much weaker results
auth and request flow still look healthy
Preferred fix:
do not rely on one long
MediaRecorder.start(timeslice)session for standalone chunk uploadsrotate the recorder per chunk instead:
start recorder
record one chunk window
stop recorder
upload that blob
start a new recorder for the next chunk
Guardrail:
treat browser microphone pseudo-streaming as a file-container problem first, not a Scribe-language-model problem
Requirements and compatibility
Written for: Claude Code, Claude apps
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Claude Code frontmatter, Needs Node.js
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Zoom
- Publisher
- Anthropic (Official)
- Distributed by
- Anthropic
- Source
- anthropics/knowledge-work-plugins · partner-built/zoom-plugin/skills/scribe · commit e050c2e
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from partner-built/zoom-plugin/LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Zoom or Anthropic.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download scribe.zip