{"openapi":"3.1.0","info":{"title":"Twilio Voice Insights (BYOK) API","version":"0.1.0","description":"Twilio Voice Insights (BYOK) lets an AI assistant read your own Twilio Voice Insights data through the Twilio Voice Insights API with a key you supply (Account SID or API key SID (use a restricted API key, SID starts with SK, rather than the main Auth Token where possible)). Read-only: 10 tools (get_voice_insights_settings, list_call_summaries, get_call_summary, get_call_annotation,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-twilio-insights.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-twilio-insights/docs"},"termsOfService":"https://connectorbay.com/byok-twilio-insights/terms"},"servers":[{"url":"https://byok-twilio-insights.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-twilio-insights/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_voice_insights_settings":{"post":{"operationId":"get_voice_insights_settings","summary":"Show whether Voice Insights Advanced Features and Voice Trace are enabled for the account. Use for \"Are Voice Insights a","description":"Show whether Voice Insights Advanced Features and Voice Trace are enabled for the account. Use for \"Are Voice Insights advanced features turned on for my Twilio account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_voice_insights_settingsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_call_summaries":{"post":{"operationId":"list_call_summaries","summary":"List Voice Insights call summaries (newest first by default) with call type, final state, answered-by, duration and tags","description":"List Voice Insights call summaries (newest first by default) with call type, final state, answered-by, duration and tags. Caller and callee numbers are not returned. Advanced Features may be required for some fields. Use for \"Which of my Twilio calls failed or went unanswered recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_state":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls in this state, for example completed, busy, fail, noanswer or canceled.","title":"Call State"},"call_type":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only this call type: carrier, sip, trunking, client or whatsapp.","title":"Call Type"},"direction":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only this direction, for example inbound or outbound.","title":"Direction"},"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls started at or after this ISO 8601 time, for example 2026-10-01T00:00:00Z.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls ended at or before this ISO 8601 time.","title":"End Time"},"processing_state":{"anyOf":[{"enum":["completed","started","partial","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Which summaries: complete, started, partial or all.","title":"Processing State"},"sort_by":{"anyOf":[{"enum":["start_time","end_time"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by start_time or end_time.","title":"Sort By"},"abnormal_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only calls flagged as abnormal sessions.","title":"Abnormal Session"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 25).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the PageToken value inside meta.next_page_url from the previous answer (leave empty for the first page).","title":"Page Token"}},"title":"list_call_summariesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_call_summary":{"post":{"operationId":"get_call_summary","summary":"Get the Voice Insights summary of one call: type, final state, answered-by, duration, connect duration and tags. Use for","description":"Get the Voice Insights summary of one call: type, final state, answered-by, duration, connect duration and tags. Use for \"How did Twilio call CA... end and how long did it last\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_sid":{"description":"The SID of the call: 'CA' followed by 32 hex characters.","maxLength":34,"title":"Call Sid","type":"string"},"processing_state":{"anyOf":[{"enum":["complete","partial"],"type":"string"},{"type":"null"}],"default":null,"description":"Summary state to fetch: complete or partial.","title":"Processing State"}},"required":["call_sid"],"title":"get_call_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_call_annotation":{"post":{"operationId":"get_call_annotation","summary":"Get the annotation attached to a call: answered-by, connectivity issue, quality issues, spam flag, call score and commen","description":"Get the annotation attached to a call: answered-by, connectivity issue, quality issues, spam flag, call score and comment. Use for \"Was Twilio call CA... marked as spam or poor quality\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_sid":{"description":"The SID of the call: 'CA' followed by 32 hex characters.","maxLength":34,"title":"Call Sid","type":"string"}},"required":["call_sid"],"title":"get_call_annotationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_call_metrics":{"post":{"operationId":"list_call_metrics","summary":"List the per-edge quality metrics of one call (carrier, SIP, SDK and client edges) as time-stamped samples. Use for \"Wha","description":"List the per-edge quality metrics of one call (carrier, SIP, SDK and client edges) as time-stamped samples. Use for \"What were the jitter and packet loss metrics for Twilio call CA\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_sid":{"description":"The SID of the call: 'CA' followed by 32 hex characters.","maxLength":34,"title":"Call Sid","type":"string"},"edge":{"anyOf":[{"enum":["carrier_edge","sip_edge","sdk_edge","client_edge"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this edge: carrier_edge, sip_edge, sdk_edge or client_edge.","title":"Edge"},"direction":{"anyOf":[{"enum":["inbound","outbound","both"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this direction: inbound, outbound or both.","title":"Direction"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the PageToken value inside meta.next_page_url from the previous answer (leave empty for the first page).","title":"Page Token"}},"required":["call_sid"],"title":"list_call_metricsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conference_summaries":{"post":{"operationId":"list_conference_summaries","summary":"List Voice Insights conference summaries with status, duration, participant counts, end reason, mixer region and detecte","description":"List Voice Insights conference summaries with status, duration, participant counts, end reason, mixer region and detected issues. Use for \"Which Twilio conferences ended abnormally this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"friendly_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only conferences with this friendly name.","title":"Friendly Name"},"status":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only conferences with this status: in_progress, not_started, completed or summary_timeout.","title":"Status"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only conferences created after this ISO 8601 time.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only conferences created before this ISO 8601 time.","title":"Created Before"},"end_reason":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only conferences with this end reason.","title":"End Reason"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the PageToken value inside meta.next_page_url from the previous answer (leave empty for the first page).","title":"Page Token"}},"title":"list_conference_summariesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_conference_summary":{"post":{"operationId":"get_conference_summary","summary":"Get the Voice Insights summary of one conference: duration, participants, end reason, region, detected issues and tags. ","description":"Get the Voice Insights summary of one conference: duration, participants, end reason, region, detected issues and tags. Use for \"How did Twilio conference CF... go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conference_sid":{"description":"The SID of the conference: 'CF' followed by 32 hex characters.","maxLength":34,"title":"Conference Sid","type":"string"}},"required":["conference_sid"],"title":"get_conference_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conference_participant_summaries":{"post":{"operationId":"list_conference_participant_summaries","summary":"List the participant summaries of one conference with label, direction, call status, role, join and leave times, region ","description":"List the participant summaries of one conference with label, direction, call status, role, join and leave times, region and call type. Numbers are not returned. Use for \"Who joined Twilio conference CF... and how long did each participant stay\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"conference_sid":{"description":"The SID of the conference: 'CF' followed by 32 hex characters.","maxLength":34,"title":"Conference Sid","type":"string"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the PageToken value inside meta.next_page_url from the previous answer (leave empty for the first page).","title":"Page Token"}},"required":["conference_sid"],"title":"list_conference_participant_summariesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_video_rooms":{"post":{"operationId":"list_video_rooms","summary":"List Programmable Video rooms with analytics: type, status, duration, participant counts, media region and end reason. U","description":"List Programmable Video rooms with analytics: type, status, duration, participant counts, media region and end reason. Use for \"Which Twilio video rooms had the most participants today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"room_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only rooms with this name.","title":"Room Name"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only rooms created after this ISO 8601 time.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only rooms created before this ISO 8601 time.","title":"Created Before"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the PageToken value inside meta.next_page_url from the previous answer (leave empty for the first page).","title":"Page Token"}},"title":"list_video_roomsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_video_room":{"post":{"operationId":"get_video_room","summary":"Get the analytics of one video room: type, status, duration, participant counts, recording seconds and media region. Use","description":"Get the analytics of one video room: type, status, duration, participant counts, recording seconds and media region. Use for \"How long did Twilio video room RM... last\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"room_sid":{"description":"The SID of the video room: 'RM' followed by 32 hex characters.","maxLength":34,"title":"Room Sid","type":"string"}},"required":["room_sid"],"title":"get_video_roomArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}