Synchronous generation transcribes a recording and generates a note using the selected template. The HTTP response contains both results after processing completes.
Endpoint
POST /aiservices/clinical_notes/generate
Authenticate with your Zoom AI Services credentials. The examples on this page send a token in the Authorization: Bearer header.
Input
Provide a downloadable HTTPS or S3 URI in a JSON request, or upload a recording in the multipart file part.
| Field | Type | Required | Description |
|---|---|---|---|
file | string or multipart file | Yes | Downloadable HTTPS or S3 URI to the recording, or the uploaded file. |
template | string | No | SOAP, GENERAL_MEDICINE, or GENERAL_BEHAVIORAL_HEALTH. Defaults to GENERAL_MEDICINE when omitted or empty. An unknown template returns HTTP 400. |
reference_id | string | No | Optional client-supplied reference. |
Provide exactly one recording input. If transcription or note generation fails, the whole request fails.
| Limit | Value |
|---|---|
| Supported formats | .wav, .mp3, .m4a, .mp4, and .webm |
| Maximum duration | 2 hours |
| Maximum file size | 300 MB for uploads; 2 GB for URLs |
Example request (cURL)
This example uploads a recording and selects the SOAP template.
curl -X POST "https://api.zoom.us/v2/aiservices/clinical_notes/generate" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@consultation.wav;type=audio/wav" \
-F "template=SOAP"
For an HTTPS recording URL, send JSON instead:
curl -X POST "https://api.zoom.us/v2/aiservices/clinical_notes/generate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"file": "https://example.com/consultation.wav",
"template": "SOAP"
}'
Output
A successful request returns HTTP 200 and a JSON object with these fields.
| Field | Type | Description |
|---|---|---|
request_id | string | Request identifier. |
transcript.text_display | string | Complete transcript text. |
clinical_notes.full_note | string | Complete note formatted as Markdown. |
clinical_notes.sections | object[] | Ordered note sections. |
clinical_notes.sections[].title | string | Section heading. |
clinical_notes.sections[].content | string | Generated content for the section. |
clinical_notes is an object containing full_note and sections. Use the section array when your application displays headings and content separately.
The Clinical Notes transcript contains text_display. It does not return transcript segments.
Example response
This response comes from a SOAP request using a synthetic clinical encounter. Generated content depends on the recording.
{
"request_id": "bd89ab23-6e6c-439e-ab0f-19f07806b5a8",
"transcript": {
"text_display": "This is a fictional clinical encounter for API testing. The patient reports a mild headache since yesterday. The patient denies fever and nausea. No examination findings were recorded. The clinician plans a follow-up next week."
},
"clinical_notes": {
"full_note": "**Subjective**\n\nPatient reports a mild headache since yesterday. They deny fever and nausea.\n\n**Objective**\n\nNo examination findings were recorded.\n\n**Assessment**\n\nMild headache since yesterday without reported fever or nausea. No explicit diagnosis beyond the reported symptom was documented.\n\n**Plan**\n\nFor mild headache, follow up next week.",
"sections": [
{
"title": "Subjective",
"content": "Patient reports a mild headache since yesterday. They deny fever and nausea."
},
{
"title": "Objective",
"content": "No examination findings were recorded."
},
{
"title": "Assessment",
"content": "Mild headache since yesterday without reported fever or nausea. No explicit diagnosis beyond the reported symptom was documented."
},
{
"title": "Plan",
"content": "For mild headache, follow up next week."
}
]
}
}
Unsupported media
An input without a supported file extension returns HTTP 400 with reason set to UNSUPPORTED_MEDIA.
{
"code": 400,
"reason": "UNSUPPORTED_MEDIA",
"message": "File extension \".jpg\" is not supported. Supported extensions: .m4a, .mp3, .mp4, .wav, .webm",
"metadata": {}
}
Request errors
If the request fails, the API returns one of these HTTP error codes.
| HTTP status | Reason | Condition |
|---|---|---|
400 | VALIDATION_MISSING_FIELD | The recording input is missing. |
400 | INVALID_INPUT | The template name is unknown or the input URI is invalid. |
400 | UNSUPPORTED_MEDIA | The input does not have a supported media extension. |
429 | — | Too many requests. Retry after the time in the Retry-After header. |
500 | — | Transcription or note generation failed. |
503 | — | The service is temporarily unavailable. |
Authentication errors
Missing or invalid authentication returns HTTP 401. Authentication errors are separate from Clinical Notes application errors. See Get credentials for authentication requirements.