{"id":"67ccbc0f-5aa1-4846-8586-2410c3cae416","shortId":"zLgwgd","kind":"skill","title":"telnyx-voice-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice - Python\n\n## Installation\n\n```bash\npip install telnyx\n```\n\n## Setup\n\n```python\nimport os\nfrom telnyx import Telnyx\n\nclient = Telnyx(\n    api_key=os.environ.get(\"TELNYX_API_KEY\"),  # This is the default and can be omitted\n)\n```\n\nAll examples below assume `client` is already initialized as shown above.\n\n## Error Handling\n\nAll API calls can fail with network errors, rate limits (429), validation errors (422),\nor authentication errors (401). Always handle errors in production code:\n\n```python\nimport telnyx\n\ntry:\n    response = client.calls.dial(\n        connection_id=\"7267xxxxxxxxxxxxxx\",\n        from_=\"+18005550101\",\n        to=\"+18005550100\",\n    )\nexcept telnyx.APIConnectionError:\n    print(\"Network error — check connectivity and retry\")\nexcept telnyx.RateLimitError:\n    import time\n    time.sleep(1)  # Check Retry-After header for actual delay\nexcept telnyx.APIStatusError as e:\n    print(f\"API error {e.status_code}: {e.message}\")\n    if e.status_code == 422:\n        print(\"Validation error — check required fields and formats\")\n```\n\nCommon error codes: `401` invalid API key, `403` insufficient permissions,\n`404` resource not found, `422` validation error (check field formats),\n`429` rate limited (retry with exponential backoff).\n\n## Important Notes\n\n- **Phone numbers** must be in E.164 format (e.g., `+13125550001`). Include the `+` prefix and country code. No spaces, dashes, or parentheses.\n- **Pagination:** List methods return an auto-paginating iterator. Use `for item in page_result:` to iterate through all pages automatically.\n\n## Operational Caveats\n\n- Call Control is event-driven. After `dial()` or an inbound webhook, issue follow-up commands from webhook handlers using the `call_control_id` in the event payload.\n- Outbound and inbound flows are different: outbound calls start with `dial()`, while inbound calls must be answered from the incoming webhook before other commands run.\n- A publicly reachable webhook endpoint is required for real call control. Without it, calls may connect but your application cannot drive the live call state.\n\n## Reference Use Rules\n\nDo not invent Telnyx parameters, enums, response fields, or webhook fields.\n\n- If the parameter, enum, or response field you need is not shown inline in this skill, read [references/api-details.md](references/api-details.md) before writing code.\n- Before using any operation in `## Additional Operations`, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas).\n- Before reading or matching webhook fields beyond the inline examples, read [the webhook payload reference](references/api-details.md#webhook-payload-fields).\n\n## Core Tasks\n\n### Dial an outbound call\n\nPrimary voice entrypoint. Agents need the async call-control identifiers returned here.\n\n`client.calls.dial()` — `POST /calls`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | The DID or SIP URI to dial out to. |\n| `from_` | string (E.164) | Yes | The `from` number to be used as the caller id presented to t... |\n| `connection_id` | string (UUID) | Yes | The ID of the Call Control App (formerly ID of the connectio... |\n| `timeout_secs` | integer | No | The number of seconds that Telnyx will wait for the call to ... |\n| `billing_group_id` | string (UUID) | No | Use this field to set the Billing Group ID for the call. |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| ... | | | +48 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nresponse = client.calls.dial(\n    connection_id=\"7267xxxxxxxxxxxxxx\",\n    from_=\"+18005550101\",\n    to=\"+18005550100\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.call_control_id`\n- `response.data.call_leg_id`\n- `response.data.call_session_id`\n- `response.data.is_alive`\n- `response.data.recording_id`\n- `response.data.call_duration`\n\n### Answer an inbound call\n\nPrimary inbound call-control command.\n\n`client.calls.actions.answer()` — `POST /calls/{call_control_id}/actions/answer`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `billing_group_id` | string (UUID) | No | Use this field to set the Billing Group ID for the call. |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| `webhook_url` | string (URL) | No | Use this field to override the URL for which Telnyx will sen... |\n| ... | | | +26 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nresponse = client.calls.actions.answer(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.result`\n- `response.data.recording_id`\n\n### Transfer a live call\n\nCommon post-answer control path with downstream webhook implications.\n\n`client.calls.actions.transfer()` — `POST /calls/{call_control_id}/actions/transfer`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | The DID or SIP URI to dial out to. |\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `timeout_secs` | integer | No | The number of seconds that Telnyx will wait for the call to ... |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| `webhook_url` | string (URL) | No | Use this field to override the URL for which Telnyx will sen... |\n| ... | | | +33 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nresponse = client.calls.actions.transfer(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    to=\"+18005550100\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.result`\n\n---\n\n### Webhook Verification\n\nTelnyx signs webhooks with Ed25519. Each request includes `telnyx-signature-ed25519`\nand `telnyx-timestamp` headers. Always verify signatures in production:\n\n```python\n# In your webhook handler (e.g., Flask — use raw body, not parsed JSON):\n@app.route(\"/webhooks\", methods=[\"POST\"])\ndef handle_webhook():\n    payload = request.get_data(as_text=True)  # raw body as string\n    headers = dict(request.headers)\n    try:\n        event = client.webhooks.unwrap(payload, headers=headers)\n    except Exception as e:\n        print(f\"Webhook verification failed: {e}\")\n        return \"Invalid signature\", 400\n    # Signature valid — event is the parsed webhook payload\n    print(f\"Received event: {event.data.event_type}\")\n    return \"OK\", 200\n```\n\n## Webhooks\n\nThese webhook payload fields are inline because they are part of the primary integration path.\n\n### Call Answered\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.answered | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook ev... |\n\n### Call Hangup\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.hangup | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook ev... |\n\n### Call Initiated\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.initiated | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.connection_codecs` | string | The list of comma-separated codecs enabled for the connection. |\n| `data.payload.offered_codecs` | string | The list of comma-separated codecs offered by caller. |\n\nIf you need webhook fields that are not listed inline here, read [the webhook payload reference](references/api-details.md#webhook-payload-fields) before writing the handler.\n\n---\n\n## Important Supporting Operations\n\nUse these when the core tasks above are close to your flow, but you need a common variation or follow-up step.\n\n### Hangup call\n\nEnd a live call from your webhook-driven control flow.\n\n`client.calls.actions.hangup()` — `POST /calls/{call_control_id}/actions/hangup`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| `command_id` | string (UUID) | No | Use this field to avoid duplicate commands. |\n| `custom_headers` | array[object] | No | Custom headers to be added to the SIP BYE message. |\n\n```python\nresponse = client.calls.actions.hangup(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Bridge calls\n\nTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.\n\n`client.calls.actions.bridge()` — `POST /calls/{call_control_id}/actions/bridge`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `call_control_id` | string (UUID) | Yes | The Call Control ID of the call you want to bridge with, can... |\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| `command_id` | string (UUID) | No | Use this field to avoid duplicate commands. |\n| `video_room_id` | string (UUID) | No | The ID of the video room you want to bridge with, can't be u... |\n| ... | | | +16 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nresponse = client.calls.actions.bridge(\n    call_control_id_to_bridge=\"call_control_id\",\n    call_control_id_to_bridge_with=\"v3:MdI91X4lWFEs7IgbBEOT9M4AigoY08M0WWZFISt1Yw2axZ_IiE4pqg\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Reject a call\n\nTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.\n\n`client.calls.actions.reject()` — `POST /calls/{call_control_id}/actions/reject`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `cause` | enum (CALL_REJECTED, USER_BUSY) | Yes | Cause for call rejection. |\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `client_state` | string | No | Use this field to add state to every subsequent webhook. |\n| `command_id` | string (UUID) | No | Use this field to avoid duplicate commands. |\n\n```python\nresponse = client.calls.actions.reject(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    cause=\"USER_BUSY\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Retrieve a call status\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.calls.retrieve_status()` — `GET /calls/{call_control_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `call_control_id` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n\n```python\nresponse = client.calls.retrieve_status(\n    \"call_control_id\",\n)\nprint(response.data)\n```\n\nPrimary response fields:\n- `response.data.call_control_id`\n- `response.data.call_duration`\n- `response.data.call_leg_id`\n- `response.data.call_session_id`\n- `response.data.client_state`\n- `response.data.end_time`\n\n### List all active calls for given connection\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.connections.list_active_calls()` — `GET /connections/{connection_id}/active_calls`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `connection_id` | string (UUID) | Yes | Telnyx connection id |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```python\npage = client.connections.list_active_calls(\n    connection_id=\"1293384261075731461\",\n)\npage = page.data[0]\nprint(page.call_control_id)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `call_control_id`\n- `call_duration`\n- `call_leg_id`\n- `call_session_id`\n- `client_state`\n- `record_type`\n\n### List call control applications\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.call_control_applications.list()` — `GET /call_control_applications`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `sort` | enum (created_at, connection_name, active) | No | Specifies the sort order for results. |\n| `filter` | object | No | Consolidated filter parameter (deepObject style). |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```python\npage = client.call_control_applications.list()\npage = page.data[0]\nprint(page.id)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `id`\n- `created_at`\n- `updated_at`\n- `active`\n- `anchorsite_override`\n- `application_name`\n\n---\n\n## Additional Operations\n\nUse the core tasks above first. The operations below are indexed here with exact SDK methods and required params; use [references/api-details.md](references/api-details.md) for full optional params, response schemas, and lower-frequency webhook payloads.\nBefore using any operation below, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas) so you do not guess missing fields.\n\n| Operation | SDK method | Endpoint | Use when | Required params |\n|-----------|------------|----------|----------|-----------------|\n| Create a call control application | `client.call_control_applications.create()` | `POST /call_control_applications` | Create or provision an additional resource when the core tasks do not cover this flow. | `application_name`, `webhook_event_url` |\n| Retrieve a call control application | `client.call_control_applications.retrieve()` | `GET /call_control_applications/{id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Update a call control application | `client.call_control_applications.update()` | `PATCH /call_control_applications/{id}` | Modify an existing resource without recreating it. | `application_name`, `webhook_event_url`, `id` |\n| Delete a call control application | `client.call_control_applications.delete()` | `DELETE /call_control_applications/{id}` | Remove, detach, or clean up an existing resource. | `id` |\n| SIP Refer a call | `client.calls.actions.refer()` | `POST /calls/{call_control_id}/actions/refer` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `sip_address`, `call_control_id` |\n| Send SIP info | `client.calls.actions.send_sip_info()` | `POST /calls/{call_control_id}/actions/send_sip_info` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `content_type`, `body`, `call_control_id` |\n\n### Other Webhook Events\n\n| Event | `data.event_type` | Description |\n|-------|-------------------|-------------|\n| `callBridged` | `call.bridged` | Call Bridged |\n\n---\n\nFor exhaustive optional parameters, full response schemas, and complete webhook payloads, see [references/api-details.md](references/api-details.md).","tags":["telnyx","voice","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-python","topic-agent-skills","topic-ai-coding-agent","topic-claude-code","topic-cpaas","topic-cursor","topic-iot","topic-llm","topic-sdk","topic-sip","topic-sms","topic-speech-to-text","topic-telephony"],"categories":["ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/team-telnyx/ai/telnyx-voice-python","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add team-telnyx/ai","source_repo":"https://github.com/team-telnyx/ai","install_from":"skills.sh"}},"qualityScore":"0.533","qualityRationale":"deterministic score 0.53 from registry signals: · indexed on github topic:agent-skills · 167 github stars · SKILL.md body (17,279 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:53.977Z","embedding":null,"createdAt":"2026-04-18T22:08:36.080Z","updatedAt":"2026-04-22T00:54:53.977Z","lastSeenAt":"2026-04-22T00:54:53.977Z","tsv":"'+13125550001':170 '+16':1456 '+18005550100':86,503,752 '+18005550101':84,501 '+26':608 '+33':733 '+48':488 '/actions/answer':540 '/actions/bridge':1371 '/actions/hangup':1266 '/actions/refer':2005 '/actions/reject':1516 '/actions/send_sip_info':2041 '/actions/transfer':654 '/active_calls':1689 '/call_control_applications':1766,1911,1939,1962,1984 '/calls':388,536,650,1262,1367,1512,1613,2001,2037 '/connections':1686 '/webhooks':797 '0':1720,1806 '1':101 '1293384261075731461':1717 '200':852 '400':835 '401':67,136 '403':140 '404':143 '41d4':623,748,1335,1581 '422':63,124,147 '429':60,153 '446655440000':625,750,1337,1583 '550e8400':620,745,1332,1578 '7267xxxxxxxxxxxxxx':82,499 '8601':907,1020,1133 'a716':624,749,1336,1582 'action':1351,1496,2011,2047 'activ':1664,1683,1713,1777,1823 'actual':108 'ad':1320 'add':482,585,710,1293,1417,1554 'addit':325,1828,1916 'address':2026 'agent':376 'aliv':519 'alreadi':43 'alway':68,778 'anchorsit':1824 'answer':250,524,641,870 'api':23,27,51,116,138,927,1040,1153 'app':434,933,1046,1159 'app.route':796 'applic':277,1752,1826,1908,1927,1936,1959,1971,1981 'array':1313 'assum':40 'async':379 'authent':65 'auto':188 'auto-pagin':187 'automat':202 'avail':1754 'avoid':1308,1432,1569 'backoff':159 'bash':9 'beyond':353 'bill':456,468,559,571 'bodi':792,810,2063 'bridg':1344,1392,1450,1469,1477,2077 'busi':1526,1586 'bye':1324 'call':52,205,227,241,247,268,272,282,372,381,432,454,473,527,531,537,545,558,576,617,637,651,672,685,700,742,869,918,925,931,942,953,972,982,1031,1038,1044,1055,1066,1085,1095,1144,1151,1157,1168,1248,1252,1263,1271,1284,1329,1345,1368,1376,1383,1388,1395,1408,1465,1470,1473,1490,1513,1523,1530,1532,1545,1575,1595,1614,1621,1634,1639,1665,1684,1714,1734,1737,1739,1742,1750,1906,1934,1957,1979,1998,2002,2027,2038,2064,2076 'call-control':380,530 'call.answered':887 'call.bridged':2075 'call.hangup':1000 'call.initiated':1113 'callbridg':2074 'caller':418,1195 'cannot':278 'caus':1521,1528,1584 'caveat':204 'check':92,102,128,150 'choos':1757 'clean':1989 'client':21,41,474,577,702,1285,1409,1546,1745 'client.call_control_applications.create':1909 'client.call_control_applications.delete':1982 'client.call_control_applications.list':1764,1803 'client.call_control_applications.retrieve':1937 'client.call_control_applications.update':1960 'client.calls.actions.answer':534,616 'client.calls.actions.bridge':1365,1464 'client.calls.actions.hangup':1260,1328 'client.calls.actions.refer':1999 'client.calls.actions.reject':1510,1574 'client.calls.actions.send':2033 'client.calls.actions.transfer':648,741 'client.calls.dial':79,386,496 'client.calls.retrieve':1610,1637 'client.connections.list':1682,1712 'client.webhooks.unwrap':818 'close':1232 'code':73,119,123,135,176,319 'codec':1170,1178,1184,1192 'comma':1176,1190 'comma-separ':1175,1189 'command':221,257,533,923,1036,1149,1299,1310,1423,1434,1560,1571 'common':133,638,1240 'complet':2086 'connect':80,93,274,423,497,937,1050,1163,1182,1668,1687,1694,1700,1715,1775 'connectio':439 'consolid':1705,1788,1796 'content':2061 'control':206,228,269,382,433,510,532,538,546,556,618,642,652,673,683,743,915,926,932,1028,1039,1045,1141,1152,1158,1258,1264,1272,1282,1330,1369,1377,1384,1396,1406,1466,1471,1474,1514,1533,1543,1576,1607,1615,1622,1632,1640,1648,1679,1723,1735,1751,1907,1935,1951,1958,1980,2003,2028,2039,2065 'control-flow':1606,1678,1950 'core':367,1228,1832,1920 'correl':959,979,1072,1092 'countri':175 'cover':1924 'creat':1358,1503,1773,1819,1904,1912,2018,2054 'current':1599,1671,1943 'custom':1311,1316 'dash':179 'data':805 'data.event':884,997,1110,2071 'data.id':894,1007,1120 'data.occurred':901,1014,1127 'data.payload.call':914,943,962,1027,1056,1075,1140 'data.payload.connection':928,1041,1154,1169 'data.payload.offered':1183 'data.record':874,987,1100 'date':904,1017,1130 'date-tim':903,1016,1129 'datetim':908,1021,1134 'decis':1609,1681,1953 'deepobject':1708,1791,1799 'def':800 'default':32 'delay':109 'delet':1603,1675,1947,1977,1983 'deliv':893,1006,1119 'descript':392,544,658,873,986,1099,1270,1375,1520,1620,1693,1770,2073 'detach':1987 'dial':212,244,369,403,669 'dict':814 'differ':239 'downstream':645 'drive':279 'driven':210,1257 'duplic':1309,1433,1570 'durat':523,1651,1738 'e':113,825,831 'e.164':167,395,408,661 'e.g':169,788 'e.message':120 'e.status':118,122 'e29b':622,747,1334,1580 'e29b-41d4-a716':621,746,1333,1579 'ed25519':765,772 'enabl':1179 'end':1249 'endpoint':263,1899 'entrypoint':375 'enum':292,301,876,886,989,999,1102,1112,1522,1772 'error':48,57,62,66,70,91,117,127,134,149 'ev':981,1094 'event':209,232,817,838,847,877,891,912,961,990,1004,1025,1074,1103,1117,1138,1930,1974,2069,2070 'event-driven':208 'event.data.event':848 'everi':485,588,713,1296,1420,1557 'exact':1843 'exampl':38,356 'except':87,96,110,822,823 'exhaust':2079 'exist':1354,1499,1759,1966,1992,2014,2050 'exponenti':158 'f':115,827,845 'fail':54,830 'fetch':1597,1669,1941 'field':130,151,294,297,304,352,366,464,480,508,567,583,598,630,708,723,757,857,871,984,1097,1200,1216,1291,1306,1342,1415,1430,1486,1552,1567,1591,1646,1733,1817,1895 'filter':1785,1789 'first':1835 'flask':789 'flow':237,1235,1259,1608,1680,1926,1952 'follow':219,1244,1349,1494,2009,2045 'follow-up':218,1243,1348,1493,2008,2044 'format':132,152,168 'former':435,935,1048,1161 'found':146 'frequenc':1861 'full':1853,2082 'get':1612,1685,1765,1938 'given':1667 'group':457,469,560,572 'guess':1893 'handl':49,69,801 'handler':224,787,1220 'hangup':983,1247 'header':106,777,813,820,821,1312,1317 'id':81,229,419,424,429,436,458,470,498,511,514,517,521,539,547,561,573,619,633,653,674,744,916,919,929,934,938,945,947,964,966,1029,1032,1042,1047,1051,1058,1060,1077,1079,1142,1145,1155,1160,1164,1265,1273,1300,1331,1370,1378,1385,1397,1424,1437,1442,1467,1472,1475,1515,1534,1561,1577,1616,1623,1641,1649,1654,1657,1688,1695,1701,1716,1724,1736,1741,1744,1818,1940,1954,1963,1976,1985,1994,2004,2029,2040,2066 'identifi':383,552,679,878,896,991,1009,1104,1122,1278,1402,1539,1628 'iie4pqg':1481 'implic':647 'import':15,19,75,98,160,1221 'inbound':215,236,246,526,529 'includ':171,768 'incom':253 'index':1840 'info':2032,2035 'initi':44,1096 'inlin':310,355,859,1205 'inspect':1753 'instal':8,11 'insuffici':141 'integ':442,688 'integr':867 'invalid':137,833 'invent':289 'iso':906,1019,1132 'issu':217,922,1035,1148 'item':193,1727,1732,1811,1816 'iter':190,198 'json':795 'key':24,28,139 'leg':513,944,1057,1653,1740 'level':1363,1508,2023,2059 'limit':59,155 'list':183,1173,1187,1204,1662,1749 'live':281,636,1251 'lower':1860 'lower-frequ':1859 'make':1605,1677,1949 'match':350 'may':273 'mdi91x4lwfes7igbbeot9m4aigoy08m0wwzfist1yw2axz':1480 'messag':1325 'method':184,798,1845,1898 'miss':1894 'modifi':1964 'must':164,248 'mutat':1762 'name':1776,1827,1928,1972 'need':306,377,1198,1238 'network':56,90 'new':1360,1505,2020,2056 'note':161 'number':163,412,445,691 'object':1314,1703,1786,1794 'occur':913,1026,1139 'offer':1193 'ok':851 'omit':36 'oper':203,323,326,1223,1829,1837,1867,1896 'option':330,335,489,609,734,1457,1854,1872,1877,2080 'optional-paramet':329,334,1871,1876 'order':1782 'os':16 'os.environ.get':25 'outbound':234,240,371 'overrid':600,725,1825 'page':195,201,1702,1706,1711,1718,1793,1797,1802,1804 'page.call':1722 'page.data':1719,1728,1805,1812 'page.id':1808 'page.meta':1730,1814 'pagin':182,189,1729,1813 'param':490,610,735,1458,1848,1855,1903 'paramet':291,300,331,336,389,541,655,1267,1372,1517,1617,1690,1707,1767,1790,1798,1873,1878,2081 'parenthes':181 'pars':794,841 'part':863 'patch':1961 'path':643,868 'payload':233,360,365,803,819,843,856,1210,1215,1863,2088 'permiss':142 'phone':162 'pip':10 'post':387,535,640,649,799,1261,1366,1511,1910,2000,2036 'post-answ':639 'prefix':173 'present':420 'primari':373,506,528,628,755,866,1340,1484,1589,1644,1731,1815 'print':89,114,125,504,626,753,826,844,1338,1482,1587,1642,1721,1807 'product':72,782 'provis':1914 'public':260 'python':4,7,14,74,494,614,739,783,1326,1462,1572,1635,1710,1801 'rate':58,154 'rather':1356,1501,2016,2052 'raw':791,809 'reachabl':261 'read':314,327,348,357,1207,1869 'real':267 'receiv':846 'record':1747 'recreat':1969 'refer':284,361,1211,1996 'references/api-details.md':315,316,333,343,362,492,493,612,613,737,738,1212,1460,1461,1850,1851,1875,1885,2090,2091 'reject':1488,1524,1531 'remov':1986 'request':767 'request.get':804 'request.headers':815 'requir':129,265,391,543,657,1269,1374,1519,1619,1692,1769,1847,1902 'resourc':144,883,900,996,1013,1109,1126,1364,1509,1755,1760,1917,1967,1993,2024,2060 'respons':78,293,303,340,345,495,507,615,629,740,756,1327,1341,1463,1485,1573,1590,1636,1645,1725,1809,1856,1882,1887,2083 'response-schema':339,344,1881,1886 'response.data':505,627,754,1339,1483,1588,1643 'response.data.call':509,512,515,522,1647,1650,1652,1655 'response.data.client':1658 'response.data.end':1660 'response.data.is':518 'response.data.recording':520,632 'response.data.result':631,758,1343,1487,1592 'result':196,1784 'retri':95,104,156 'retriev':1593,1932 'retry-aft':103 'return':185,384,832,850 'room':1436,1446 'rule':286 'run':258 'schema':341,346,1857,1883,1888,2084 'sdk':1844,1897 'sec':441,687 'second':447,693 'section':332,342,1874,1884 'see':2089 'sen':607,732 'send':2030 'separ':1177,1191 'session':516,963,973,1076,1086,1656,1743 'set':466,569 'setup':13 'shown':46,309 'sign':762 'signatur':771,780,834,836 'sip':400,666,1323,1995,2025,2031,2034 'skill':313 'skill-telnyx-voice-python' 'sort':1771,1781 'source-team-telnyx' 'space':178 'specifi':1779 'start':242 'state':283,475,483,578,586,703,711,1286,1294,1410,1418,1547,1555,1600,1659,1672,1746,1944 'status':1596,1611,1638 'step':1246 'string':394,407,425,459,476,548,562,579,593,660,675,704,718,812,917,930,946,965,1030,1043,1059,1078,1143,1156,1171,1185,1274,1287,1301,1379,1398,1411,1425,1438,1535,1548,1562,1624,1696 'style':1709,1792,1800 'subsequ':486,589,714,1297,1421,1558 'support':1222 'task':368,1229,1833,1921 'telnyx':2,5,12,18,20,22,26,76,290,449,605,695,730,761,770,775,936,1049,1162,1699 'telnyx-signature-ed25519':769 'telnyx-timestamp':774 'telnyx-voice-python':1 'telnyx.apiconnectionerror':88 'telnyx.apistatuserror':111 'telnyx.ratelimiterror':97 'text':807 'time':99,905,1018,1131,1661 'time.sleep':100 'timeout':440,686 'timestamp':776 'token':554,681,1280,1404,1541,1630 'top':1362,1507,2022,2058 'top-level':1361,1506,2021,2057 'topic-agent-skills' 'topic-ai-coding-agent' 'topic-claude-code' 'topic-cpaas' 'topic-cursor' 'topic-iot' 'topic-llm' 'topic-sdk' 'topic-sip' 'topic-sms' 'topic-speech-to-text' 'topic-telephony' 'transfer':634 'tri':77,816 'trigger':1346,1491,2006,2042 'true':808 'type':390,542,656,849,872,875,880,885,889,898,985,988,993,998,1002,1011,1098,1101,1106,1111,1115,1124,1268,1373,1518,1618,1691,1748,1768,2062,2072 'u':1455 'uniqu':551,678,950,969,1063,1082,1277,1401,1538,1627 'updat':1602,1674,1821,1946,1955 'uri':401,667 'url':592,594,602,717,719,727,1931,1975 'use':191,225,285,321,415,462,478,565,581,596,706,721,790,920,939,957,977,1033,1052,1070,1090,1146,1165,1224,1289,1304,1413,1428,1550,1565,1830,1849,1865,1900 'user':1525,1585 'uuid':426,460,549,563,676,895,1008,1121,1275,1302,1380,1399,1426,1439,1536,1563,1625,1697 'v3':1479 'valid':61,126,148,837 'variat':1241 'verif':760,829 'verifi':779 'via':924,1037,1150 'video':1435,1445 'voic':3,6,374 'wait':451,697 'want':1390,1448 'webhook':216,223,254,262,296,351,359,364,487,590,591,646,715,716,759,763,786,802,828,842,853,855,960,980,1073,1093,1199,1209,1214,1256,1298,1422,1559,1862,1929,1973,2068,2087 'webhook-driven':1255 'webhook-payload-field':363,1213 'without':270,1968 'workflow':1355,1500,2015,2051 'wrapper':1726,1810 'write':318,1218 'yes':396,409,427,550,662,677,1276,1381,1400,1527,1537,1626,1698","prices":[{"id":"f96ef060-6b51-48e7-bdba-6f169b50f652","listingId":"67ccbc0f-5aa1-4846-8586-2410c3cae416","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"team-telnyx","category":"ai","install_from":"skills.sh"},"createdAt":"2026-04-18T22:08:36.080Z"}],"sources":[{"listingId":"67ccbc0f-5aa1-4846-8586-2410c3cae416","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:36.080Z","lastSeenAt":"2026-04-22T00:54:53.977Z"}],"details":{"listingId":"67ccbc0f-5aa1-4846-8586-2410c3cae416","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-python","github":{"repo":"team-telnyx/ai","stars":167,"topics":["agent-skills","ai","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk","sip","sms","speech-to-text","telephony","telnyx","tts","twilio-migration","voice-agents","voice-ai","webrtc","windsurf"],"license":"mit","html_url":"https://github.com/team-telnyx/ai","pushed_at":"2026-04-21T22:09:49Z","description":"Official one-stop shop for AI Agents and developers building with Telnyx.","skill_md_sha":"3c02ff838eb373f2fffd855b18a93a5fbd6ee406","skill_md_path":"skills/telnyx-voice-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-python"},"updatedAt":"2026-04-22T00:54:53.977Z"}}