Virtuosis Voice Biomarker API Recordings API
The recordings API from Virtuosis Voice Biomarker API — 2 operation(s) for recordings.
The recordings API from Virtuosis Voice Biomarker API — 2 operation(s) for recordings.
openapi: 3.2.0
info:
title: Reference Recordings API
version: 1.0.0
servers:
- url: https://api.virtuosis.ai/v1.3
description: https://api.virtuosis.ai/v1.3
tags:
- name: recordings
paths:
/recordings:
post:
operationId: uploadRecording
summary: Upload a recording for analysis
description: 'Uploads a Base64-encoded audio file. Analysis processing is triggered on a successful
upload and may take up to five minutes to complete. Requires an active
subscription with available credits; requests are rejected once the balance is
exhausted or the subscription is suspended.
Minimum audio requirements:
- Format: WAV, MP3, MP4, or OGG
- Sample rate: 8,000 Hz
- Bit rate: 32,000 bps
- Channels: 1 (mono)
- Duration: 30 seconds of speech
- Maximum file size: 50 MB
'
tags:
- recordings
parameters:
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Recording uploaded
content:
application/json:
schema:
$ref: '#/components/schemas/UploadRecordingResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Requested analysis is not enabled, access is suspended, or API billing is not provisioned
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large (max 50 MB)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UploadRecordingRequest'
/recordings/{recording_id}/analysis:
get:
operationId: getRecordingAnalysis
summary: Get analysis results for a recording
description: 'Poll for analysis results after uploading a recording. To avoid rate limiting, a polling interval of 15-30 seconds is recommended (minimum 5 seconds), with a polling timeout of five minutes.
'
tags:
- recordings
parameters:
- name: recording_id
in: path
description: The ID of the recording.
required: true
schema:
type: string
format: uuid
- name: analysis
in: query
description: 'Comma-separated list of analysis types to include (default: all)'
required: false
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RecordingAnalysisResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Access is suspended
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Recording not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
AnxietyInsightRating:
type: string
enum:
- minimal
- mild
- moderate
- severe
description: Predicted anxiety level.
title: AnxietyInsightRating
StressInsightRating:
type: string
enum:
- low
- moderate
- high
description: Predicted stress level.
title: StressInsightRating
AnxietyInsight:
type: object
properties:
rating:
$ref: '#/components/schemas/AnxietyInsightRating'
description: Predicted anxiety level.
required:
- rating
title: AnxietyInsight
UploadRecordingRequest:
type: object
properties:
account_id:
type: string
format: uuid
description: The ID of the account submitting the recording.
recorded_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the recording began.
analysis:
type: array
items:
$ref: '#/components/schemas/AnalysisType'
description: Analysis types to run. Must contain at least one type.
audio:
type: string
description: Base64-encoded audio file.
isolate_oldest_speaker:
type: boolean
default: false
description: 'When true, the clip is diarised and only the audio of the speaker estimated to be oldest is kept and analysed. Speaker age is estimated from the audio and carries a multi-year error bar, so speakers close in age may not be separated reliably. The retained speaker''s speech must clear the same 30-second minimum the whole clip does, or the upload is rejected with a SpeakerSpeechTooShort error. Recordings longer than 10 minutes are rejected with a RecordingTooLongForIsolation error.
'
required:
- account_id
- recorded_at
- analysis
- audio
title: UploadRecordingRequest
CommunicationCoachInsights:
type: object
properties:
rhythm:
$ref: '#/components/schemas/CommunicationCoachInsight'
description: Score reflecting the balance between speech and pauses.
clarity:
$ref: '#/components/schemas/CommunicationCoachInsight'
description: Score reflecting the proportion of intelligible speech.
positiveness:
$ref: '#/components/schemas/CommunicationCoachInsight'
description: Score reflecting the proportion of speech with a positive tone.
speaking_rate:
$ref: '#/components/schemas/CommunicationCoachInsight'
description: Score reflecting how closely the speaker's word rate matches the ideal words-per-minute rate.
required:
- rhythm
- clarity
- positiveness
- speaking_rate
description: Communication coach insights keyed by aspect. Present only when analysis completed.
title: CommunicationCoachInsights
ParkinsonsIndicators:
type: object
properties:
volume:
type: integer
description: Mean energy in decibels.
monoloudness:
type: number
format: double
description: Standard deviation of loudness across the utterance in decibels.
monotony:
type: integer
description: Standard deviation of the fundamental frequency in hertz.
articulation:
type: integer
description: Dynamic range of the second formant in hertz.
speech_rate:
type: integer
description: Mean number of words spoken per minute.
speech_rate_stdev:
type: integer
description: Standard deviation of speech rate in words-per-minute.
pause_duration:
type: integer
description: Mean duration of silent pauses in milliseconds.
pause_duration_stdev:
type: integer
description: Standard deviation of pause duration in milliseconds.
voice_quality:
type: number
format: double
description: Cepstral peak prominence in decibels.
hnr:
type: integer
description: Harmonics-to-noise ratio in decibels.
stuttering:
type: number
format: double
description: Word and n-gram repetitions per minute.
description: 'Acoustic and speech indicators used for Parkinson''s analysis. Omitted if analysis did not complete; individual indicators are omitted when unavailable.
'
title: ParkinsonsIndicators
CommunicationCoachAnalysis:
type: object
properties:
status:
$ref: '#/components/schemas/AnalysisStatus'
description: Status of communication coach analysis processing.
indicators:
$ref: '#/components/schemas/CommunicationCoachIndicators'
description: Communication-related speech indicators.
insights:
$ref: '#/components/schemas/CommunicationCoachInsights'
description: Communication coach scores.
required:
- status
title: CommunicationCoachAnalysis
RecordingAnalysis:
type: object
properties:
wellbeing:
$ref: '#/components/schemas/WellbeingAnalysis'
description: Wellbeing analysis results.
parkinsons:
$ref: '#/components/schemas/ParkinsonsAnalysis'
description: Parkinson's analysis results.
alzheimers:
$ref: '#/components/schemas/AlzheimersAnalysis'
description: Alzheimer's analysis results.
communication_coach:
$ref: '#/components/schemas/CommunicationCoachAnalysis'
description: Communication coach analysis results.
description: Analysis results grouped by type.
title: RecordingAnalysis
AlzheimersAnalysis:
type: object
properties:
status:
$ref: '#/components/schemas/AnalysisStatus'
description: Status of Alzheimer's analysis processing.
indicators:
$ref: '#/components/schemas/AlzheimersIndicators'
description: Alzheimer's-related linguistic indicators.
insights:
$ref: '#/components/schemas/AlzheimersInsights'
description: Cognition insights keyed by condition.
required:
- status
title: AlzheimersAnalysis
WellbeingInsights:
type: object
properties:
stress:
$ref: '#/components/schemas/StressInsight'
description: Stress insight.
anxiety:
$ref: '#/components/schemas/AnxietyInsight'
description: Anxiety insight.
depression:
$ref: '#/components/schemas/DepressionInsight'
description: Depression insight.
title: WellbeingInsights
AlzheimersIndicators:
type: object
properties:
ttr:
type: number
format: double
description: Type-token ratio.
brunet_index:
type: number
format: double
description: Brunet's index.
content_ratio:
type: number
format: double
description: Ratio of content words to total words.
mlu_words:
type: number
format: double
description: Mean length of utterance in words.
clause_ratio:
type: number
format: double
description: Ratio of clauses to utterances.
speech_rate:
type: number
format: double
description: Mean number of words spoken per minute.
speech_rate_stdev:
type: number
format: double
description: Standard deviation of speech rate in words-per-minute.
avg_pause_duration_ms:
type: number
format: double
description: Mean pause duration in milliseconds.
pause_filler_words_per_min:
type: number
format: double
description: Pause filler words per minute.
long_pause_ratio:
type: number
format: double
description: Proportion of total audio duration spent in long pauses.
description: 'Linguistic and speech indicators used for Alzheimer''s analysis. Omitted if analysis did not complete; individual indicators are omitted when unavailable.
'
title: AlzheimersIndicators
UploadRecordingResponse:
type: object
properties:
recording_id:
type: string
format: uuid
description: The recording ID used for fetching analysis results.
account_id:
type: string
format: uuid
description: The ID of the account that submitted the recording.
recorded_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the recording began.
uploaded_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the recording was uploaded.
audio_file_format:
type: string
description: Detected audio file format.
audio_size_bytes:
type: integer
description: 'Audio file size in bytes. With isolate_oldest_speaker enabled, this describes the retained audio, not the submitted file.
'
audio_sample_rate_hz:
type: integer
description: Audio sample rate in Hz.
audio_bit_rate_bps:
type: integer
description: Audio bit rate in bits per second.
audio_duration_seconds:
type: number
format: double
description: 'Total audio duration in seconds. With isolate_oldest_speaker enabled, this is the duration of the retained speaker''s audio, not of the submitted clip.
'
speech_duration_seconds:
type: number
format: double
description: 'Detected speech duration in seconds. With isolate_oldest_speaker enabled, this is the isolated speaker''s speech time, not the whole clip''s.
'
required:
- recording_id
- account_id
- recorded_at
- uploaded_at
- audio_file_format
- audio_size_bytes
- audio_sample_rate_hz
- audio_bit_rate_bps
- audio_duration_seconds
- speech_duration_seconds
title: UploadRecordingResponse
WellbeingAnalysis:
type: object
properties:
status:
$ref: '#/components/schemas/AnalysisStatus'
description: Status of wellbeing analysis processing.
insights:
$ref: '#/components/schemas/WellbeingInsights'
description: Wellbeing insights keyed by condition.
required:
- status
title: WellbeingAnalysis
DepressionInsight:
type: object
properties:
rating:
$ref: '#/components/schemas/DepressionInsightRating'
description: Predicted depression level.
required:
- rating
title: DepressionInsight
ParkinsonsInsights:
type: object
properties:
parkinsons:
$ref: '#/components/schemas/ParkinsonsInsight'
description: Parkinson's risk insight.
title: ParkinsonsInsights
CognitionScores:
type: object
properties:
hc:
type: number
format: double
description: Probability of healthy.
mci:
type: number
format: double
description: Probability of mild cognitive impairment.
ad:
type: number
format: double
description: Probability of Alzheimer's disease.
description: Class probability distribution. Individual probabilities are omitted when unavailable.
title: CognitionScores
ParkinsonsAnalysis:
type: object
properties:
status:
$ref: '#/components/schemas/AnalysisStatus'
description: Status of Parkinson's analysis processing.
indicators:
$ref: '#/components/schemas/ParkinsonsIndicators'
description: Parkinson's-related acoustic indicators.
insights:
$ref: '#/components/schemas/ParkinsonsInsights'
description: Parkinson's insights keyed by condition.
required:
- status
title: ParkinsonsAnalysis
DepressionInsightRating:
type: string
enum:
- minimal
- moderate
- severe
description: Predicted depression level.
title: DepressionInsightRating
Error:
type: object
properties:
error:
$ref: '#/components/schemas/ErrorError'
description: Error details.
required:
- error
title: Error
AnalysisType:
type: string
enum:
- wellbeing
- parkinsons
- alzheimers
- communication_coach
description: Analysis type identifier.
title: AnalysisType
ParkinsonsInsight:
type: object
properties:
rating:
type: string
description: Parkinson's risk band derived from the risk score.
score:
type: integer
description: Parkinson's disease probability.
description: 'Parkinson''s risk insight. Omitted if analysis did not complete; rating and score are omitted when unavailable.
'
title: ParkinsonsInsight
RecordingAnalysisResponse:
type: object
properties:
metadata:
$ref: '#/components/schemas/RecordingAnalysisMetadata'
description: Metadata about the recording.
analysis:
$ref: '#/components/schemas/RecordingAnalysis'
description: Analysis results grouped by type.
required:
- metadata
- analysis
title: RecordingAnalysisResponse
AnalysisStatus:
type: string
enum:
- completed
- processing
- error
- not_requested
description: Status of analysis processing.
title: AnalysisStatus
StressInsight:
type: object
properties:
rating:
$ref: '#/components/schemas/StressInsightRating'
description: Predicted stress level.
required:
- rating
title: StressInsight
ErrorError:
type: object
properties:
type:
type: string
description: Machine-readable error type.
message:
type: string
description: Human-readable description of the error.
required:
- type
- message
description: Error details.
title: ErrorError
CognitionInsight:
type: object
properties:
rating:
type: string
description: Predicted classification (hc, mci, or ad).
scores:
$ref: '#/components/schemas/CognitionScores'
description: Class probability distribution.
description: 'Cognition insight. Omitted if analysis did not complete; rating and scores are omitted when unavailable.
'
title: CognitionInsight
AlzheimersInsights:
type: object
properties:
cognition:
$ref: '#/components/schemas/CognitionInsight'
description: Cognition insight.
title: AlzheimersInsights
CommunicationCoachInsight:
type: object
properties:
score:
type: integer
description: Score from 0 to 100.
required:
- score
description: Overall communication score
title: CommunicationCoachInsight
RecordingAnalysisMetadata:
type: object
properties:
recording_id:
type: string
format: uuid
description: The ID of the recording.
account_id:
type: string
format: uuid
description: The ID of the account that submitted the recording.
recorded_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the recording began.
uploaded_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the recording was uploaded. Omitted when unavailable.
audio_file_format:
type: string
description: Detected audio file format. Omitted when unavailable.
audio_size_bytes:
type: integer
description: Audio file size in bytes. Omitted when unavailable.
audio_duration_seconds:
type: number
format: double
description: Total audio duration in seconds.
audio_sample_rate_hz:
type: integer
description: Audio sample rate in Hz. Omitted when unavailable.
audio_bit_rate_bps:
type: integer
description: Audio bit rate in bits per second. Omitted when unavailable.
speech_duration_seconds:
type: number
format: double
description: Detected speech duration in seconds. Omitted when unavailable.
required:
- recording_id
- account_id
- recorded_at
- audio_duration_seconds
description: Metadata about the recording.
title: RecordingAnalysisMetadata
CommunicationCoachIndicators:
type: object
properties:
word_rate:
type: integer
description: Words spoken per minute.
fragment_rate:
type: integer
description: Speech fragments per minute.
filler_words_rate:
type: number
format: double
description: Filler words per minute.
required:
- word_rate
- fragment_rate
- filler_words_rate
description: Speech quantities measured from the audio. Present only when analysis completed.
title: CommunicationCoachIndicators
securitySchemes:
bearerAuth:
type: http
scheme: bearer