{"openapi":"3.0.0","info":{"title":"AI Services API","description":"AI Services are a suite of intelligence APIs for common AI workloads. You can use these APIs to process media data and create customized solutions.\n\nThe Zoom Decisions API may not be used in any way that violates [Zoom's Acceptable Use Guidelines](https://www.zoom.com/en/trust/acceptable-use-guidelines/), including to make a decision with significantly limited or no human input that produces legal or similarly significant effects, including provision or denial of financial or lending services, housing, insurance, education enrollment or opportunity, criminal justice, employment opportunities, health care services or access to essential goods or services.\n\nThe Zoom Decisions API may not be available for all accounts.","termsOfService":"https://zoom.us/docs/en-us/zoom_api_license_and_tou.html","contact":{"name":"Zoom Developers","url":"https://developer.zoom.us/"},"version":"2"},"externalDocs":{"description":"Find out more about Swagger","url":"https://swagger.io"},"servers":[{"url":"https://api.zoom.us/v2"}],"paths":{"/aiservices/assets/vocabularies":{"get":{"tags":["Asset"],"summary":"List Vocabularies","description":"List the custom vocabularies created for the account.\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"ListVocabularies","parameters":[{"name":"page_size","in":"query","description":"The maximum number of items returned per page.","required":false,"schema":{"maximum":50,"type":"integer","example":50}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJ0YXNrX2lkIjoidGFza18wMDEifQ"}}],"responses":{"200":{"description":"Successfully listed vocabularies, including all ZAS-provided and customer-managed vocabulary assets.","content":{"application/json":{"schema":{"type":"object","properties":{"vocabularies":{"maxItems":100,"type":"array","description":"A list of vocabularies. The maximum number of items per page is 100.","items":{"type":"object","properties":{"vocabulary_id":{"type":"string","description":"The unique identifier of the custom vocabulary.","example":"acct_vocab_abc123"},"language":{"type":"string","description":"The language of the custom vocabulary.","example":"en-US"},"name":{"type":"string","description":"The name of the vocabulary.","nullable":true,"example":"vocabulary name"}}}},"next_page_token":{"type":"string","example":"eyJqb2JfaWQiOiJqb2JfZGVmNDU2In0"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[]}},"post":{"tags":["Asset"],"summary":"Create Custom Vocabulary","description":"Create a custom vocabulary.\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"CreateCustomVocabulary","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"language":{"type":"string","description":"The language code. For details, refer to [Abbreviations](https://developers.zoom.us/docs/api/references/abbreviations/).","example":"en-US"},"phrases":{"maxItems":100,"type":"array","description":"A list of phrases used to improve recognition of domain-specific terms, names, and other uncommon vocabulary. This array supports a maximum of 100 items.","items":{"type":"string"}},"name":{"type":"string","description":"The name of the vocabulary.","nullable":true,"example":"vocabulary name"}}}}}},"responses":{"201":{"description":"Custom vocabulary created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"vocabulary_id":{"type":"string","description":"The unique identifier of the custom vocabulary.","example":"acct_vocab_abc123"},"language":{"type":"string","description":"The language of the custom vocabulary.","example":"en-US"},"phrases":{"maxItems":100,"type":"array","description":"The list of phrases in the custom vocabulary. This array supports a maximum of 100 items.","items":{"type":"string","example":"Acme"}},"name":{"type":"string","description":"The name of the vocabulary.","nullable":true,"example":"vocabulary name"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"413":{"description":"**HTTP Status Code:** `413` <br>\n Payload Too Large  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[]}}},"/aiservices/assets/vocabularies/{vocabularyId}":{"get":{"tags":["Asset"],"summary":"Get Vocabulary","description":"Retrieves a specific custom vocabulary by ID for the account, including its language and complete list of phrases. This API cannot be used to retrieve ZAS-provided vocabulary.\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"GetVocabulary","parameters":[{"name":"vocabularyId","in":"path","description":"The unique identifier of the custom vocabulary.","required":true,"schema":{"type":"string","example":"vocab_123"}}],"responses":{"200":{"description":"Custom vocabulary retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"vocabulary_id":{"type":"string","description":"The unique identifier of the custom vocabulary.","example":"acct_vocab_abc123"},"language":{"type":"string","description":"The language of the custom vocabulary.","example":"en-US"},"phrases":{"maxItems":100,"type":"array","description":"The list of phrases in the custom vocabulary. The maximum number of items for the array is 100.","items":{"type":"string","example":"Acme"}},"name":{"type":"string","description":"The name of the vocabulary.","nullable":true,"example":"vocabulary name"}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[]}},"delete":{"tags":["Asset"],"summary":"Delete Vocabulary","description":"Delete a specified custom vocabulary.\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"DeleteVocabulary","parameters":[{"name":"vocabularyId","in":"path","description":"The unique identifier of the custom vocabulary.","required":true,"schema":{"type":"string","example":"vocab_123"}}],"responses":{"204":{"description":"Vocabulary deleted successfully."},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized. \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden. \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found. \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error. \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[]}}},"/aiservices/decisions/decide":{"post":{"tags":["Decisions"],"summary":"Evaluate decision questions","description":"Evaluates typed questions independently against the same input and returns one ordered answer per question. \n\nDependent questions require separate requests. \n\nAuthenticate with a Decisions-enabled API key in the `x-api-key` request header. A Zoom AI Services or Universal SDK entitlement is required. \n\nZOAP authenticates requests, and backend services enforce authorization. Requests exceeding supported limits are rejected before inference. Account-level rate limits and workload quotas apply. \n\nInvalid model output is not returned as a valid decision result.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:decide:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`\n\n**Not supported in Gov cluster** ","operationId":"decideDecisions","requestBody":{"description":"Shared evidence and one or more independent decision questions.","content":{"application/json":{"schema":{"required":["input","questions"],"type":"object","properties":{"input":{"description":"Shared input evaluated against every question: text or one or more user messages.","example":"I was charged twice for my subscription this month. Please refund the duplicate charge.","oneOf":[{"type":"string"},{"minItems":1,"type":"array","items":{"required":["content","role"],"type":"object","properties":{"role":{"type":"string","description":"Only user messages are supported.","example":"user","enum":["user"]},"content":{"minItems":1,"type":"array","description":"Text and image content parts.","items":{"description":"Text or inline image evidence.","oneOf":[{"required":["text","type"],"type":"object","properties":{"type":{"type":"string","description":"The content part type.","example":"input_text","enum":["input_text"]},"text":{"type":"string","description":"The text evidence.","example":"Evaluate the condition of this package."}},"description":"Text evidence evaluated by the questions."},{"required":["image_url","type"],"type":"object","properties":{"type":{"type":"string","description":"The content part type.","example":"input_image","enum":["input_image"]},"image_url":{"pattern":"^data:image/[^;,]+;base64,","type":"string","description":"Inline image data URL. The example is an abbreviated illustration, not an executable image payload.","example":"data:image/jpeg;base64,..."},"detail":{"type":"string","description":"Optional image detail level.","example":"auto","enum":["auto","low","high","original"]}},"description":"Inline image evidence. External image URLs are not supported. Encodings, formats, dimensions, and payload size are validated before inference."}]}}},"description":"A user message. Non-user roles, audio, files, tool calls, and function-call results are not supported."}}]},"enable_image_input":{"type":"boolean","description":"Optional. Defaults to `false`. Set to `true` to opt in to image input when the input contains an `input_image`.","example":true,"default":false},"model":{"type":"string","description":"Optional decision model ID. Currently supported IDs are `zoom-decisions` and `zoom-decisions-pro`. When omitted, the service uses `zoom-decisions`. Image input is opt-in: set `enable_image_input` to `true`. Selecting `zoom-decisions-pro` does not require additional entitlement.","example":"zoom-decisions","default":"zoom-decisions","enum":["zoom-decisions","zoom-decisions-pro"]},"questions":{"maxItems":10,"minItems":1,"type":"array","description":"One to ten independent typed questions. Names must be unique within this request.","items":{"description":"A typed decision question.","example":{"type":"choice","name":"route","instructions":"Choose the team that should handle this request.","choices":[{"value":"sales","description":"Sales inquiries and purchasing."},{"value":"support","description":"Technical issues and product assistance."},{"value":"billing","description":"Payments, invoices, and refunds."}]},"oneOf":[{"title":"Predicate question","required":["instructions","name","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision question type.","example":"predicate","enum":["predicate"]},"name":{"type":"string","description":"Caller-defined question name. Names must be unique within this request; the corresponding answer echoes the name.","example":"damaged"},"instructions":{"type":"string","description":"Instructions describing the decision to make. Input must not override service-level instructions or guardrails.","example":"Is the package visibly damaged?"}},"description":"An independent predicate question evaluated against the shared input."},{"title":"Choice question","required":["choices","instructions","name","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision question type.","example":"choice","enum":["choice"]},"name":{"type":"string","description":"Caller-defined question name. Names must be unique within this request; the corresponding answer echoes the name.","example":"route"},"instructions":{"type":"string","description":"Instructions describing the decision to make. Input must not override service-level instructions or guardrails.","example":"Which team should handle this request?"},"choices":{"maxItems":255,"minItems":2,"type":"array","description":"Between 2 and 255 allowed choices. Choice values, including booleans, must be unique within this question.","items":{"required":["value"],"type":"object","properties":{"value":{"description":"A string or boolean choice value. Values must be unique within a question.","example":"billing","oneOf":[{"type":"string"},{"type":"boolean"}]},"description":{"type":"string","description":"Optional guidance describing when this choice applies.","example":"Payments, invoices, and refunds."}},"description":"One allowed choice."}}},"description":"An independent choice question evaluated against the shared input."},{"title":"Score question","required":["instructions","levels","name","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision question type.","example":"score","enum":["score"]},"name":{"type":"string","description":"Caller-defined question name. Names must be unique within this request; the corresponding answer echoes the name.","example":"priority"},"instructions":{"type":"string","description":"Instructions describing the decision to make. Input must not override service-level instructions or guardrails.","example":"Rate the urgency of this request using the supplied levels."},"levels":{"maxItems":10,"minItems":2,"type":"array","description":"Between 2 and 10 ordered scoring levels, indexed from zero.","items":{"required":["label"],"type":"object","properties":{"label":{"type":"string","description":"Human-readable level name.","example":"High"},"description":{"type":"string","description":"Optional guidance describing the level.","example":"Significant customer impact requiring prompt attention."}},"description":"A scoring level. Its numeric value is its zero-based position in the request."}}},"description":"An independent score question evaluated against the shared input."}]}},"reference_id":{"type":"string","description":"Optional caller-provided correlation and tracing identifier.","example":"customer-request-123"}},"description":"Shared evidence and independent questions. Dependent questions require separate requests.","example":{"input":"The package arrived with a torn box.","questions":[{"type":"predicate","name":"damaged","instructions":"Is the package visibly damaged?"}]}}}}},"responses":{"200":{"description":"Structured answers and metered usage.","content":{"application/json":{"schema":{"required":["answers","model","request_id","usage"],"type":"object","properties":{"request_id":{"type":"string","description":"Unique request identifier for tracing and support.","example":"req_123"},"answers":{"minItems":1,"type":"array","description":"Answers in the same order as the submitted questions.","items":{"description":"A typed answer or a per-question refusal.","example":{"type":"choice","name":"route","choice":"billing","probabilities":[{"value":"sales","probability":0.02},{"value":"support","probability":0.04},{"value":"billing","probability":0.94}]},"oneOf":[{"required":["name","probability","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision answer type.","example":"predicate","enum":["predicate"]},"name":{"type":"string","description":"Caller-defined question name echoed from the request.","example":"damaged"},"probability":{"maximum":1,"minimum":0,"type":"number","description":"Estimated probability that the condition is true.","example":0.89}},"description":"A predicate result. The result must correspond to the submitted question. The service validates model output before returning it."},{"required":["choice","name","probabilities","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision answer type.","example":"choice","enum":["choice"]},"name":{"type":"string","description":"Caller-defined question name echoed from the request.","example":"route"},"choice":{"description":"The selected string or boolean choice value.","example":"billing","oneOf":[{"type":"string"},{"type":"boolean"}]},"probabilities":{"minItems":1,"type":"array","description":"Probability distribution over all submitted choices. Values correspond to the request. Probabilities sum to one, subject to numeric precision.","items":{"required":["probability","value"],"type":"object","properties":{"value":{"description":"The string or boolean choice value from the request.","example":"billing","oneOf":[{"type":"string"},{"type":"boolean"}]},"probability":{"maximum":1,"minimum":0,"type":"number","description":"The probability of this choice, from zero to one.","example":0.89}},"description":"Probability assigned to one supplied choice."}}},"description":"A choice result. The result must correspond to the submitted question. The service validates model output before returning it."},{"required":["name","probabilities","score","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision answer type.","example":"score","enum":["score"]},"name":{"type":"string","description":"Caller-defined question name echoed from the request.","example":"priority"},"score":{"minimum":0,"type":"number","description":"Probability-weighted average of the zero-based level indices. The value may be fractional and is bounded above by the number of submitted levels minus one.","example":2.05},"probabilities":{"minItems":1,"type":"array","description":"Probability distribution over all submitted levels. Values correspond to the request. Probabilities sum to one, subject to numeric precision.","items":{"required":["probability","value"],"type":"object","properties":{"value":{"minimum":0,"type":"integer","description":"Zero-based index of the level in the submitted levels array.","example":2},"probability":{"maximum":1,"minimum":0,"type":"number","description":"The probability of this level, from zero to one.","example":0.89}},"description":"Probability assigned to one supplied scoring level."}}},"description":"A score result. The result must correspond to the submitted question. The service validates model output before returning it."},{"required":["name","type"],"type":"object","properties":{"type":{"type":"string","description":"The decision answer type.","example":"refusal","enum":["refusal"]},"name":{"type":"string","description":"Caller-defined question name echoed from the request.","example":"route"}},"description":"A refusal result. A safety or policy refusal for one question does not prevent other answers from being returned."}]}},"model":{"type":"string","description":"Model ID used to process the request. The underlying model implementation may change while preserving the public API contract.","example":"zoom-decisions","enum":["zoom-decisions","zoom-decisions-pro"]},"usage":{"required":["input_units","output_units","unit_type"],"type":"object","properties":{"input_units":{"minimum":0,"type":"integer","description":"Model input usage processed for the request.","example":247},"output_units":{"minimum":1,"type":"integer","description":"Number of questions submitted in the request.","example":1},"unit_type":{"type":"string","description":"Unit used for input_units. output_units reports the number of questions in the request.","example":"tokens"},"details":{"type":"object","properties":{"cached_input_tokens":{"minimum":0,"type":"integer","description":"Cached input token usage, when reported.","example":100}},"description":"Optional usage breakdown, which may include cached input token usage."}},"description":"Usage information for the request. Input usage is measured in tokens; output_units is the number of submitted questions. Optional details may include cached input tokens."}},"description":"One ordered answer per submitted question. Answer count and order match the request, and supplied names are echoed. The service enforces consistency between the request and response.","example":{"answers":[{"type":"predicate","name":"damaged","probability":0.9964802288772219}],"model":"zoom-decisions","request_id":"req_test_case_predicate","usage":{"input_units":96,"output_units":1,"unit_type":"tokens","details":{}}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  Unauthorized. The observed test response indicates that the supplied access token was invalid. \n\n **Error Code:** `124` <br>\n Invalid Access token <br>\n"},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"409":{"description":"**HTTP Status Code:** `409` <br>\n Conflict  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. A `Retry-After` header is returned when applicable. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:decide:admin"]}}},"/aiservices/scribe/jobs":{"get":{"tags":["Scribe"],"summary":"List Batch Jobs","description":"Retrieves a paginated list of batch transcription jobs for the authenticated tenant.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_scribe_batch_jobs:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchJobs","parameters":[{"name":"state","in":"query","description":"This field filters jobs by processing state. Omit to return jobs in all states.","required":false,"schema":{"type":"string","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]}},{"name":"page_size","in":"query","description":"The maximum number of jobs to return per page.","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer","format":"int32","example":50,"default":50}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token`field.","required":false,"schema":{"type":"string","example":"eyJqb2JfaWQiOiJqb2JfYWJjMTIzIn0"}}],"responses":{"200":{"description":"Jobs listed successfully","content":{"application/json":{"schema":{"required":["jobs"],"type":"object","properties":{"jobs":{"maxItems":100,"type":"array","description":"The list of batch jobs.","items":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"The overall job processing state.","example":"PROCESSING","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp.","format":"date-time","example":"2026-01-05T18:34:12Z"},"input":{"type":"object","properties":{"mode":{"type":"string","description":"The input mode specifying how files are provided.","example":"INPUT_PREFIX","enum":["SINGLE","INPUT_PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider where input files are located.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path to input files or manifest.","example":"s3://acme-bucket/audio/"}},"description":"The input configuration."},"output":{"type":"object","properties":{"destination":{"type":"string","description":"The storage provider for output transcripts.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path where transcripts will be written.","example":"s3://acme-bucket/transcripts/"},"layout":{"type":"string","description":"The output file organization pattern.","example":"PREFIX","enum":["ADJACENT","PREFIX"]}},"description":"The output configuration."},"config":{"type":"object","properties":{"language":{"type":"string","description":"The language code. See following page for details: https://developers.zoom.us/docs/api/references/abbreviations/","example":"en-US"},"timestamps":{"type":"boolean","description":"The include segment-level timestamps.","example":true,"default":true},"word_time_offsets":{"type":"boolean","description":"The include word-level timestamps.","example":false,"default":false},"channel_separation":{"type":"boolean","description":"Whether to transcribe stereo channels separately.","example":false,"default":false},"diarization":{"type":"boolean","description":"Whether to enable stretch or premium feature for speaker diarization.","example":false},"profanity_filter":{"type":"boolean","description":"Whether to enable profanity filtering.","example":false},"output_format":{"type":"string","description":"The output format (default json). Reserved for future (srt/vtt).","example":"json"}},"description":"The ASR configuration."},"summary":{"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in the job.","example":2487},"queued":{"type":"integer","description":"The number of files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The number of files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The number of successfully processed files.","example":2450},"failed":{"type":"integer","description":"The number of files that failed processing.","example":14},"skipped":{"type":"integer","description":"The number of files skipped due to filters or errors.","example":0},"canceled":{"type":"integer","description":"The number of files canceled by user request.","example":0}},"description":"The job progress summary."},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"INVALID_CREDENTIALS"},"message":{"type":"string","description":"The human-readable error message.","example":"AWS credentials expired"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context and details."}},"description":"Job-level error (only when state=FAILED).","nullable":true}}}},"next_page_token":{"type":"string","description":"The pagination token for fetching next page of results. Empty if no more results.","example":"eyJqb2JfaWQiOiJqb2JfZGVmNDU2In0"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_scribe_batch_jobs:admin"]}},"post":{"tags":["Scribe"],"summary":"Submit Batch Scribe Job","description":"Submits a batch transcription job for asynchronous processing. \n\nSupports three input modes: single file (mode inferred when uri points to single file), prefix/container enumeration (with optional filters), or explicit manifest (list of URIs). \n\nMaximum of 1000 files per manifest.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:scribe_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"submitBatchAsr","requestBody":{"content":{"application/json":{"schema":{"required":["config","input","output"],"type":"object","properties":{"input":{"required":["source"],"type":"object","properties":{"mode":{"type":"string","description":"The input processing mode. Optional - can be inferred: 'SINGLE' if uri points to single file, 'PREFIX' if uri is directory/prefix, 'MANIFEST' if manifest array provided.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The S3 URI Blob URL for single file or prefix/container. Required for single and prefix modes.","format":"uri","example":"s3://acme-bucket/audio/2025/11/"},"manifest":{"maxItems":1000,"minItems":1,"type":"array","description":"The explicit list of file URIs for manifest mode. Each URI can include SAS tokens or signed URLs. Required when mode is 'manifest'. Maximum 1000 files per batch job.","example":["https://acct.blob.core.windows.net/audio/a1.mp3?sv=...sig=...","https://acct.blob.core.windows.net/audio/a2.wav?sv=...sig=..."],"items":{"type":"string","format":"uri"}},"filters":{"type":"object","properties":{"include_globs":{"maxItems":10,"type":"array","description":"The include only files that match the glob patterns. Supports wildcards: * (any chars), ** (recursive), ? (single char). Applied first.","example":["**/*.wav","**/*.mp3"],"items":{"type":"string"}},"exclude_globs":{"maxItems":10,"type":"array","description":"The exclude files that match the glob patterns. Applied after include_globs.","example":["**/tmp/**","*_draft.*"],"items":{"type":"string"}}},"description":"The file filtering options for prefix mode. Use glob patterns to include/exclude files from processing."},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"AKIAIOSFODNN7EXAMPLE"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended for security).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 access. Required when source is 's3' and URIs are not pre-signed. Use session tokens for enhanced security."}},"description":"The authentication credentials for the input source."}},"description":"The input source configuration. Either 'uri' (for single/prefix modes) or 'manifest' (for manifest mode) must be provided."},"output":{"required":["destination","uri"],"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The output base URI for a single transcript file or a path for multiple transcript files.","format":"uri","example":"s3://acme-bucket/transcripts/2025/11/"},"layout":{"type":"string","description":"The output file layout strategy. 'SINGLE': use 'uri' for output file (single file mode). 'PREFIX': use output uri as base directory. 'ADJACENT': place output next to input file (same directory).","example":"PREFIX","enum":["SINGLE","PREFIX","ADJACENT"]},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"AKIAIOSFODNN7EXAMPLE"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended for security).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 access. Required when source is 's3' and URIs are not pre-signed. Use session tokens for enhanced security."}},"description":"The authentication credentials for the output destination."}},"description":"The output destination configuration."},"config":{"type":"object","properties":{"language":{"type":"string","description":"The language code. See following page for details: https://developers.zoom.us/docs/api/references/abbreviations/","example":"en-US"},"word_time_offsets":{"type":"boolean","description":"The include word-level timestamps.","example":false,"default":false},"channel_separation":{"type":"boolean","description":"Whether to transcribe stereo channels separately.","example":false,"default":false},"diarization":{"type":"boolean","description":"The stretch or premium feature for speaker diarization.","example":false},"profanity_filter":{"type":"boolean","description":"Whether to enable profanity filtering.","example":false},"language_detection":{"type":"object","properties":{"mode":{"type":"string","description":"The language detection mode. Supported values are `once` and `continuous`.","example":"continuous","default":"continuous","enum":["once","continuous"]},"candidate_languages":{"type":"array","description":"An optional set of languages to consider during language detection.","nullable":true,"items":{"type":"string","description":"A candidate language.","example":"en-US"},"default":["en-US"]}},"description":"Zoom Scribe supports optional automatic language detection through `config.language_detection`."},"output_format":{"type":"string","description":"The output format. The default is JSON. Reserved for future (srt/vtt).","example":"json"},"segmentation_mode":{"type":"string","description":"The VAD option. The default value is 'auto'. auto: use default VAD behavior, none: disable VAD segmentation.","example":"auto","enum":["auto","none"]},"model":{"type":"string","description":"The optional model selection.","nullable":true,"example":"zoom-scribe-en"},"vocabulary":{"type":"object","properties":{"phrases":{"maxItems":100,"type":"array","description":"A list of phrases used for ephemeral vocabulary.","items":{"type":"string","description":"A phrase used for ephemeral vocabulary.","example":"ace"}}},"description":"The vocabulary used to customize speech recognition for the current request. This field takes higher precedence over `vocabulary_id` if both are present."},"vocabulary_id":{"type":"string","description":"A reference to an immutable vocabulary asset used to customize speech recognition.","example":"acct_vocab_abc123"}},"description":"The ASR transcription configuration."},"outputs":{"type":"object","properties":{"text_polishing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to return polished text under `outputs.text_polishing.text`. Text polishing must support the requested locale.","example":false,"default":false}},"description":"The text polishing configuration."}},"description":"The optional output configuration for the transcription. This plural `outputs` object is separate from the singular `output` storage destination."},"reference_id":{"maxLength":256,"type":"string","description":"The customer-provided reference ID for tracking and correlation.","example":"import-2025-11"},"notifications":{"required":["webhook_url"],"type":"object","properties":{"webhook_url":{"type":"string","description":"The HTTPS webhook URL for job status notifications. It will receive POST requests on job state changes.","format":"uri","example":"https://example.com/hooks/scribe"},"secret":{"maxLength":256,"type":"string","description":"The HMAC secret for webhook signature verification. Used to sign notification payloads.","example":"hmac-secret"}},"description":"The webhook notification settings for job status updates."}}}}}},"responses":{"201":{"description":"Job submitted successfully and queued for processing.","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The unique job identifier for tracking and status queries.","example":"job_abc123"},"state":{"type":"string","description":"The initial job state (typically 'QUEUED').","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"415":{"description":"**HTTP Status Code:** `415` <br>\n Unsupported Media Type  \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:scribe_batch_job:admin"]}}},"/aiservices/scribe/jobs/{jobId}":{"get":{"tags":["Scribe"],"summary":"Get Batch Job Status","description":"Retrieves job-level summary for a batch transcription job.\n\nReturns overall job state and progress statistics. Use `GET /ai/scribe/jobs/{jobId}/files` to retrieve per-file status with pagination.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:scribe_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchJobStatus","parameters":[{"name":"jobId","in":"path","description":"The unique identifier for the batch transcription job.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"200":{"description":"Job status retrieved successfully","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at","summary"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"The overall job processing state. PARTIAL indicates some files succeeded while others failed.","example":"PARTIAL","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"},"summary":{"required":["failed","processing","queued","skipped","succeeded","total_files"],"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in job.","example":2487},"queued":{"type":"integer","description":"The files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The successfully processed files.","example":2450},"failed":{"type":"integer","description":"The files that failed processing.","example":14},"skipped":{"type":"integer","description":"The files that are skipped due to filters or errors.","example":0}},"description":"The aggregated job progress statistics."}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:scribe_batch_job:admin"]}},"delete":{"tags":["Scribe"],"summary":"Cancel Batch Job","description":"Cancels a batch transcription job.\n\nOnly jobs in QUEUED or PROCESSING state can be canceled. \n\nSuccessfully canceled jobs  transition to CANCELED state. Jobs that are already COMPLETED, FAILED, or CANCELED cannot be canceled.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:delete:scribe_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"cancelBatchJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier for the batch transcription job.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"204":{"description":"Job canceled successfully. No content returned. For details of job use get job status API. "},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:delete:scribe_batch_job:admin"]}}},"/aiservices/scribe/jobs/{jobId}/files":{"get":{"tags":["Scribe"],"summary":"List Batch Job Files","description":"Retrieves per-file processing status for a batch transcription job.\n\nUse `page_size` and `next_page_token` for pagination.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_scribe_batch_job_files:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchJobFiles","parameters":[{"name":"jobId","in":"path","description":"The unique identifier for the batch transcription job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"page_size","in":"query","description":"The maximum number of files to return per page.","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer","format":"int32","example":200,"default":200}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJ0YXNrX2lkIjoidGFza18wMDEifQ"}}],"responses":{"200":{"description":"Job files listed successfully.","content":{"application/json":{"schema":{"required":["files"],"type":"object","properties":{"files":{"maxItems":10000,"type":"array","description":"The per-file processing status results for the job.","items":{"required":["file_id","input_uri","output_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"The unique file identifier within the job.","example":"f_001"},"input_uri":{"type":"string","description":"The source audio file URI.","example":"s3://acme-bucket/audio/2025/11/call_0001.wav"},"state":{"type":"string","description":"The current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"The transcript output URI. Null if file failed or not yet processed.","example":"s3://acme-bucket/transcripts/2025/11/call_0001.json"},"duration_sec":{"type":"number","description":"The audio duration in seconds (if successfully analyzed).","example":3520.2},"error":{"required":["code","message"],"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"UNSUPPORTED_MEDIA"},"message":{"type":"string","description":"The human-readable error description.","example":"OGG not enabled for MVP"}},"description":"The error details (only present when state=FAILED).","nullable":true}}}},"next_page_token":{"type":"string","description":"The pagination token for fetching the next page of results. Empty if no more results.","example":"eyJ0YXNrX2lkIjoidGFza18wMDIifQ"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_scribe_batch_job_files:admin"]}}},"/aiservices/scribe/jobs/{jobId}/files/{fileId}":{"get":{"tags":["Scribe"],"summary":"Get Batch Scribe Job File","description":"Retrieves the processing result for a specific file within a batch Scribe transcription job.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:scribe_batch_job_file:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchScribeJobFile","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch Scribe job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"fileId","in":"path","description":"The unique identifier of the file within the job.","required":true,"schema":{"type":"string","example":"f_001"}}],"responses":{"200":{"description":"File result retrieved successfully.","content":{"application/json":{"schema":{"required":["file_id","input_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"The unique file identifier within the job.","example":"f_001"},"input_uri":{"type":"string","description":"The source audio file URI.","example":"s3://acme-bucket/audio/2025/11/meeting_001.mp3"},"state":{"type":"string","description":"The current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"The URI of the transcription result file. Null if not yet processed or failed.","nullable":true,"example":"s3://acme-bucket/transcripts/2025/11/meeting_001.json"},"duration_sec":{"type":"number","description":"The duration of the audio file in seconds. Present only when state is `FILE_SUCCEEDED`.","format":"double","nullable":true,"example":183.5},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"UNSUPPORTED_CONTENT_TYPE"},"message":{"type":"string","description":"A human-readable error description.","example":"Content type application/pdf is not supported for transcription"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context."}},"description":"The error details. Only present when state is `FILE_FAILED`.","nullable":true}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:scribe_batch_job_file:admin"]}}},"/aiservices/scribe/live":{"get":{"tags":["Scribe"],"summary":"Live Scribe WebSocket","description":"The Live API converts speech to text in real time over a WebSocket connection. Your application streams audio to the service and receives transcription events as people speak, so you can show captions or transcripts without waiting for the recording to finish.\n\n**Key features**\n\n- **Real-time results:** Partial results appear while a speaker is still talking, and final results follow when each utterance ends.\n- **Timing and turn tracking:** Every event includes start and end times and an identifier for its utterance, so you can align partial and final results.\n- **Session configuration:** Set the language, voice activity detection, transcription options, and custom vocabulary when you start a session.\n- **Custom vocabulary:** Provide names, product terms, or other domain words to improve recognition accuracy. You can pass them inline for one session or reference a saved vocabulary by its ID. Use one or the other, not both.\n- **Optional text polishing:** Remove filler words, false starts, and mid-sentence cuts from the transcript. The original transcript is still available if you need it.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:live_transcribe:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"liveTranscribe","parameters":[{"name":"Sec-WebSocket-Protocol","in":"header","description":"WebSocket subprotocol requested by the client.","required":true,"schema":{"type":"string","example":"live-asr","enum":["live-asr"]}}],"responses":{"101":{"description":"WebSocket upgrade accepted. The connection switches to the WebSocket protocol and uses the frame contract described in `x-websocket`.","headers":{"Upgrade":{"description":"The selected upgraded protocol.","schema":{"type":"string","example":"websocket"}},"Connection":{"description":"Whether the connection was upgraded.","schema":{"type":"string","example":"Upgrade"}},"Sec-WebSocket-Protocol":{"description":"The selected WebSocket subprotocol when the client requested `live-asr`.","schema":{"type":"string","example":"live-asr","enum":["live-asr"]}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"426":{"description":"**HTTP Status Code:** `426` <br>\n Upgrade Required  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "},"503":{"description":"**HTTP Status Code:** `503` <br>\n Service Unavailable  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:live_transcribe:admin"]}}},"/aiservices/scribe/transcribe":{"post":{"tags":["Scribe"],"summary":"Scribe (Synchronous)","description":"Uploads a single audio file and receive transcript inline. Synchronous operation response returns immediately after the transcription completes.\n\nMaximum file size: 100MB. Maximum duration: 2 hours.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:transcribe:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"createFastAsr","requestBody":{"description":"Uploads audio files with ASR configuration for synchronous transcription.","content":{"application/json":{"schema":{"required":["config","file"],"type":"object","properties":{"file":{"type":"string","description":"The audio file to transcribe. Supported formats: wav, mp3, m4a, flac, ogg, webm, mp4, mov. Max size: 100MB. Max duration: 2 hours.","format":"binary","example":"Vm0wd2QyUXlVWGxWV0d4WFlURndVRlpzWkZOWFZsbDNXa2M1V0Zac2JETlhhMUpUVmpGS2MySkVUbGhoTWsweFZtcEtTMUl5U2tWVWJHaG9UVlZ3VlZadGNFdFRNVTVJVm10a1dHSkdjRTlaVjNSR1pVWmFkR05GWkZwV01VcEpWbTEwVjFWdFNsWlhiR2hYWWxob2VsUlVSbUZrUjA1R1drWlNUbUpGY0VwV2JURXdWakZXZEZOclpGaGlSMmhoV1ZSR1lVMHhXbk5YYlhSWFRWaENTbGt3WkRSVk1rcElaSHBHVjJFeVVYZFpla3BIVmpGT2RWVnNXbWxTTW1oWFZtMTBWMlF5VW5OWGEyUllZbFZhY1ZSV1duZE5SbFowWlVkMFZXSkdjREZWVjNodlZqRktjMk5HYUZkaGEzQklWVEJhWVdSV1NuTlRiR1JUVFRBd01RPT0="},"config":{"type":"object","properties":{"language":{"type":"string","description":"The language code. For details, see the [Abbreviations page](https://developers.zoom.us/docs/api/references/abbreviations/).","example":"en-US"},"timestamps":{"type":"boolean","description":"Whether to include segment-level timestamps.","example":true,"default":true},"word_time_offsets":{"type":"boolean","description":"Whether to include word-level timestamps.","example":false,"default":false},"channel_separation":{"type":"boolean","description":"Whether to transcribe stereo channels separately.","example":false,"default":false},"diarization":{"type":"boolean","description":"A stretch/premium feature for speaker diarization.","example":false},"profanity_filter":{"type":"boolean","description":"Whether to enable profanity filtering.","example":false},"language_detection":{"type":"object","properties":{"mode":{"type":"string","description":"The language detection mode. Supported values are `once` and `continuous`.","example":"continuous","default":"continuous","enum":["once","continuous"]},"candidate_languages":{"type":"array","description":"An optional set of languages to consider during language detection.","nullable":true,"items":{"type":"string","description":"A candidate language.","example":"en-US"},"default":["en-US"]}},"description":"The optional automatic language detection configuration."},"output_format":{"type":"string","description":"The output format. The default value is `json`. Reserved for future use (`srt`/`vtt`).","example":"json"},"model":{"type":"string","description":"The optional model selection.","nullable":true,"example":"zoom-scribe-en"},"vocabulary":{"type":"object","properties":{"phrases":{"maxItems":100,"type":"array","description":"A list of phrases used for ephemeral vocabulary.","items":{"type":"string","description":"A phrase used for ephemeral vocabulary.","example":"ace"}}},"description":"The vocabulary used to customize speech recognition for the current request. This field takes higher precedence over the vocabulary ID if both are present."},"vocabulary_id":{"type":"string","description":"A reference to an immutable vocabulary asset used to customize speech recognition.","example":"acct_vocab_abc123"}},"description":"The ASR configuration options."},"outputs":{"type":"object","properties":{"text_polishing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to return polished text under `outputs.text_polishing.text`. Text polishing must support the requested locale.","example":false,"default":false}},"description":"The text polishing configuration."}},"description":"The optional output configuration for the transcription."}}}}}},"responses":{"200":{"description":"Transcription completed successfully","content":{"application/json":{"schema":{"required":["duration_sec","request_id","result"],"type":"object","properties":{"request_id":{"type":"string","description":"The unique request identifier.","example":"req_123"},"duration_sec":{"type":"number","description":"The audio duration in seconds.","example":27.4},"result":{"required":["text_display"],"type":"object","properties":{"text_display":{"type":"string","description":"The formatted display text with punctuation and capitalization.","example":"Hello and welcome to the meeting..."},"segments":{"maxItems":10000,"type":"array","description":"The transcript segments with timing information. Only present when timestamps=true in config.","items":{"required":["text"],"type":"object","properties":{"start":{"type":"number","description":"The segment start time in seconds.","example":0},"end":{"type":"number","description":"The segment end time in seconds.","example":3.24},"text":{"type":"string","description":"The segment text.","example":"Hello and welcome..."},"channel":{"type":"integer","description":"The audio channel identifier for this segment.","format":"int32","example":0},"speaker":{"type":"string","description":"The speaker tag (e.g., 'speaker_1', 'speaker_2'). Only present when diarization=true in config.","example":"speaker_1"},"words":{"maxItems":100,"type":"array","description":"The word-level data with timing. Only present when `word_time_offsets=true` in config.","items":{"required":["word"],"type":"object","properties":{"word":{"type":"string","description":"The word text.","example":"Hello"},"start":{"type":"number","description":"The word start time in seconds.","example":0},"end":{"type":"number","description":"The word end time in seconds.","example":0.2}}}}}}}},"description":"Transcription result object containing text and optional timing or speaker data."},"model":{"type":"string","description":"The ASR model identifier for transcription.","example":"zoom-asr-en-v1"},"outputs":{"type":"object","properties":{"text_polishing":{"required":["text"],"type":"object","properties":{"text":{"type":"string","description":"The polished text of the full transcription. Optionally includes a speaker tag `[Speaker 1]` or channel tag `[channel0]` when `diarization` or `channel_separation` is set to `true`.","example":"Hello, and welcome to the meeting. "}},"description":"Present when `outputs.text_polishing.enabled` is set to `true`."}},"description":"Optional generated outputs."}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"413":{"description":"**HTTP Status Code:** `413` <br>\n Payload Too Large  \n\n "},"415":{"description":"**HTTP Status Code:** `415` <br>\n Unsupported Media Type  \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:transcribe:admin"]}}},"/aiservices/speech-summarization/summarize":{"post":{"tags":["Speech Summarization"],"summary":"Summarize (Synchronous)​","description":"Provides speech-to-text transcription and AI-powered summarization in a single streaming request using Server-Sent Events (SSE).\n\n**Flow:**\n1. transcribe_started - Transcription begins.\n2. transcribe_complete - Full transcript available.\n3. summary_delta - Streaming summary output (multiple events).\n4. done - Processing complete.\n5. error - If any failure occurs.\n\n**Supported Formats:** WAV, MP3, M4A, FLAC, OGG, WebM, MP4, MOV\n**Max File Size:** 50 MB\n**Max Duration:** 2 hours\n\n**Response Events:**\n\n*transcribe_started:*\n```\nevent: transcribe_started\ndata: {\"status\":\"transcribing\"}\n```\n\n*transcribe_complete:*\n```\nevent: transcribe_complete\ndata: {\n  \"transcript\": {...},\n  \"latency_ms\": 5234,\n  \"body_bytes\": 12456,\n  \"status_code\": 200\n}\n```\n\n*summary_delta (multiple):*\n```\nevent: summary_delta\ndata: {\n  \"summary\": \"## Meeting Summary\n\nContent...\",\n  \"metadata\": {}\n}\n```\nNote: Each event contains the complete accumulated text.\n\n*done:*\n```\nevent: done\ndata: {\n  \"status\": \"complete\",\n  \"total_latency_ms\": 8500,\n  \"transcribe_ms\": 5234,\n  \"summary_ms\": 3266\n}\n```\n\n*error:*\n```\nevent: error\ndata: {\n  \"error\": \"error message\",\n  \"stage\": \"transcribe|summary|summary_preparation\"\n}\n```\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:transcribe-summarize:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"transcribeAndSummarizeStream","requestBody":{"description":"Multipart form data containing the configuration and file.","content":{"multipart/form-data":{"schema":{"required":["file"],"type":"object","properties":{"config":{"type":"object","properties":{"transcribe":{"type":"object","properties":{"language":{"type":"string","description":"The language code. See the [Zoom abbreviations](https://developers.zoom.us/docs/api/references/abbreviations/) page for details.","example":"en-US","default":"en-US"},"model":{"type":"string","description":"The ASR model identifier to use for transcription.","example":"zoom-scribe-en","default":"zoom-scribe-en","enum":["zoom-scribe-en"]},"word_time_offsets":{"type":"boolean","description":"Whether to include word-level timestamps in the transcript.","example":false,"default":false},"channel_separation":{"type":"boolean","description":"Whether to transcribe stereo channels separately.","example":false,"default":false},"diarization":{"type":"boolean","description":"Whether to enable speaker diarization.","example":false,"default":false},"profanity_filter":{"type":"boolean","description":"Whether to enable profanity filtering.","example":false,"default":false},"output_format":{"type":"string","description":"The transcript output format.","example":"json","default":"json","enum":["json"]}},"description":"Transcription (ASR) configuration options."},"summary":{"type":"object","properties":{"language":{"type":"string","description":"The language code for the generated summary.","example":"en-US","default":"en-US"},"template_id":{"type":"string","description":"The summary template to use.","example":"one_on_one","enum":["one_on_one","stand_up","brainstorm","project_update","discussion","q_a","customer_success","user_feedback","lecture_summary","next_steps"]},"summary_length":{"type":"string","description":"The desired length of the generated summary.","example":"short","default":"short","enum":["short","long"]},"citations":{"type":"boolean","description":"Whether to include citations linking summary content back to the transcript.","example":true,"default":true},"should_remove_sentiment":{"type":"boolean","description":"Whether to remove sentiment-related language from the summary.","example":false,"default":false},"pii_redaction":{"type":"boolean","description":"Whether to redact personally identifiable information (PII) from the summary.","example":false,"default":false},"enable_dynamic_template":{"type":"boolean","description":"Whether to allow dynamic template selection instead of a fixed `template_id`.","example":true,"default":true},"custom_template":{"type":"string","description":"Custom template for the summary in Markdown format.","example":"## Overview\nMaya and Jordan reviewed progress on the onboarding project, discussed workload, and agreed on a focused development goal for the next month.\n\n## Highlights\n- The onboarding checklist is ready for a pilot with two customer teams.\n- Jordan enjoys customer interviews but needs more uninterrupted time to act on feedback.\n- Maya will help prioritize requests so the team can focus on the pilot.\n\n## Feedback and growth\nJordan's customer research has made the setup flow clearer. The next growth goal is to lead a project review and practice presenting recommendations to stakeholders.\n\n## Next steps\n- **Jordan:** Share the pilot plan by Thursday.\n- **Maya:** Confirm priorities with the product team by Friday.\n- **Together:** Review pilot feedback at the next one-on-one.\n\n## Follow-up topics\nCheck whether the new focus blocks reduce interruptions and discuss opportunities to lead the next review.","default":""}},"description":"Summary generation configuration options."}},"description":"Configuration for the transcription and summarization parameters."},"file":{"type":"string","description":"The audio or video file to process.\n\n**Supported formats:**\n- Audio: WAV, MP3, M4A, FLAC, OGG, WebM\n- Video: MP4, MOV\n\n**Requirements:**\n- Maximum file size: 50 MB\n- Maximum duration: 2 hours\n- Sample rate: ≥8 kHz (16 kHz or higher recommended)\n- Channels: Mono or stereo","format":"binary","example":"[Audio data]"}}}}}},"responses":{"200":{"description":"Streaming SSE response with multiple event types. See the endpoint description for event details.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Contains the transcript and summary."}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"405":{"description":"**HTTP Status Code:** `405` <br>\n Method Not Allowed  The request method is not allowed. Use POST. \n\n "},"413":{"description":"**HTTP Status Code:** `413` <br>\n Payload Too Large  The file exceeds the 50 MB size limit. \n\n "},"415":{"description":"**HTTP Status Code:** `415` <br>\n Unsupported Media Type  \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "},"502":{"description":"**HTTP Status Code:** `502` <br>\n Bad Gateway  A transcription or summary service error occurred. \n\n "},"503":{"description":"**HTTP Status Code:** `503` <br>\n Service Unavailable  The summary API is not configured. \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:transcribe-summarize:admin"]}}},"/aiservices/summarizer/jobs":{"get":{"tags":["Summarizer"],"summary":"List Batch Summarizer Jobs","description":"Retrieves a paginated list of batch summarization jobs for the authenticated tenant.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_summarizer_batch_jobs:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchSummarizerJobs","parameters":[{"name":"state","in":"query","description":"Filter jobs by processing state. Omit to return jobs in all states.","required":false,"schema":{"type":"string","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]}},{"name":"page_size","in":"query","description":"The maximum number of jobs to return per page.","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer","format":"int32","example":50,"default":50}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJqb2JfaWQiOiJqb2JfYWJjMTIzIn0"}}],"responses":{"200":{"description":"Jobs listed successfully.","content":{"application/json":{"schema":{"required":["jobs"],"type":"object","properties":{"jobs":{"maxItems":1000,"type":"array","description":"List of batch summarization jobs.","items":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"The overall job processing state.","example":"PROCESSING","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"},"input":{"type":"object","properties":{"mode":{"type":"string","description":"The input mode.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path to input files.","example":"s3://acme-bucket/transcripts/"}},"description":"The input configuration."},"output":{"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path where summaries are written.","example":"s3://acme-bucket/summaries/"},"layout":{"type":"string","description":"The output file layout strategy.","example":"PREFIX","enum":["ADJACENT","PREFIX"]}},"description":"The output configuration."},"config":{"type":"object","properties":{"summary_type":{"type":"string","description":"The type of content being summarized. Defaults to `CONVERSATION`.","example":"CONVERSATION","default":"CONVERSATION","enum":["CONVERSATION"]},"task":{"type":"string","description":"The summarization task type. Defaults to `full_summary` if not specified. Accepted values are `full_summary`, `recap`, `action_items`, and `summary`.","example":"full_summary","enum":["full_summary","recap","action_items","summary"]},"language":{"type":"string","description":"The output language ISO locale code. Supported values: `en-US`, `zh-CN`, `zh-Hans`, `ja-JP`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`, `ar-SA`, `ar-AE`.","example":"en-US"},"output_format":{"type":"string","description":"The output format. Defaults to `text`. Currently only `text` is supported.","example":"text","enum":["text"]}},"description":"The summarization configuration."},"summary":{"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in the job.","example":2487},"queued":{"type":"integer","description":"The number of files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The number of files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The number of successfully processed files.","example":2450},"failed":{"type":"integer","description":"The number of files that failed processing.","example":14},"skipped":{"type":"integer","description":"The number of files skipped due to filters or limits.","example":0},"canceled":{"type":"integer","description":"The number of files canceled by user request.","example":0}},"description":"The job progress summary."},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"INVALID_CREDENTIALS"},"message":{"type":"string","description":"A human-readable error message.","example":"AWS credentials expired"}},"description":"The job-level error. Only present when state is `FAILED`.","nullable":true},"usage":{"type":"object","properties":{"input_units":{"type":"number","description":"The total input characters processed across all succeeded files.","example":985430},"output_units":{"type":"number","description":"The total output characters generated across all succeeded files.","example":62140},"unit_type":{"type":"string","description":"The unit of measurement for billing.","example":"characters"}},"description":"The aggregate character usage for this job. Null until at least one file has been processed.","nullable":true}}}},"next_page_token":{"type":"string","description":"The pagination token for fetching the next page. Empty if no more results.","example":"eyJqb2JfaWQiOiJqb2JfZGVmNDU2In0"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_summarizer_batch_jobs:admin"]}},"post":{"tags":["Summarizer"],"summary":"Submit Batch Summarizer Job","description":"Submits a batch summarization job for asynchronous processing.\n\nSupports three input modes: single file (mode inferred when the URI points to a single file), prefix or container enumeration (with optional filters), or explicit manifest (list of URIs).\n\nMaximum of 1,000 files per manifest.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:summarizer_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"submitBatchSummarizer","requestBody":{"content":{"application/json":{"schema":{"required":["input","output"],"type":"object","properties":{"input":{"required":["source"],"type":"object","properties":{"mode":{"type":"string","description":"The input processing mode. Optional — can be inferred: `MANIFEST` if a manifest array is provided, `SINGLE` if the URI points to a single file, or `PREFIX` if the URI is a directory/prefix.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The S3 URI for a single file or prefix/container. Required for SINGLE and PREFIX modes.","format":"uri","example":"s3://acme-bucket/transcripts/2025/11/"},"manifest":{"maxItems":1000,"minItems":1,"type":"array","description":"The explicit list of file URIs for MANIFEST mode. Required when mode is `MANIFEST`. Maximum of 1,000 files per batch job.","example":["s3://acme-bucket/transcripts/meeting_001.vtt","s3://acme-bucket/transcripts/meeting_002.vtt"],"items":{"type":"string","format":"uri"}},"filters":{"type":"object","properties":{"include_globs":{"maxItems":10,"type":"array","description":"The include only files matching these glob patterns. Supports wildcards: `*` (any characters), `**` (recursive), `?` (single character). Applied before `exclude_globs`.","example":["**/*.vtt","**/*.txt"],"items":{"type":"string"}},"exclude_globs":{"maxItems":10,"type":"array","description":"The exclude files matching these glob patterns. Applied after `include_globs`.","example":["**/tmp/**","*_draft.*"],"items":{"type":"string"}}},"description":"The file filtering options for PREFIX mode. Use glob patterns to include or exclude files."},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"YOUR_AWS_ACCESS_KEY_ID"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"YOUR_AWS_SECRET_ACCESS_KEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 access. Required when the source is S3 and URIs are not pre-signed."}},"description":"The storage authentication credentials."}},"description":"The input source configuration. Provide `uri` (for SINGLE/PREFIX modes) or `manifest` (for MANIFEST mode)."},"output":{"required":["destination","uri"],"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The base output URI where summarization results will be written.","format":"uri","example":"s3://acme-bucket/summaries/2025/11/"},"layout":{"type":"string","description":"The output file layout strategy. `ADJACENT`: places output next to the input file. `PREFIX`: uses the output URI as the base directory.","example":"PREFIX","enum":["ADJACENT","PREFIX"]},"overwrite":{"type":"boolean","description":"Whether to overwrite existing output files.","example":false,"default":false},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"YOUR_AWS_ACCESS_KEY_ID"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"YOUR_AWS_SECRET_ACCESS_KEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 write access."}},"description":"The storage authentication credentials."}},"description":"The output destination configuration."},"config":{"type":"object","properties":{"summary_type":{"type":"string","description":"The type of content being summarized. Defaults to `CONVERSATION`.","example":"CONVERSATION","default":"CONVERSATION","enum":["CONVERSATION"]},"task":{"type":"string","description":"The summarization task type. Defaults to `full_summary` if not specified. Accepted values are `full_summary`, `recap`, `action_items`, and `summary`.","example":"full_summary","default":"full_summary","enum":["full_summary","recap","action_items","summary"]},"language":{"type":"string","description":"The output language as an ISO locale code. Supported: `en-US`, `zh-CN`, `zh-Hans`, `ja-JP`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`, `ar-SA`, `ar-AE`. Defaults to `en-US`.","example":"en-US"},"output_format":{"type":"string","description":"The output format. Defaults to `text`. Currently only `text` is supported.","example":"text","default":"text","enum":["text"]}},"description":"The summarization configuration."},"reference_id":{"maxLength":256,"type":"string","description":"The customer-provided reference ID for deduplication and correlation. Submitting the same `reference_id` twice returns the existing job instead of creating a duplicate.","example":"summarize-2025-11"},"notifications":{"type":"object","properties":{"webhook_url":{"type":"string","description":"The HTTPS webhook URL to receive POST notifications on job state changes.","format":"uri","example":"https://example.com/hooks/summarizer"},"secret":{"maxLength":256,"type":"string","description":"The shared secret used to sign webhook payloads. Used as the HMAC key when `security_type` is `WEBHOOK_SECURITY_HMAC`, or as the JWT signing key when `security_type` is `WEBHOOK_SECURITY_JWT`.","example":"hmac-secret"},"security_type":{"type":"string","description":"The webhook payload signature scheme. Defaults to `WEBHOOK_SECURITY_HMAC`.","example":"WEBHOOK_SECURITY_HMAC","default":"WEBHOOK_SECURITY_HMAC","enum":["WEBHOOK_SECURITY_HMAC","WEBHOOK_SECURITY_JWT"]},"audience":{"type":"string","description":"The JWT audience (`aud` claim) for the signed webhook token. Required when `security_type` is `WEBHOOK_SECURITY_JWT`.","example":"https://example.com/hooks/summarizer"}},"description":"The webhook notification settings for job status updates."},"limits":{"type":"object","properties":{"max_files":{"type":"integer","description":"The maximum number of files to process. Excess files are skipped.","example":500}},"description":"The job processing limits."}}}}}},"responses":{"201":{"description":"Job submitted successfully and queued for processing.","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The unique job identifier for tracking and status queries.","example":"job_abc123"},"state":{"type":"string","description":"The initial job state (typically `QUEUED`).","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"409":{"description":"**HTTP Status Code:** `409` <br>\n Conflict  A job with the same `reference_id` already exists. \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  The request body contains invalid or missing fields. \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:summarizer_batch_job:admin"]}}},"/aiservices/summarizer/jobs/{jobId}":{"get":{"tags":["Summarizer"],"summary":"Get Batch Summarizer Job","description":"Retrieves job-level status, configuration, and progress summary for a batch summarization job.\n\nTo list individual file results, use the List Batch Job Files endpoint.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:summarizer_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchSummarizerJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch summarization job.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"200":{"description":"Job status retrieved successfully.","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"Overall job processing state. `PARTIAL` indicates some files succeeded while others failed.","example":"PROCESSING","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"},"input":{"type":"object","properties":{"mode":{"type":"string","description":"The input mode.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path to input files.","example":"s3://acme-bucket/transcripts/2025/11/"}},"description":"The input configuration used when the job was submitted."},"output":{"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path where summaries are written.","example":"s3://acme-bucket/summaries/2025/11/"},"layout":{"type":"string","description":"The output file layout strategy.","example":"PREFIX","enum":["ADJACENT","PREFIX"]}},"description":"The output configuration used when the job was submitted."},"config":{"type":"object","properties":{"summary_type":{"type":"string","description":"The type of content being summarized. Defaults to `CONVERSATION`.","example":"CONVERSATION","default":"CONVERSATION","enum":["CONVERSATION"]},"task":{"type":"string","description":"The summarization task type. Defaults to `full_summary` if not specified. Accepted values are `full_summary`, `recap`, `action_items`, and `summary`.","example":"full_summary","enum":["full_summary","recap","action_items","summary"]},"language":{"type":"string","description":"The output language ISO locale code. Supported values: `en-US`, `zh-CN`, `zh-Hans`, `ja-JP`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`, `ar-SA`, `ar-AE`.","example":"en-US"},"output_format":{"type":"string","description":"The output format. Defaults to `text`. Currently only `text` is supported.","example":"text","enum":["text"]}},"description":"The summarization configuration used for this job."},"summary":{"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in the job.","example":2487},"queued":{"type":"integer","description":"The number of files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The number of files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The number of successfully processed files.","example":2450},"failed":{"type":"integer","description":"The number of files that failed processing.","example":14},"skipped":{"type":"integer","description":"The number of files skipped due to filters or limits.","example":0},"canceled":{"type":"integer","description":"The number of files canceled by user request.","example":0}},"description":"Aggregated job progress statistics."},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"INVALID_CREDENTIALS"},"message":{"type":"string","description":"A human-readable error message.","example":"AWS credentials expired"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context."}},"description":"The job-level error. Only present when state is `FAILED`.","nullable":true},"usage":{"type":"object","properties":{"input_units":{"type":"number","description":"The total input characters processed across all succeeded files.","example":985430},"output_units":{"type":"number","description":"The total output characters generated across all succeeded files.","example":62140},"unit_type":{"type":"string","description":"The unit of measurement for billing.","example":"characters"}},"description":"The aggregate character usage for the entire batch job. Null until at least one file has been processed.","nullable":true}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:summarizer_batch_job:admin"]}},"delete":{"tags":["Summarizer"],"summary":"Cancel Batch Summarizer Job","description":"Cancels a batch summarization job.\n\nOnly jobs in a `QUEUED` or `PROCESSING` state can be canceled.\n\nSuccessfully canceled jobs transition to the `CANCELED` state. Jobs that are already in a `SUCCEEDED`, `FAILED`, or `CANCELED` state cannot be canceled.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:delete:summarizer_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"cancelBatchSummarizerJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch summarization job to cancel.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"204":{"description":"Job canceled successfully. No content returned."},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"409":{"description":"**HTTP Status Code:** `409` <br>\n Conflict  The job is already in a terminal state (`SUCCEEDED`, `FAILED`, or `CANCELED`). \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:delete:summarizer_batch_job:admin"]}}},"/aiservices/summarizer/jobs/{jobId}/files":{"get":{"tags":["Summarizer"],"summary":"List Batch Summarizer Job Files","description":"Retrieves a paginated list of individual file results for a batch summarization job.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_summarizer_batch_job_files:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchSummarizerJobFiles","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch summarization job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"state","in":"query","description":"This field enables you to filter files by processing state. If you omit this parameter, the API returns files in all states.","required":false,"schema":{"type":"string","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]}},{"name":"page_size","in":"query","description":"The maximum number of files to return per page.","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer","format":"int32","example":100,"default":100}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJmaWxlX2lkIjoiZl8wMDEifQ"}}],"responses":{"200":{"description":"Files listed successfully.","content":{"application/json":{"schema":{"required":["files"],"type":"object","properties":{"files":{"maxItems":1000,"type":"array","description":"The list of file results for this page.","items":{"required":["file_id","input_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"The unique file identifier within the job.","example":"f_001"},"input_uri":{"type":"string","description":"The source transcript file URI.","example":"s3://acme-bucket/transcripts/2025/11/meeting_001.vtt"},"state":{"type":"string","description":"The current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"The URI of the summarization result JSON file. Null if not yet processed or failed.","nullable":true,"example":"s3://acme-bucket/summaries/2025/11/meeting_001.json"},"usage":{"type":"object","properties":{"input_units":{"type":"number","description":"The number of input characters processed.","example":4820},"output_units":{"type":"number","description":"The number of output characters generated.","example":312},"unit_type":{"type":"string","description":"The unit of measurement for billing.","example":"characters"},"details":{"type":"object","properties":{"summarizer":{"type":"object","properties":{"task":{"type":"string","description":"The task type.","example":"full_summary"},"summary_type":{"type":"string","description":"The type of content summarized.","example":"CONVERSATION"}},"description":"Summarizer-specific usage details."}},"description":"Service-specific billing details."}},"description":"Character usage for billing. Null until processing completes.","nullable":true},"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code indicating the failure reason.","example":"UNSUPPORTED_CONTENT_TYPE"},"message":{"type":"string","description":"Human-readable error description.","example":"Content type audio/wav is not supported for summarization"}},"description":"Error details. Only present when state is `FILE_FAILED`.","nullable":true}}}},"next_page_token":{"type":"string","description":"Pagination token for fetching the next page. Empty if no more results.","example":"eyJmaWxlX2lkIjoiZl8xMDEifQ"}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_summarizer_batch_job_files:admin"]}}},"/aiservices/summarizer/jobs/{jobId}/files/{fileId}":{"get":{"tags":["Summarizer"],"summary":"Get Batch Summarizer Job File","description":"Retrieves the processing result for a specific file within a batch summarization job.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:summarizer_batch_job_file:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchSummarizerJobFile","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch summarization job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"fileId","in":"path","description":"The unique identifier of the file within the job.","required":true,"schema":{"type":"string","example":"f_001"}}],"responses":{"200":{"description":"File result retrieved successfully.","content":{"application/json":{"schema":{"required":["file_id","input_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"The unique identifier of the file within the job.","example":"f_001"},"input_uri":{"type":"string","description":"The source transcript file URI.","example":"s3://acme-bucket/transcripts/2025/11/meeting_001.vtt"},"state":{"type":"string","description":"The current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"The URI of the summarization result JSON file. This value is `null` if the file has not yet been processed or processing failed.","nullable":true,"example":"s3://acme-bucket/summaries/2025/11/meeting_001.json"},"usage":{"type":"object","properties":{"input_units":{"type":"number","description":"The number of input characters processed.","example":4820},"output_units":{"type":"number","description":"The number of output characters generated.","example":312},"unit_type":{"type":"string","description":"The unit of measurement for billing.","example":"characters"},"details":{"type":"object","properties":{"summarizer":{"type":"object","properties":{"task":{"type":"string","description":"The task type.","example":"full_summary"},"summary_type":{"type":"string","description":"The type of content summarized.","example":"CONVERSATION"}},"description":"Summarizer-specific usage details."}},"description":"Service-specific billing details."}},"description":"The character usage for billing. This value is `null` until processing completes.","nullable":true},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"UNSUPPORTED_CONTENT_TYPE"},"message":{"type":"string","description":"A human-readable error description.","example":"Content type audio/wav is not supported for summarization"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context."}},"description":"Error details. Only present when the state is `FILE_FAILED`.","nullable":true}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:summarizer_batch_job_file:admin"]}}},"/aiservices/summarizer/summarize":{"post":{"tags":["Summarizer"],"summary":"Summarize (Synchronous)","description":"Submit transcript text and receive a summary inline. This is a synchronous operation — the response is returned immediately after summarization completes.\n\nSupported task types: full summary (recap + section summary + action items, also returned combined as markdown), recap only, action items only, or section summary only.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:summarize:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"summarize","requestBody":{"content":{"application/json":{"schema":{"required":["input"],"type":"object","properties":{"input":{"required":["text"],"type":"object","properties":{"text":{"type":"string","description":"The transcript text to summarize.","example":"Alice: Good morning everyone, let's get started.\nBob: I finished the auth module last week.\nAlice: Great. Bob, can you document the API by Friday?\nBob: Sure, I'll have that done."}},"description":"The input content to summarize."},"config":{"type":"object","properties":{"summary_type":{"type":"string","description":"The type of content being summarized. Defaults to `CONVERSATION`.","example":"CONVERSATION","default":"CONVERSATION","enum":["CONVERSATION"]},"task":{"type":"string","description":"The summarization task type. Defaults to `full_summary` if not specified. Accepted values: `full_summary`, `recap`, `action_items`, and `summary`.","example":"full_summary","default":"full_summary","enum":["full_summary","recap","action_items","summary"]},"language":{"type":"string","description":"The output language as an ISO locale code. Supported values: `en-US`, `zh-CN`, `zh-Hans`, `ja-JP`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`, `ar-SA`, `ar-AE`. Defaults to `en-US`.","example":"en-US"},"output_format":{"type":"string","description":"The output format. Defaults to `text`. Currently, only `text` is supported.","example":"text","default":"text","enum":["text"]}},"description":"Summarization configuration options."}}}}}},"responses":{"200":{"description":"Summarization completed successfully.","content":{"application/json":{"schema":{"required":["model","request_id","result","task","usage"],"type":"object","properties":{"request_id":{"type":"string","description":"The unique request identifier.","example":"req_abc123"},"task":{"type":"string","description":"The task that was executed.","example":"full_summary","enum":["full_summary","recap","action_items","summary"]},"result":{"type":"object","properties":{"recap":{"type":"string","description":"A high-level meeting recap. Present when the task is `full_summary` or `recap`.","example":"The team aligned on deliverables: Bob will document the auth API by Friday."},"summary_text":{"type":"string","description":"A section-by-section summary. Present when the task is `full_summary` or `summary`.","example":"**Authentication Module**\nBob completed the auth module. Documentation is due Friday."},"action_items":{"type":"string","description":"The extracted action items. Present when the task is `full_summary` or `action_items`.","example":"- **Bob**: Document the auth API by Friday"},"full_summary":{"type":"string","description":"A combined markdown summary with recap, section summary, and action items formatted as sections. Present when the task is `full_summary`.","example":"## Recap\nThe team aligned on deliverables: Bob will document the auth API by Friday.\n\n## Summary\n**Authentication Module**\nBob completed the auth module. Documentation is due Friday.\n\n## Action Items\n- **Bob**: Document the auth API by Friday"}},"description":"The summarization result. The fields populated depend on the `task` value."},"model":{"type":"string","description":"The model identifier used for summarization.","example":"zoom-summarizer-v1"},"usage":{"type":"object","properties":{"input_units":{"type":"integer","description":"The number of input characters processed.","example":4820},"output_units":{"type":"integer","description":"The number of output characters generated.","example":312},"unit_type":{"type":"string","description":"The unit of measurement for billing.","example":"characters"},"details":{"type":"object","properties":{"summarizer":{"type":"object","properties":{"task":{"type":"string","description":"The task type used.","example":"full_summary"},"summary_type":{"type":"string","description":"The type of content summarized.","example":"CONVERSATION"}},"description":"The summarizer-specific usage details."}},"description":"The service-specific billing details."}},"description":"The token and character usage for billing."}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:summarize:admin"]}}},"/aiservices/translator/jobs":{"get":{"tags":["Translator"],"summary":"List Batch Translator Jobs","description":"Retrieves a paginated list of batch translation jobs for the authenticated tenant.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_translator_batch_jobs:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchTranslatorJobs","parameters":[{"name":"state","in":"query","description":"Filter jobs by processing state. Omit to return jobs in all states.","required":false,"schema":{"type":"string","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]}},{"name":"page_size","in":"query","description":"The maximum number of jobs to return per page.","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer","format":"int32","example":50,"default":50}},{"name":"next_page_token","in":"query","description":"The pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJqb2JfaWQiOiJqb2JfYWJjMTIzIn0"}}],"responses":{"200":{"description":"Jobs listed successfully.","content":{"application/json":{"schema":{"required":["jobs"],"type":"object","properties":{"jobs":{"maxItems":1000,"type":"array","description":"List of batch translation jobs.","items":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"The overall job processing state.","example":"PROCESSING","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"},"input":{"type":"object","properties":{"mode":{"type":"string","description":"The input mode.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path to the input files.","example":"s3://acme-bucket/text/"}},"description":"The input configuration."},"output":{"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path where translations are written.","example":"s3://acme-bucket/translations/"},"layout":{"type":"string","description":"The output file layout strategy.","example":"PREFIX","enum":["ADJACENT","PREFIX"]}},"description":"The output configuration."},"config":{"type":"object","properties":{"source_language":{"type":"string","description":"The source language ISO locale code. Empty if auto-detected.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`","example":"en-US"},"target_languages":{"type":"array","description":"The target language ISO locale codes.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`","example":["es-ES"],"items":{"type":"string"}}},"description":"The translation configuration."},"summary":{"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in the job.","example":2487},"queued":{"type":"integer","description":"The number of files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The number of files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The number of successfully processed files.","example":2450},"failed":{"type":"integer","description":"The number of files that failed processing.","example":14},"skipped":{"type":"integer","description":"The number of files skipped due to filters or limits.","example":0},"canceled":{"type":"integer","description":"The number of files canceled by user request.","example":0}},"description":"The job progress summary."},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"INVALID_CREDENTIALS"},"message":{"type":"string","description":"A human-readable error message.","example":"AWS credentials expired"}},"description":"The job-level error. Only present when the state is `FAILED`.","nullable":true}}}},"next_page_token":{"type":"string","description":"The pagination token for fetching the next page. Empty if no more results.","example":"eyJqb2JfaWQiOiJqb2JfZGVmNDU2In0"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_translator_batch_jobs:admin"]}},"post":{"tags":["Translator"],"summary":"Submit Batch Translator Job","description":"Submits a batch translation job for asynchronous processing.\n\nSupports three input modes: single file (mode inferred when the URI points to a single file), prefix/container enumeration (with optional filters), or explicit manifest (list of URIs).\n\nMaximum of 1,000 files per manifest.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:translator_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"submitBatchTranslator","requestBody":{"content":{"application/json":{"schema":{"required":["input","output"],"type":"object","properties":{"input":{"required":["source"],"type":"object","properties":{"mode":{"type":"string","description":"The input processing mode. Optional — can be inferred: `MANIFEST` if a manifest array is provided, `SINGLE` if the URI points to a single file, `PREFIX` if the URI is a directory/prefix.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The S3 URI for a single file or prefix/container. Required for SINGLE and PREFIX modes.","format":"uri","example":"s3://acme-bucket/text/2025/11/"},"manifest":{"maxItems":1000,"minItems":1,"type":"array","description":"The explicit list of file URIs for MANIFEST mode. Required when mode is `MANIFEST`. Maximum of 1,000 files per batch job.","example":["s3://acme-bucket/text/document_001.txt","s3://acme-bucket/text/document_002.txt"],"items":{"type":"string","format":"uri"}},"filters":{"type":"object","properties":{"include_globs":{"maxItems":10,"type":"array","description":"This field includes only files matching these glob patterns. Supports wildcards: `*` (any characters), `**` (recursive), `?` (single character). Applied before `exclude_globs`.","example":["**/*.txt","**/*.vtt"],"items":{"type":"string"}},"exclude_globs":{"maxItems":10,"type":"array","description":"The exclude files matching these glob patterns. Applied after `include_globs`.","example":["**/tmp/**","*_draft.*"],"items":{"type":"string"}}},"description":"The file filtering options for PREFIX mode. Use glob patterns to include or exclude files."},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"YOUR_AWS_ACCESS_KEY_ID"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"YOUR_AWS_SECRET_ACCESS_KEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 access. Required when the source is S3 and URIs are not pre-signed."}},"description":"The storage authentication credentials."}},"description":"The input source configuration. Provide `uri` (for SINGLE/PREFIX modes) or `manifest` (for MANIFEST mode)."},"output":{"required":["destination","uri"],"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The base output URI where translation results will be written.","format":"uri","example":"s3://acme-bucket/translations/2025/11/"},"layout":{"type":"string","description":"The output file layout strategy. `ADJACENT`: places output next to the input file. `PREFIX`: uses the output URI as the base directory.","example":"PREFIX","enum":["ADJACENT","PREFIX"]},"overwrite":{"type":"boolean","description":"Whether to overwrite existing output files.","example":false,"default":false},"auth":{"type":"object","properties":{"aws":{"required":["access_key_id","secret_access_key","session_token"],"type":"object","properties":{"access_key_id":{"type":"string","description":"The AWS access key ID.","example":"YOUR_AWS_ACCESS_KEY_ID"},"secret_access_key":{"type":"string","description":"The AWS secret access key.","example":"YOUR_AWS_SECRET_ACCESS_KEY"},"session_token":{"type":"string","description":"The AWS session token for temporary credentials (recommended).","example":"FwoGZXIvYXdzE..."}},"description":"The AWS credentials for S3 write access."}},"description":"The storage authentication credentials."}},"description":"The output destination configuration."},"config":{"type":"object","properties":{"source_language":{"type":"string","description":"The source language as an ISO locale code. Leave empty for automatic language detection.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":"en-US"},"target_languages":{"maxItems":1,"minItems":1,"type":"array","description":"The list of target language ISO locale codes to translate. Maximum of 1 target per request. One side of each pair must be English (`en-US`).\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":["es-ES"],"items":{"type":"string"}}},"description":"The translation configuration."},"reference_id":{"maxLength":256,"type":"string","description":"The customer-provided reference ID for deduplication and correlation. Submitting the same `reference_id` twice returns the existing job instead of creating a duplicate.","example":"translate-2025-11"},"notifications":{"type":"object","properties":{"webhook_url":{"type":"string","description":"The HTTPS webhook URL to receive POST notifications on job state changes.","format":"uri","example":"https://example.com/hooks/translator"},"secret":{"maxLength":256,"type":"string","description":"The shared secret used to sign webhook payloads. Used as the HMAC key when `security_type` is `WEBHOOK_SECURITY_HMAC`, or as the JWT signing key when `security_type` is `WEBHOOK_SECURITY_JWT`.","example":"hmac-secret"},"security_type":{"type":"string","description":"The webhook payload signature scheme. Defaults to `WEBHOOK_SECURITY_HMAC`.","example":"WEBHOOK_SECURITY_HMAC","default":"WEBHOOK_SECURITY_HMAC","enum":["WEBHOOK_SECURITY_HMAC","WEBHOOK_SECURITY_JWT"]},"audience":{"type":"string","description":"The JWT audience (`aud` claim) for the signed webhook token. Required when `security_type` is `WEBHOOK_SECURITY_JWT`.","example":"https://example.com/hooks/translator"}},"description":"The webhook notification settings for job status updates."},"limits":{"type":"object","properties":{"max_files":{"type":"integer","description":"The maximum number of files to process. Excess files are skipped.","example":500}},"description":"The job processing limits."}}}}}},"responses":{"201":{"description":"Job submitted successfully and queued for processing.","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The unique job identifier for tracking and status queries.","example":"job_abc123"},"state":{"type":"string","description":"The initial job state (typically `QUEUED`).","example":"QUEUED","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"The job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"409":{"description":"**HTTP Status Code:** `409` <br>\n Conflict  -- a job with the same `reference_id` already exists. \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:translator_batch_job:admin"]}}},"/aiservices/translator/jobs/{jobId}":{"get":{"tags":["Translator"],"summary":"Get Batch Translator Job","description":"Retrieves job-level status, configuration, and progress summary for a batch translation job.\n\nTo list individual file results, use the List Batch Job Files endpoint.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:translator_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchTranslatorJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch translation job.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"200":{"description":"Job status retrieved successfully.","content":{"application/json":{"schema":{"required":["job_id","state","submitted_at"],"type":"object","properties":{"job_id":{"type":"string","description":"The job identifier.","example":"job_abc123"},"state":{"type":"string","description":"Overall job processing state. `PARTIAL` indicates some files succeeded while others failed.","example":"PROCESSING","enum":["QUEUED","PROCESSING","SUCCEEDED","PARTIAL","FAILED","CANCELED"]},"submitted_at":{"type":"string","description":"Job submission timestamp in ISO 8601 format.","format":"date-time","example":"2026-01-05T18:34:12Z"},"input":{"type":"object","properties":{"mode":{"type":"string","description":"The input mode.","example":"PREFIX","enum":["SINGLE","PREFIX","MANIFEST"]},"source":{"type":"string","description":"The storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path to input files.","example":"s3://acme-bucket/text/2025/11/"}},"description":"Input configuration used when the job was submitted."},"output":{"type":"object","properties":{"destination":{"type":"string","description":"The output storage provider.","example":"S3","enum":["S3"]},"uri":{"type":"string","description":"The URI path where translations are written.","example":"s3://acme-bucket/translations/2025/11/"},"layout":{"type":"string","description":"The output file layout strategy.","example":"PREFIX","enum":["ADJACENT","PREFIX"]}},"description":"Output configuration used when the job was submitted."},"config":{"type":"object","properties":{"source_language":{"type":"string","description":"Source language ISO locale code. Empty if auto-detected.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":"en-US"},"target_languages":{"type":"array","description":"Target language ISO locale codes.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":["es-ES"],"items":{"type":"string"}}},"description":"Translation configuration used for this job."},"summary":{"type":"object","properties":{"total_files":{"type":"integer","description":"The total number of files in the job.","example":2487},"queued":{"type":"integer","description":"The number of files waiting in the queue.","example":0},"processing":{"type":"integer","description":"The number of files currently being processed.","example":23},"succeeded":{"type":"integer","description":"The number of successfully processed files.","example":2450},"failed":{"type":"integer","description":"The number of files that failed processing.","example":14},"skipped":{"type":"integer","description":"The number of files skipped due to filters or limits.","example":0},"canceled":{"type":"integer","description":"The number of files canceled by user request.","example":0}},"description":"Aggregated job progress statistics."},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"INVALID_CREDENTIALS"},"message":{"type":"string","description":"A human-readable error message.","example":"AWS credentials expired"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context."}},"description":"Job-level error. Only present when state is `FAILED`.","nullable":true}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:translator_batch_job:admin"]}},"delete":{"tags":["Translator"],"summary":"Cancel Batch Translator Job","description":"Cancels a batch translation job.\n\nOnly jobs in `QUEUED` or `PROCESSING` state can be canceled.\n\nSuccessfully canceled jobs transition to the `CANCELED` state. Jobs that are already in the `SUCCEEDED`, `FAILED`, or `CANCELED` state cannot be canceled.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:delete:translator_batch_job:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"cancelBatchTranslatorJob","parameters":[{"name":"jobId","in":"path","description":"The unique identifier of the batch translation job to cancel.","required":true,"schema":{"type":"string","example":"job_abc123"}}],"responses":{"204":{"description":"Job canceled successfully. No content returned."},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"409":{"description":"**HTTP Status Code:** `409` <br>\n Conflict  The job is already in a terminal state (`SUCCEEDED`, `FAILED`, or `CANCELED`). \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:delete:translator_batch_job:admin"]}}},"/aiservices/translator/jobs/{jobId}/files":{"get":{"tags":["Translator"],"summary":"List Batch Translator Job Files","description":"Retrieves a paginated list of individual file results for a batch translation job.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:list_translator_batch_job_files:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"listBatchTranslatorJobFiles","parameters":[{"name":"jobId","in":"path","description":"Unique identifier of the batch translation job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"state","in":"query","description":"Filter files by processing state. Omit to return files in all states.","required":false,"schema":{"type":"string","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]}},{"name":"page_size","in":"query","description":"Maximum number of files to return per page.","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer","format":"int32","example":100,"default":100}},{"name":"next_page_token","in":"query","description":"Pagination token from the previous response's `next_page_token` field.","required":false,"schema":{"type":"string","example":"eyJmaWxlX2lkIjoiZl8wMDEifQ"}}],"responses":{"200":{"description":"Files listed successfully.","content":{"application/json":{"schema":{"required":["files"],"type":"object","properties":{"files":{"maxItems":1000,"type":"array","description":"List of file results for this page.","items":{"required":["file_id","input_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"Unique file identifier within the job.","example":"f_001"},"input_uri":{"type":"string","description":"Source text file URI.","example":"s3://acme-bucket/text/2025/11/document_001.txt"},"state":{"type":"string","description":"Current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"URI of the translation result file. Null if not yet processed or failed.","nullable":true,"example":"s3://acme-bucket/translations/2025/11/document_001.json"},"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code indicating the failure reason.","example":"UNSUPPORTED_LANGUAGE_PAIR"},"message":{"type":"string","description":"Human-readable error description.","example":"Translation between zh-CN and ja-JP is not supported"}},"description":"Error details. Only present when state is `FILE_FAILED`.","nullable":true}}}},"next_page_token":{"type":"string","description":"Pagination token for fetching the next page. Empty if no more results.","example":"eyJmaWxlX2lkIjoiZl8xMDEifQ"}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:list_translator_batch_job_files:admin"]}}},"/aiservices/translator/jobs/{jobId}/files/{fileId}":{"get":{"tags":["Translator"],"summary":"Get Batch Translator Job File","description":"Retrieves the processing result for a specific file within a batch translation job.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:translator_batch_job_file:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"getBatchTranslatorJobFile","parameters":[{"name":"jobId","in":"path","description":"Unique identifier of the batch translation job.","required":true,"schema":{"type":"string","example":"job_abc123"}},{"name":"fileId","in":"path","description":"Unique identifier of the file within the job.","required":true,"schema":{"type":"string","example":"f_001"}}],"responses":{"200":{"description":"File result retrieved successfully.","content":{"application/json":{"schema":{"required":["file_id","input_uri","state"],"type":"object","properties":{"file_id":{"type":"string","description":"Unique identifier of the file within the job.","example":"f_001"},"input_uri":{"type":"string","description":"The URI of the source text file.","example":"s3://acme-bucket/text/2025/11/document_001.txt"},"state":{"type":"string","description":"The current processing state of this file.","example":"FILE_SUCCEEDED","enum":["FILE_QUEUED","FILE_PROCESSING","FILE_SUCCEEDED","FILE_FAILED","FILE_CANCELED","FILE_SKIPPED"]},"output_uri":{"type":"string","description":"The URI of the translation result file. This value is `null` if the file has not yet been processed or processing failed.","nullable":true,"example":"s3://acme-bucket/translations/2025/11/document_001.json"},"error":{"type":"object","properties":{"code":{"type":"string","description":"The error code indicating the failure reason.","example":"UNSUPPORTED_LANGUAGE_PAIR"},"message":{"type":"string","description":"A human-readable error description.","example":"Translation between zh-CN and ja-JP is not supported"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional error context."}},"description":"The error details. Only present when the state is `FILE_FAILED`.","nullable":true}}}}}},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"404":{"description":"**HTTP Status Code:** `404` <br>\n Not Found  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:translator_batch_job_file:admin"]}}},"/aiservices/translator/translate":{"post":{"tags":["Translator"],"summary":"Translate (Synchronous)","description":"Submit text and receive translations inline. This is a synchronous operation — the response is returned immediately after translation completes.\n\nSupports auto-detection of the source language and translation into a target language.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:write:translate:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`","operationId":"translate","requestBody":{"content":{"application/json":{"schema":{"required":["text"],"type":"object","properties":{"text":{"type":"string","description":"The text to translate.","example":"Good morning everyone, let's get started with today's meeting."},"config":{"type":"object","properties":{"source_language":{"type":"string","description":"Source language as an ISO locale code. Leave empty for automatic language detection.\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":"en-US"},"target_languages":{"maxItems":1,"minItems":1,"type":"array","description":"List of target language ISO locale codes to translate into. Maximum of 1 target per request. One side of each pair must be English (`en-US`).\n\nSupported: `en-US`, `zh-CN`, `zh-Hans`, `zh-TW`, `zh-Hant`, `ja-JP`, `ko-KR`, `es-ES`, `fr-FR`, `de-DE`, `pt-PT`, `pt-BR`, `it-IT`.","example":["es-ES"],"items":{"type":"string"}}},"description":"Translation configuration options."}}}}}},"responses":{"200":{"description":"Translation completed successfully.","content":{"application/json":{"schema":{"required":["model","request_id","result","usage"],"type":"object","properties":{"request_id":{"type":"string","description":"Unique request identifier.","example":"req_abc123"},"result":{"type":"object","properties":{"translations":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of target language codes to translated text.","example":{"es-ES":"Buenos días a todos, comencemos la reunión de hoy."}}},"description":"Translation results keyed by target language code."},"model":{"type":"string","description":"Model identifier used for translation.","example":"zoom-translator-v1"},"usage":{"type":"object","properties":{"input_units":{"type":"integer","description":"Number of input characters processed.","example":62},"output_units":{"type":"integer","description":"Number of output characters generated.","example":56},"unit_type":{"type":"string","description":"Unit of measurement for billing.","example":"characters"},"details":{"type":"object","properties":{"translator":{"type":"object","properties":{"source_language":{"type":"string","description":"Detected or specified source language.","example":"en-US"},"target_language":{"type":"string","description":"Target language for translation.","example":"es-ES"}},"description":"Translator-specific usage details."}},"description":"Service-specific billing details."}},"description":"Character usage for billing."}}}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request  \n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized  \n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden  \n\n "},"422":{"description":"**HTTP Status Code:** `422` <br>\n Unprocessable Entity  \n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error  \n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:write:translate:admin"]}}},"/aiservices/voice-agent/live":{"get":{"tags":["VoiceAgent"],"summary":"Live Voice Agent WebSocket","description":"The Voice Agent Live API enables real-time spoken conversations with an AI assistant over a WebSocket connection. Your application streams audio to the service and receives assistant speech, transcripts, and function-call events on the same connection.\n\n**Key features**\n\n- **Real-time responses:** Assistant speech streams as it is generated, so playback can begin before the complete response is ready.\n- **Conversation transcripts:** Receive final user transcripts and streamed assistant transcripts to display the conversation alongside audio.\n- **Natural conversation flow:** Automatic turn detection identifies when the user has finished speaking, and users can interrupt an assistant response by speaking.\n- **Session configuration:** Set the assistant's instructions and choose a supported voice when you start a session.\n- **Function calling:** Define functions that run in your application and return their results to the session so the assistant can use them in the conversation.\n- **Bring your own key:** Use your own API key to connect to supported OpenAI- or Anthropic-hosted models as the LLM provider.\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `aiservices:read:voice-agent:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM`","operationId":"liveVoiceAgent","parameters":[{"name":"Sec-WebSocket-Protocol","in":"header","description":"The WebSocket subprotocol requested by the client.","required":true,"schema":{"type":"string","example":"voice-agent.zoom.v2","enum":["voice-agent.zoom.v2"]}}],"responses":{"101":{"description":"WebSocket upgrade accepted. The connection switches to the WebSocket protocol. After the upgrade, both sides send JSON text frames as described above.","headers":{"Upgrade":{"description":"The selected upgraded protocol.","schema":{"type":"string","example":"websocket"}},"Connection":{"description":"Whether the connection was upgraded.","schema":{"type":"string","example":"Upgrade"}},"Sec-WebSocket-Protocol":{"description":"The selected WebSocket subprotocol for the voice agent.","schema":{"type":"string","example":"voice-agent.zoom.v2","enum":["voice-agent.zoom.v2"]}}}},"400":{"description":"**HTTP Status Code:** `400` <br>\n Bad Request\n\n "},"401":{"description":"**HTTP Status Code:** `401` <br>\n Unauthorized\n\n "},"403":{"description":"**HTTP Status Code:** `403` <br>\n Forbidden\n\n "},"426":{"description":"**HTTP Status Code:** `426` <br>\n Upgrade Required\n\n "},"429":{"description":"**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). \n\n "},"500":{"description":"**HTTP Status Code:** `500` <br>\n Internal Server Error\n\n "},"503":{"description":"**HTTP Status Code:** `503` <br>\n Service Unavailable\n\n "}},"security":[{"openapi_authorization":[]}],"x-extensions":{"x-permissions":[],"x-granular-scopes":["aiservices:read:voice-agent:admin"]}}}},"components":{"securitySchemes":{"openapi_authorization":{"scheme":"bearer","type":"http"}}},"tags":[{"name":"Asset"},{"name":"Decisions"},{"name":"Scribe"},{"name":"Speech Summarization"},{"name":"Summarizer"},{"name":"Translator"},{"name":"VoiceAgent"}]}