chat_completions
ChatGPTCreate an LLM chat completion with optional reasoning controls (thinking, reasoning.enabled/effort, or reasoning_effort). Returns completion ID and text. Generates unique idempotency key if not provided. Model support varies.
create_isolation_export
ChatGPTCreate an export of isolated audio in specified format
create_meeting
ChatGPTSubmit a meeting recording for asynchronous transcription and notes (POST /v1/meetings). Provide exactly one audio source: audio_url (public HTTPS URL the API downloads; preferred for large files) or audio_base64 (small files only: the MCP request body is capped at 10 MiB, so base64 audio must be under ~7 MB). Returns 202 Accepted with meeting (status queued). Poll get_meeting until status is ready, transcribed, or failed — not queued or running. Requires meetings:write and a UUID Idempotency-Key (auto-generated if omitted). Optional title (1–160 chars, single line; defaults to filename) and language (auto or a capabilities code; default auto). Limits: 500 MiB, 0.5 seconds–24 hours, MP3/WAV/M4A/AAC/OGG/Opus/WebM/Opus/FLAC, 10 queued or running meetings per account. Personal workspace keys only. Developer responses never include audio playback URLs.
create_meeting_from_file
ChatGPTChatGPT only: create a VoiceLab meeting (transcript + notes) from an audio file the user attached in ChatGPT. VoiceLab downloads the file directly; poll get_meeting with the returned meeting id until status is ready, transcribed, or failed. Other clients should use create_meeting with audio_url or audio_base64.
create_realtime_ticket
ChatGPTCreate a short-lived WebSocket ticket for realtime TTS or STT. Tickets expire after ~2 minutes. For browser clients only; server clients can use xvl-api-key header directly on WebSocket handshake.
delete_meeting
ChatGPTDelete a meeting and its results (DELETE /v1/meetings/{id}). Destructive. Requires meetings:write. Returns 204 No Content. Deleting a queued or running meeting releases its credit hold. Deleted meetings also disappear from the web app.
delete_transcription
ChatGPTDelete a transcription and its audio (destructive)
delete_tts_generation
ChatGPTDelete a TTS generation and its audio (destructive)
edit_transcription_document
ChatGPTAtomically replace the complete transcription document (segments, speakers, title). Requires current revision from GET response to prevent conflicts. Returns 409 stt_edit_conflict on stale revision.
export_transcription
ChatGPTExport transcription as TXT, JSON, SRT, or VTT. Returns content as base64-encoded data.
get_isolation
ChatGPTGet voice isolation job status, processing stage, and audio URLs. Poll until BOTH status=completed AND audio_status=completed for the default MP3. Job can complete while MP3 preparation is still running. Signed URLs expire after ~10 minutes.
get_isolation_export
ChatGPTGet export status and download URL
get_llm_request
ChatGPTGet LLM request status, token usage, and credit details
get_meeting
ChatGPTRead meeting status, speaker-labelled transcript, summary, decisions, and action items (GET /v1/meetings/{id}). Requires meetings:read. Poll every two seconds or follow Retry-After while status is queued or running. Terminal statuses: ready (transcript and notes complete), transcribed (transcript saved; notes failed — optionally regenerate_meeting_notes), failed (inspect failure.code). processing.transcription and processing.notes each report waiting/queued/running/ready/failed with retryable. Unknown, deleted, or another account's meetings return 404 meeting_not_found. Developer responses never include audio playback URLs.
get_meeting_translations
ChatGPTAttempt to read meeting translations (GET /v1/meetings/{id}/translations). Docs state translations are not available with API keys; the dashboard uses JWT /api/v1/meetings/{id}/translations. The developer contract does not document this endpoint. Expect 403 insufficient_scope or 404. Included so agents can attempt the call; do not treat success as guaranteed.
get_profile
ChatGPTGet authenticated user profile information (OpenAI profile tool)
get_transcription
ChatGPTGet transcription status and results. Poll this after speech_to_text until status is completed.
get_tts_generation
ChatGPTGet TTS generation details with audio URL
hide_isolation
ChatGPTHide isolation job from history (does not delete audio)
isolate_voice
ChatGPTRemove background noise from audio with optional speech restoration. Returns job ID for polling. Generates unique idempotency key if not provided.
isolate_voice_batch
ChatGPTSubmit 1-4 audio files for batch noise removal with atomic validation and credit reservation. Processing options apply to all files. Returns batch ID and individual job IDs. Generates unique idempotency key if not provided.
list_isolations
ChatGPTList voice isolation history
list_meeting_capabilities
ChatGPTList Meeting AI supported recording languages and feature flags (GET /v1/meetings/capabilities). Requires meetings:read. Response data items have code, name, and native_name; allow unknown fields. Send one code as language on create_meeting, or omit language for automatic detection. Personal workspace keys only; team keys return 403 workspace_product_unavailable.
list_meetings
ChatGPTList the account's meetings, newest first (GET /v1/meetings). Requires meetings:read. Optional limit defaults to 20 (1–50). Pass next_cursor as cursor for the next page. To refresh specific meetings, send ids as a comma-separated list of up to 50 meeting IDs instead of cursor. IDs that do not belong to the account are omitted. Invalid limit, cursor, or ids return 400 invalid_meeting_query.
list_models
ChatGPTList available LLM models with pricing and limits
list_transcriptions
ChatGPTList STT transcription history
list_tts_generations
ChatGPTList TTS generation history
list_tts_languages
ChatGPTList supported TTS languages and model capabilities
list_voices
ChatGPTList available voices, optionally filtered by language
regenerate_meeting_notes
ChatGPTRetry notes for a meeting whose notes generation failed (POST /v1/meetings/{id}/notes/generations). Requires meetings:write. Only meetings with status transcribed qualify; others return 409 meeting_notes_not_retryable. Billed again at the meeting's full duration. Returns 202 Accepted with meeting; poll get_meeting until status is no longer queued or running.
speech_to_text
ChatGPTTranscribe audio asynchronously. Provide exactly one audio source: audio_url (public HTTPS URL the API downloads; preferred for large files) or audio_base64 (small files only: the MCP request body is capped at 10 MiB, so base64 audio must be under ~7 MB). Returns 202 Accepted with job ID for polling (even for short clips). Poll get_transcription until status is completed. Generates unique idempotency key if not provided.
text_to_speech
ChatGPTGenerate speech from text. Returns audio as base64-encoded WAV. Generates unique idempotency key if not provided.
transcribe_file
ChatGPTChatGPT only: transcribe an audio file the user attached in ChatGPT with VoiceLab speech-to-text. VoiceLab downloads the file directly; poll get_transcription with the returned id until status is completed. Other clients should use speech_to_text with audio_url or audio_base64.
update_transcription
ChatGPTUpdate transcription title