clips, so a separate transcription call on the same audio is redundant.
Velma Triage (batch)
Returnsapplication/json. duration_ms, clips, and behaviors are always present. The rest depend on configuration.
Each entry in
clips carries clip_uuid, text, start_ms, duration_ms, speaker_label, language, and the optional emotion, accent, and deepfake_score signals, which are null unless enabled in the stt block.
Each entry in behaviors carries behavior_uuid, behavior_name, speaker_label, detected, confidence, evidence_clip_uuids, definitive_clip_uuid, and reasoning. Entries appear for every behavior evaluated, so detected: false means the behavior was checked and not found.
conversation_type_pick and each entry in participant_role_picks carry a confidence and a selection_source of inferred, auto_selected_single_option, or default, which distinguishes a real inference from a fallback.
Try it
Response
Response
What you can configure
Configuration travels in oneconfig form field, holding either the literal string default or a JSON-encoded object.
A config with every key set
A config with every key set
GET /api/velma-2-batch/list-presets, which returns each preset’s identifier, name, short_description, and detailed_description:
config, an unknown preset identifier, or a definition missing a required field is rejected with 422.
Audio formats
Accepted extensions:.aac, .aiff, .flac, .mov, .mp3, .mp4, .ogg, .opus, .wav, .webm.
Maximum file size is 100 MB. Empty files are rejected with 400.
Velma Triage (streaming)
The same analysis, emitted as typed JSON events while the conversation is still running. Connect, send the config as the first text frame, then stream audio.
Three events have update semantics worth building for:
partial_clipis a transient preview. Multiple partials share oneclip_uuid, and the eventualclipreuses it, so a run of partials correlates with its final clip.clip_updatecan arrive any number of times for a finalized clip, always beforedone. The latest value for each field supersedes the value on theclipevent and on any earlier update.topicsandsummaryfully replace the previous event of that type. Never merge them.topic_sentimentsupersedes an earlier event for the same topic and speaker.
Try it
Python
Events received
Events received
What you can configure
The config object is the same one used by batch, sent as the first text frame instead of a form field. Because it rides on that frame,language and custom_terms in the stt block travel with it and need no separate transport.
Audio formats
Self-describing formats.aac, aiff, flac, mp3, ogg, wav, webm. Auto-detected when audio_format is omitted.
Raw formats. s8, s16le, s16be, s24le, s24be, s32le, s32be, u8, u16le, u16be, u24le, u24be, u32le, u32be, f32le, f32be, f64le, f64be, mulaw, alaw. Headerless, so audio_format, sample_rate, and num_channels are all required.
sample_rate accepts 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000.
Behaviors
- What are behaviors?
- Using behaviors
- Custom behaviors
- Best practices
- Detection packages, ready-made behavior sets for fraud, trust and safety, compliance, and retention