Batch mode

Batch mode provides asynchronous summarization for large or complex jobs that process transcript files stored in cloud storage.

Capabilities

  • Asynchronous job processing
  • Large-scale file and batch support
  • Transcript-focused input optimization

Each input file generates its own summary result in the configured output location.

How it works

Batch mode processing runs asynchronously and lets you summarize transcript files at scale. This mode is ideal for storage-based pipelines and large transcript archives.

Limits

Here are the size and file limits for prefix and manifest jobs.

LimitValue
Maximum files per prefix job10,000
Maximum files per manifest job1,000
Maximum file size96 KB
Maximum characters per job100,000,000

Input

The API supports three input modes.

ModeDescription
SINGLEA single transcript file.
PREFIXAll supported files under a shared storage prefix or container.
MANIFESTAn explicit list of transcript file URIs. Maximum 1,000 files per manifest.

These are the supported transcript file formats for the current release:

  • .vtt
  • .srt
  • .txt

For .vtt and .srt inputs, the service removes timestamps and subtitle formatting before sending normalized transcript text to the summarization model.

Output

Each input file produces one summary result in the configured destination. The result format follows the same task-dependent output model as fast mode.

Summarization options

These options control the summarization task and output language.

ParameterTypeDefaultDescription
summary_typestring"conversation"The type of content being summarized. Currently we only support "conversation".
taskstring"full_summary"The summarization task. Accepted values are "recap", "action_items", "summary", and "full_summary".
languagestring"en-US"Output language as a BCP-47 locale code. Must be one of the supported locales.

Batch jobs

Create a batch job

To create a new batch summarization job, use this endpoint:

POST /aiservices/summarizer/jobs

You can optionally include a reference_id for tracking. To receive webhook notifications when a job finishes, include a notifications object with a webhook_url and a secret for payload verification.

Example request (cURL)

This cURL example submits a batch summarization job from S3 and defines the output location and summarization settings.

curl -X POST https://api.zoom.us/v2/aiservices/summarizer/jobs \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "mode": "PREFIX",
      "source": "S3",
      "uri": "s3://bucket/transcripts/",
      "filters": {
        "include_globs": ["*.vtt", "*.srt", "*.txt"]
      },
      "auth": {
        "aws": {
          "access_key_id": "AKIA...",
          "secret_access_key": "wJalrX...",
          "session_token": "FwoGZXIvYXdzE..."
        }
      }
    },
    "output": {
      "destination": "S3",
      "uri": "s3://bucket/summaries/",
      "layout": "PREFIX",
      "auth": {
        "aws": {
          "access_key_id": "AKIA...",
          "secret_access_key": "wJalrX...",
          "session_token": "FwoGZXIvYXdzE..."
        }
      }
    },
    "config": {
      "summary_type": "conversation",
      "task": "summary",
      "language": "en-US"
    },
    "notifications": {
      "webhook_url": "https://example.com/hooks/summarizer",
      "secret": "hmac-secret"
    },
    "reference_id": "batch-summarization-2026-05"
  }'

Response (201)

{
    "job_id": "job_abc123",
    "state": "QUEUED",
    "submitted_at": "2026-05-10T18:34:12Z"
}

Batch job endpoints

These additional endpoints are available to manage batch jobs.

ActionDescriptionEndpoint
Get batch job statusCheck the current status and progress summary of a specific job.GET /aiservices/summarizer/jobs/{jobId}
List batch jobsView all batch jobs, optionally filtered by state. The response includes a next_cursor field. Pass its value as next_page_token to retrieve the next page.GET /aiservices/summarizer/jobs?state=QUEUED&page_size=50&next_page_token=...
Cancel batch jobCancel a job that is in QUEUED or PROCESSING state.DELETE /aiservices/summarizer/jobs/{jobId}
List batch job filesRetrieve per-file status with pagination.GET /aiservices/summarizer/jobs/{jobId}/files?page_size=200&next_page_token=...

Webhook verification

When you provide a secret in the notifications object, the API signs each webhook request so you can verify it came from Zoom AI Services.

Each webhook request includes two headers.

HeaderDescription
x-zm-signatureHMAC-SHA256 signature of the request, prefixed with sha256=
x-zm-request-timestampUnix timestamp that indicates when the request originated.

To verify the signature:

  1. Compute HMAC-SHA256 of v0:{timestamp}:{raw_body} using your secret.
  2. Compare the result to the x-zm-signature header using a timing-safe comparison.
  3. Reject the request if the signatures don't match or the timestamp is stale.
const message = `v0:${timestamp}:${rawBody}`;
const expected = `sha256=${crypto.createHmac("sha256", secret).update(message).digest("hex")}`;
const isValid = crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected),
);