iblai-api-agent-voice
Mirrored from
iblai/vibe·skills/agents/iblai-api-agent-voice/SKILL.md. This page is generated — edit it in the repository, not here.
With a screen:
/iblai-vibe-agent-voice(Voice tab) and/iblai-vibe-agent-screenshare(Screen tab) mount the same data — this skill is their headless twin.
Configure how an agent speaks and listens. Scope: per agent — every field here applies to every user of the agent. Two resources hold it:
- Agent settings (
…/mentors/{mentor}/settings/): the chat voice (voice_provider+openai_voice/google_voice/iblai_voice),voice_instructions,transcription_language,transcription_instructions, and theshow_voice_call/show_voice_recordswitches. - Call configuration (
…/call-configurations/, one row per agent): call style, language, AI provider, call voice, and screen sharing (enable_video+ two prompts).
Endpoints verified against the live schema
(https://api.iblai.app/dm/api/docs/schema/, version 4.411.0) on 2026-10-02.
Auth & conventions
- Base URL:
https://api.iblai.app - Header:
Authorization: Api-Token $IBLAI_API_KEYon every request. - Path vars:
{org}=$IBLAI_ORG,{username}=$IBLAI_USERNAME,{mentor}= the agent's unique id. - Prefix: every path below starts with
https://api.iblai.app/dm/api/ai-mentor/orgs/{org}/users/{username}(written…). - Call configurations are admin-only (organization admins).
- Not connected yet? Run
/iblai-api-loginfirst to populateIBLAI_ORG,IBLAI_USERNAME, andIBLAI_API_KEY.
Reads
- GET
…/mentors/{mentor}/settings/— current voice fields. The response also embeds the agent'scall_configurationobject, nevernull: itsidisnulluntil a POST creates the row, so POST first. Voice fields come back as voice names (e.g."alloy"), not ids. - GET
…/voices/— the voice catalog. Query:provider(browser | openai | google | iblai | elevenlabs),search,page,page_size,ordering. Each voice:{ id, name, provider, language, description, audio_url }(audio_urlis a playable sample). - GET
…/voices/{id}/— one voice. - GET
…/call-configurations/?mentor={mentor}— the agent's call configuration (an array; use the first item). Also filters bymode,search,ordering. - GET
…/call-configurations/{id}/— one call configuration.
Writes
- PUT
…/mentors/{mentor}/settings/— voice fields (multipart/form-data; send only the changed keys, as in/iblai-api-agent-setting):{ "voice_provider": "browser | openai | google | iblai", "openai_voice": "number (voice id from /voices/?provider=openai)", "google_voice": "number (voice id)", "iblai_voice": "number (voice id; cannot be cleared: \"\" is a 400, 0 or an empty value changes nothing)", "voice_instructions": "string (tone, pace, emotion; \"\" clears)", "transcription_language": "string (ISO 639-1, e.g. \"es\"; \"\" = auto-detect)", "transcription_instructions": "string (jargon, names; \"\" clears)", "show_voice_call": "boolean (voice calls on/off)", "show_voice_record": "boolean (dictation microphone on/off)" }voice_providerpicks which*_voicefield applies;browseruses the listener's device and no voice id.voice_instructionsreaches OpenAI as speechinstructionsand Google as a synthesisprompt; other providers ignore it. - POST
…/call-configurations/— create the agent's call configuration (only when the GET returns none):{ "mentor": "uuid (required)", "mode": "realtime | inference", "language": "string (e.g. \"en\", max 10)", "llm_provider": "openai | google | azure_openai | iblai", "tts_provider": "openai | google | elevenlabs | azure_openai", "stt_provider": "openai | google | deepgram | cartesia | azure_openai", "openai_voice_id": "number | null", "google_voice_id": "number | null", "use_function_calling_for_rag": "boolean", "enable_video": "boolean (screen sharing; realtime mode only)", "screensharing_system_prompt": "string", "screensharing_proactive_prompt": "string" } - PATCH
…/call-configurations/{id}/— change any of the fields above (send only the changed keys). - PUT
…/call-configurations/{id}/— replace the row (sendmentortoo).
There is no DELETE for call configurations.
Example
Turn screen sharing on and set the opener for an agent whose call configuration already exists:
API="https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME"
ID=$(curl -s "$API/call-configurations/?mentor=$MENTOR" \
-H "Authorization: Api-Token $IBLAI_API_KEY" | jq '.[0].id')
curl -X PATCH "$API/call-configurations/$ID/" \
-H "Authorization: Api-Token $IBLAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enable_video": true, "screensharing_proactive_prompt": "I can see your screen now. What would you like help with first?"}'
Notes
- Names out, ids in: settings return voice names; writes take voice ids.
Resolve a name with
GET …/voices/?provider= &search=<name>. - Absent = unchanged: leaving a field out of the settings PUT keeps it.
Clear
voice_instructions/transcription_instructionswith"", nevernull. - Screen sharing needs a live call:
enable_videoonly works inrealtimemode, and only whenshow_voice_callis on. - Default screen prompt: a new call configuration starts with the
platform's screen-guidance text in
screensharing_system_prompt. - Pricier OpenAI speech: non-empty
voice_instructionsswitches OpenAI synthesis to an instruction-capable model that costs more.