{"id":"f5a19f70-3804-4d80-b9ce-46efe5880083","shortId":"baEVDM","kind":"skill","title":"telnyx-ai-assistants-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx AI Assistants - 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    assistant = client.ai.assistants.create(\n        instructions=\"You are a helpful assistant.\",\n        model=\"openai/gpt-4o\",\n        name=\"my-resource\",\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- **Model availability** varies by account. If a model returns 422 \"not available for inference\", use `client.ai.assistants.list()` to discover working models. Commonly available: `openai/gpt-4o`, `Qwen/Qwen3-235B-A22B`.\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\n## Core Tasks\n\n### Create an assistant\n\nAssistant creation is the entrypoint for any AI assistant integration. Agents need the exact creation method and the top-level fields returned by the SDK.\n\n`client.ai.assistants.create()` — `POST /ai/assistants`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes |  |\n| `model` | string | Yes | ID of the model to use. |\n| `instructions` | string | Yes | System instructions for the assistant. |\n| `tools` | array[object] | No | The tools that the assistant can use. |\n| `tool_ids` | array[string] | No |  |\n| `description` | string | No |  |\n| ... | | | +12 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nassistant = client.ai.assistants.create(\n    instructions=\"You are a helpful assistant.\",\n    model=\"openai/gpt-4o\",\n    name=\"my-resource\",\n)\nprint(assistant.id)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.model`\n- `assistant.instructions`\n- `assistant.created_at`\n- `assistant.description`\n\n### Chat with an assistant\n\nChat is the primary runtime path. Agents need the exact assistant method and the response content field.\n\n`client.ai.assistants.chat()` — `POST /ai/assistants/{assistant_id}/chat`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `content` | string | Yes | The message content sent by the client to the assistant |\n| `conversation_id` | string (UUID) | Yes | A unique identifier for the conversation thread, used to mai... |\n| `assistant_id` | string (UUID) | Yes |  |\n| `name` | string | No | The optional display name of the user sending the message |\n\n```python\nresponse = client.ai.assistants.chat(\n    assistant_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    content=\"Tell me a joke about cats\",\n    conversation_id=\"42b20469-1215-4a9a-8964-c36f66b406f4\",\n)\nprint(response.content)\n```\n\nPrimary response fields:\n- `response.content`\n\n### Create an assistant test\n\nTest creation is the main validation path for production assistant behavior before deployment.\n\n`client.ai.assistants.tests.create()` — `POST /ai/assistants/tests`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | A descriptive name for the assistant test. |\n| `destination` | string | Yes | The target destination for the test conversation. |\n| `instructions` | string | Yes | Detailed instructions that define the test scenario and what... |\n| `rubric` | array[object] | Yes | Evaluation criteria used to assess the assistant's performan... |\n| `description` | string | No | Optional detailed description of what this test evaluates an... |\n| `telnyx_conversation_channel` | object | No | The communication channel through which the test will be con... |\n| `max_duration_seconds` | integer | No | Maximum duration in seconds that the test conversation shoul... |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nassistant_test = client.ai.assistants.tests.create(\n    destination=\"+15551234567\",\n    instructions=\"Act as a frustrated customer who received a damaged product. Ask for a refund and escalate if not satisfied with the initial response.\",\n    name=\"Customer Support Bot Test\",\n    rubric=[{\n        \"criteria\": \"Assistant responds within 30 seconds\",\n        \"name\": \"Response Time\",\n    }, {\n        \"criteria\": \"Provides correct product information\",\n        \"name\": \"Accuracy\",\n    }],\n)\nprint(assistant_test.test_id)\n```\n\nPrimary response fields:\n- `assistant_test.test_id`\n- `assistant_test.name`\n- `assistant_test.destination`\n- `assistant_test.created_at`\n- `assistant_test.instructions`\n- `assistant_test.description`\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### Get an assistant\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.ai.assistants.retrieve()` — `GET /ai/assistants/{assistant_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `assistant_id` | string (UUID) | Yes |  |\n| `call_control_id` | string (UUID) | No |  |\n| `fetch_dynamic_variables_from_webhook` | boolean | No |  |\n| `from_` | string (E.164) | No |  |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nassistant = client.ai.assistants.retrieve(\n    assistant_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(assistant.id)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.created_at`\n- `assistant.description`\n- `assistant.dynamic_variables`\n- `assistant.dynamic_variables_webhook_url`\n\n### Update an assistant\n\nCreate or provision an additional resource when the core tasks do not cover this flow.\n\n`client.ai.assistants.update()` — `POST /ai/assistants/{assistant_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `assistant_id` | string (UUID) | Yes |  |\n| `name` | string | No |  |\n| `model` | string | No | ID of the model to use. |\n| `instructions` | string | No | System instructions for the assistant. |\n| ... | | | +16 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\nassistant = client.ai.assistants.update(\n    assistant_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(assistant.id)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.created_at`\n- `assistant.description`\n- `assistant.dynamic_variables`\n- `assistant.dynamic_variables_webhook_url`\n\n### List assistants\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.list()` — `GET /ai/assistants`\n\n```python\nassistants_list = client.ai.assistants.list()\nprint(assistants_list.data)\n```\n\nResponse wrapper:\n- items: `assistants_list.data`\n\nPrimary item fields:\n- `id`\n- `name`\n- `created_at`\n- `description`\n- `dynamic_variables`\n- `dynamic_variables_webhook_url`\n\n### Import assistants from external provider\n\nImport existing assistants from an external provider instead of creating from scratch.\n\n`client.ai.assistants.imports()` — `POST /ai/assistants/import`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `provider` | enum (elevenlabs, vapi, retell) | Yes | The external provider to import assistants from. |\n| `api_key_ref` | string | Yes | Integration secret pointer that refers to the API key for th... |\n| `import_ids` | array[string] | No | Optional list of assistant IDs to import from the external p... |\n\n```python\nassistants_list = client.ai.assistants.imports(\n    api_key_ref=\"my-openai-key\",\n    provider=\"elevenlabs\",\n)\nprint(assistants_list.data)\n```\n\nResponse wrapper:\n- items: `assistants_list.data`\n\nPrimary item fields:\n- `id`\n- `name`\n- `created_at`\n- `description`\n- `dynamic_variables`\n- `dynamic_variables_webhook_url`\n\n### Get All Tags\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tags.list()` — `GET /ai/assistants/tags`\n\n```python\ntags = client.ai.assistants.tags.list()\nprint(tags.tags)\n```\n\nPrimary response fields:\n- `tags.tags`\n\n### List assistant tests with pagination\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tests.list()` — `GET /ai/assistants/tests`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `test_suite` | string | No | Filter tests by test suite name |\n| `telnyx_conversation_channel` | string | No | Filter tests by communication channel (e.g., 'web_chat', 'sm... |\n| `destination` | string | No | Filter tests by destination (phone number, webhook URL, etc.... |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```python\npage = client.ai.assistants.tests.list()\npage = page.data[0]\nprint(page.test_id)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `name`\n- `created_at`\n- `description`\n- `destination`\n- `instructions`\n- `max_duration_seconds`\n\n### Get all test suite names\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tests.test_suites.list()` — `GET /ai/assistants/tests/test-suites`\n\n```python\ntest_suites = client.ai.assistants.tests.test_suites.list()\nprint(test_suites.data)\n```\n\nResponse wrapper:\n- items: `test_suites.data`\n\nPrimary item fields:\n- `data`\n\n### Get test suite run history\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.ai.assistants.tests.test_suites.runs.list()` — `GET /ai/assistants/tests/test-suites/{suite_name}/runs`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `suite_name` | string | Yes |  |\n| `test_suite_run_id` | string (UUID) | No | Filter runs by specific suite execution batch ID |\n| `status` | string | No | Filter runs by execution status (pending, running, completed... |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```python\npage = client.ai.assistants.tests.test_suites.runs.list(\n    suite_name=\"my-test-suite\",\n)\npage = page.data[0]\nprint(page.run_id)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `status`\n- `created_at`\n- `updated_at`\n- `completed_at`\n- `conversation_id`\n- `conversation_insights_id`\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| Trigger test suite execution | `client.ai.assistants.tests.test_suites.runs.trigger()` | `POST /ai/assistants/tests/test-suites/{suite_name}/runs` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `suite_name` |\n| Get assistant test by ID | `client.ai.assistants.tests.retrieve()` | `GET /ai/assistants/tests/{test_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id` |\n| Update an assistant test | `client.ai.assistants.tests.update()` | `PUT /ai/assistants/tests/{test_id}` | Modify an existing resource without recreating it. | `test_id` |\n| Delete an assistant test | `client.ai.assistants.tests.delete()` | `DELETE /ai/assistants/tests/{test_id}` | Remove, detach, or clean up an existing resource. | `test_id` |\n| Get test run history for a specific test | `client.ai.assistants.tests.runs.list()` | `GET /ai/assistants/tests/{test_id}/runs` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id` |\n| Trigger a manual test run | `client.ai.assistants.tests.runs.trigger()` | `POST /ai/assistants/tests/{test_id}/runs` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `test_id` |\n| Get specific test run details | `client.ai.assistants.tests.runs.retrieve()` | `GET /ai/assistants/tests/{test_id}/runs/{run_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id`, `run_id` |\n| Delete an assistant | `client.ai.assistants.delete()` | `DELETE /ai/assistants/{assistant_id}` | Remove, detach, or clean up an existing resource. | `assistant_id` |\n| Get Canary Deploy | `client.ai.assistants.canary_deploys.retrieve()` | `GET /ai/assistants/{assistant_id}/canary-deploys` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Create Canary Deploy | `client.ai.assistants.canary_deploys.create()` | `POST /ai/assistants/{assistant_id}/canary-deploys` | Create or provision an additional resource when the core tasks do not cover this flow. | `versions`, `assistant_id` |\n| Update Canary Deploy | `client.ai.assistants.canary_deploys.update()` | `PUT /ai/assistants/{assistant_id}/canary-deploys` | Modify an existing resource without recreating it. | `versions`, `assistant_id` |\n| Delete Canary Deploy | `client.ai.assistants.canary_deploys.delete()` | `DELETE /ai/assistants/{assistant_id}/canary-deploys` | Remove, detach, or clean up an existing resource. | `assistant_id` |\n| Assistant Sms Chat | `client.ai.assistants.send_sms()` | `POST /ai/assistants/{assistant_id}/chat/sms` | Run assistant chat over SMS instead of direct API chat. | `from_`, `to`, `assistant_id` |\n| Clone Assistant | `client.ai.assistants.clone()` | `POST /ai/assistants/{assistant_id}/clone` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id` |\n| List scheduled events | `client.ai.assistants.scheduled_events.list()` | `GET /ai/assistants/{assistant_id}/scheduled_events` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Create a scheduled event | `client.ai.assistants.scheduled_events.create()` | `POST /ai/assistants/{assistant_id}/scheduled_events` | Create or provision an additional resource when the core tasks do not cover this flow. | `telnyx_conversation_channel`, `telnyx_end_user_target`, `telnyx_agent_target`, `scheduled_at_fixed_datetime`, +1 more |\n| Get a scheduled event | `client.ai.assistants.scheduled_events.retrieve()` | `GET /ai/assistants/{assistant_id}/scheduled_events/{event_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id`, `event_id` |\n| Delete a scheduled event | `client.ai.assistants.scheduled_events.delete()` | `DELETE /ai/assistants/{assistant_id}/scheduled_events/{event_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `event_id` |\n| Add Assistant Tag | `client.ai.assistants.tags.add()` | `POST /ai/assistants/{assistant_id}/tags` | Create or provision an additional resource when the core tasks do not cover this flow. | `tag`, `assistant_id` |\n| Remove Assistant Tag | `client.ai.assistants.tags.remove()` | `DELETE /ai/assistants/{assistant_id}/tags/{tag}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `tag` |\n| Get assistant texml | `client.ai.assistants.get_texml()` | `GET /ai/assistants/{assistant_id}/texml` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Add Assistant Tool | `client.ai.assistants.tools.add()` | `PUT /ai/assistants/{assistant_id}/tools/{tool_id}` | Modify an existing resource without recreating it. | `assistant_id`, `tool_id` |\n| Remove Assistant Tool | `client.ai.assistants.tools.remove()` | `DELETE /ai/assistants/{assistant_id}/tools/{tool_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `tool_id` |\n| Test Assistant Tool | `client.ai.assistants.tools.test()` | `POST /ai/assistants/{assistant_id}/tools/{tool_id}/test` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id`, `tool_id` |\n| Get all versions of an assistant | `client.ai.assistants.versions.list()` | `GET /ai/assistants/{assistant_id}/versions` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Get a specific assistant version | `client.ai.assistants.versions.retrieve()` | `GET /ai/assistants/{assistant_id}/versions/{version_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id`, `version_id` |\n| Update a specific assistant version | `client.ai.assistants.versions.update()` | `POST /ai/assistants/{assistant_id}/versions/{version_id}` | Create or provision an additional resource when the core tasks do not cover this flow. | `assistant_id`, `version_id` |\n| Delete a specific assistant version | `client.ai.assistants.versions.delete()` | `DELETE /ai/assistants/{assistant_id}/versions/{version_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `version_id` |\n| Promote an assistant version to main | `client.ai.assistants.versions.promote()` | `POST /ai/assistants/{assistant_id}/versions/{version_id}/promote` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id`, `version_id` |\n| List MCP Servers | `client.ai.mcp_servers.list()` | `GET /ai/mcp_servers` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Create MCP Server | `client.ai.mcp_servers.create()` | `POST /ai/mcp_servers` | Create or provision an additional resource when the core tasks do not cover this flow. | `name`, `type_`, `url` |\n| Get MCP Server | `client.ai.mcp_servers.retrieve()` | `GET /ai/mcp_servers/{mcp_server_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `mcp_server_id` |\n| Update MCP Server | `client.ai.mcp_servers.update()` | `PUT /ai/mcp_servers/{mcp_server_id}` | Modify an existing resource without recreating it. | `mcp_server_id` |\n| Delete MCP Server | `client.ai.mcp_servers.delete()` | `DELETE /ai/mcp_servers/{mcp_server_id}` | Remove, detach, or clean up an existing resource. | `mcp_server_id` |\n| List Tools | `client.ai.tools.list()` | `GET /ai/tools` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Create Tool | `client.ai.tools.create()` | `POST /ai/tools` | Create or provision an additional resource when the core tasks do not cover this flow. | `type_`, `display_name` |\n| Get Tool | `client.ai.tools.retrieve()` | `GET /ai/tools/{tool_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `tool_id` |\n| Update Tool | `client.ai.tools.update()` | `PATCH /ai/tools/{tool_id}` | Modify an existing resource without recreating it. | `tool_id` |\n| Delete Tool | `client.ai.tools.delete()` | `DELETE /ai/tools/{tool_id}` | Remove, detach, or clean up an existing resource. | `tool_id` |\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","assistants","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-ai-assistants-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-ai-assistants-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 (21,074 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-22T12:54:43.693Z","embedding":null,"createdAt":"2026-04-18T22:06:16.184Z","updatedAt":"2026-04-22T12:54:43.693Z","lastSeenAt":"2026-04-22T12:54:43.693Z","tsv":"'+1':626,771,1116,1767 '+12':374 '+13125550001':177 '+15551234567':637 '+16':856 '-1215':505 '-4':506 '-8964':508 '/ai/assistants':330,430,742,824,904,1549,1567,1591,1618,1637,1657,1679,1709,1734,1775,1804,1827,1854,1876,1900,1922,1945,1983,2009,2039,2071,2097 '/ai/assistants/import':948 '/ai/assistants/tags':1047 '/ai/assistants/tests':535,1075,1398,1422,1440,1463,1489,1521 '/ai/assistants/tests/test-suites':1167,1202,1366 '/ai/mcp_servers':2132,2150,2174,2199,2218 '/ai/tools':2237,2254,2277,2299,2315 '/canary-deploys':1570,1594,1621,1640 '/chat':433 '/chat/sms':1660 '/clone':1682 '/promote':2103 '/runs':1205,1369,1466,1492,1524 '/scheduled_events':1712,1737,1778,1807 '/tags':1830,1857 '/test':1951 '/texml':1879 '/tools':1903,1925,1948 '/versions':1986,2012,2042,2074,2100 '0':1127,1259 '1':108 '30':672 '401':69,143 '403':147 '404':150 '41d4':492,785,870 '422':65,131,154,219 '429':62,160 '42b20469':504 '446655440000':494,787,872 '550e8400':489,782,867 'a716':493,786,871 'a9a':507 'account':214 'accuraci':683 'act':639 'action':1375,1498,1688,1957,2109 'actual':115 'add':1822,1895 'addit':275,811,1284,1599,1742,1835,2049,2155,2259 'agent':312,417,1761 'ai':3,7,309 'alreadi':45 'alway':70 'api':25,29,53,123,145,966,978,1002,1669 'array':356,368,573,984 'ask':649 'assess':580 'assist':4,8,80,87,301,302,310,354,363,381,388,410,421,431,450,466,487,518,529,548,582,633,669,726,743,749,778,780,806,825,831,855,863,865,890,906,930,936,964,990,999,1058,1392,1418,1436,1546,1550,1560,1568,1584,1592,1611,1619,1630,1638,1649,1651,1658,1662,1673,1676,1680,1702,1710,1726,1735,1776,1794,1805,1818,1823,1828,1847,1850,1855,1867,1871,1877,1893,1896,1901,1913,1918,1923,1936,1941,1946,1971,1980,1984,2000,2005,2010,2028,2035,2040,2060,2067,2072,2085,2091,2098,2123 'assistant.created':404,795,880 'assistant.description':406,797,882 'assistant.dynamic':798,800,883,885 'assistant.id':396,400,789,793,874,878 'assistant.instructions':403 'assistant.model':402 'assistant.name':401,794,879 'assistant_test.created':694 'assistant_test.description':697 'assistant_test.destination':693 'assistant_test.instructions':696 'assistant_test.name':692 'assistant_test.test':685,690 'assistants_list.data':910,914,1012,1016 'assum':42 'authent':67 'auto':195 'auto-pagin':194 'automat':209 'avail':211,221,231,892,1035,1063,1155,2134,2239 'backoff':166 'bash':11 'batch':1227 'behavior':530 'boolean':765 'bot':665 'c36f66b406f4':509 'call':54,754 'canari':1563,1587,1614,1633 'cat':501 'channel':599,604,1092,1099,1755 'chat':407,411,1102,1653,1663,1670 'check':99,109,135,157 'choos':895,1038,1066,1158,2137,2242 'clean':1446,1555,1644,1813,1862,1931,2080,2225,2321 'client':23,43,447 'client.ai.assistants.canary_deploys.create':1589 'client.ai.assistants.canary_deploys.delete':1635 'client.ai.assistants.canary_deploys.retrieve':1565 'client.ai.assistants.canary_deploys.update':1616 'client.ai.assistants.chat':428,486 'client.ai.assistants.clone':1677 'client.ai.assistants.create':81,328,382 'client.ai.assistants.delete':1547 'client.ai.assistants.get':1873 'client.ai.assistants.imports':946,1001 'client.ai.assistants.list':225,902,908 'client.ai.assistants.retrieve':740,779 'client.ai.assistants.scheduled_events.create':1732 'client.ai.assistants.scheduled_events.delete':1802 'client.ai.assistants.scheduled_events.list':1707 'client.ai.assistants.scheduled_events.retrieve':1773 'client.ai.assistants.send':1654 'client.ai.assistants.tags.add':1825 'client.ai.assistants.tags.list':1045,1050 'client.ai.assistants.tags.remove':1852 'client.ai.assistants.tests.create':533,635 'client.ai.assistants.tests.delete':1438 'client.ai.assistants.tests.list':1073,1124 'client.ai.assistants.tests.retrieve':1396 'client.ai.assistants.tests.runs.list':1461 'client.ai.assistants.tests.runs.retrieve':1519 'client.ai.assistants.tests.runs.trigger':1487 'client.ai.assistants.tests.test_suites.list':1165,1171 'client.ai.assistants.tests.test_suites.runs.list':1200,1250 'client.ai.assistants.tests.test_suites.runs.trigger':1364 'client.ai.assistants.tests.update':1420 'client.ai.assistants.tools.add':1898 'client.ai.assistants.tools.remove':1920 'client.ai.assistants.tools.test':1943 'client.ai.assistants.update':822,864 'client.ai.assistants.versions.delete':2069 'client.ai.assistants.versions.list':1981 'client.ai.assistants.versions.promote':2095 'client.ai.assistants.versions.retrieve':2007 'client.ai.assistants.versions.update':2037 'client.ai.mcp_servers.create':2148 'client.ai.mcp_servers.delete':2216 'client.ai.mcp_servers.list':2130 'client.ai.mcp_servers.retrieve':2172 'client.ai.mcp_servers.update':2197 'client.ai.tools.create':2252 'client.ai.tools.delete':2313 'client.ai.tools.list':2235 'client.ai.tools.retrieve':2275 'client.ai.tools.update':2297 'clone':1675 'close':709 'code':75,126,130,142,183,269 'common':140,230,717 'communic':603,1098 'complet':1239,1277,2336 'con':611 'connect':100 'consolid':1243 'content':426,438,443,495 'control':737,755,1197,1411,1477,1537,1581,1723,1791,1890,1997,2025,2188,2290 'control-flow':736,1196,1410,1476,1536,1580,1722,1790,1889,1996,2024,2187,2289 'convers':451,461,502,559,598,624,1091,1279,1281,1754 'core':297,705,815,1288,1603,1746,1839,2053,2159,2263 'correct':679 'countri':182 'cover':819,1607,1750,1843,2057,2163,2267 'creat':299,516,807,920,943,1022,1141,1273,1382,1505,1586,1595,1695,1728,1738,1831,1964,2045,2116,2145,2151,2250,2255 'creation':303,316,521 'criteria':577,668,677 'current':729,1189,1403,1469,1529,1573,1715,1783,1882,1989,2017,2180,2282 'custom':643,663 'damag':647 'dash':186 'data':1181 'datetim':1766 'decis':739,1199,1413,1479,1539,1583,1725,1793,1892,1999,2027,2190,2292 'deepobject':1246 'default':34 'defin':566 'delay':116 'delet':733,1193,1407,1434,1439,1473,1533,1544,1548,1577,1632,1636,1719,1787,1798,1803,1853,1886,1921,1993,2021,2064,2070,2184,2213,2217,2286,2311,2314 'deploy':532,1564,1588,1615,1634 'descript':334,371,437,539,544,585,590,748,830,922,952,1024,1079,1143,1209 'destin':550,555,636,1104,1110,1144 'detach':1444,1553,1642,1811,1860,1929,2078,2223,2319 'detail':563,589,1518 'direct':1668 'discov':227 'display':476,2271 'durat':613,618,1147 'dynam':761,923,925,1025,1027 'e':120 'e.164':174,769 'e.g':176,1100 'e.message':127 'e.status':125,129 'e29b':491,784,869 'e29b-41d4-a716':490,783,868 'elevenlab':955,1010 'end':1757 'endpoint':1355 'entrypoint':306 'enum':242,251,954 'error':50,59,64,68,72,98,124,134,141,156 'escal':654 'etc':1115 'evalu':576,595 'event':1706,1731,1772,1779,1796,1801,1808,1820 'exact':315,420,1299 'exampl':40 'except':94,103,117 'execut':1226,1235,1363 'exhaust':2329 'exist':897,935,1040,1068,1160,1378,1427,1449,1501,1558,1624,1647,1691,1816,1865,1908,1934,1960,2083,2112,2139,2205,2228,2244,2304,2324 'exponenti':165 'extern':932,939,960,996 'f':122 'fail':56 'fetch':727,760,1187,1401,1467,1527,1571,1713,1781,1880,1987,2015,2178,2280 'field':137,158,244,247,254,323,399,427,514,689,792,877,917,1019,1055,1139,1180,1271,1351 'filter':1084,1095,1107,1221,1232 'first':1291 'fix':1765 'flow':712,738,821,1198,1412,1478,1538,1582,1609,1724,1752,1792,1845,1891,1998,2026,2059,2165,2189,2269,2291 'follow':721,1373,1496,1686,1955,2107 'follow-up':720,1372,1495,1685,1954,2106 'format':139,159,175 'found':153 'frequenc':1317 'frustrat':642 'full':1309,2332 'get':724,741,903,1031,1046,1074,1149,1166,1182,1201,1391,1397,1453,1462,1514,1520,1562,1566,1708,1769,1774,1870,1875,1975,1982,2002,2008,2131,2169,2173,2236,2273,2276 'guess':1349 'handl':51,71 'header':113 'help':86,387 'histori':1186,1456 'id':341,367,432,452,467,488,503,686,691,744,750,756,781,826,832,842,866,918,983,991,1020,1130,1217,1228,1262,1280,1283,1395,1400,1415,1424,1433,1442,1452,1465,1481,1491,1513,1523,1526,1541,1543,1551,1561,1569,1585,1593,1612,1620,1631,1639,1650,1659,1674,1681,1703,1711,1727,1736,1777,1780,1795,1797,1806,1809,1819,1821,1829,1848,1856,1868,1878,1894,1902,1905,1914,1916,1924,1927,1937,1939,1947,1950,1972,1974,1985,2001,2011,2014,2029,2031,2041,2044,2061,2063,2073,2076,2086,2088,2099,2102,2124,2126,2177,2193,2202,2212,2221,2232,2279,2294,2301,2310,2317,2327 'identifi':458 'import':17,21,77,105,167,698,929,934,963,982,993 'includ':178 'index':1296 'infer':223 'inform':681 'initi':46,660 'inlin':260 'insight':1282 'inspect':891,1034,1062,1154,2133,2238 'instal':10,13 'instead':941,1666 'instruct':82,347,351,383,560,564,638,848,852,1145 'insuffici':148 'integ':615 'integr':311,971 'invalid':144 'invent':239 'item':200,913,916,1015,1018,1133,1138,1176,1179,1265,1270 'iter':197,205 'joke':499 'key':26,30,146,967,979,1003,1008 'level':322,1387,1510,1700,1969,2121 'limit':61,162 'list':190,889,907,988,1000,1057,1704,2127,2233 'lower':1316 'lower-frequ':1315 'mai':465 'main':524,2094 'make':735,1195,1409,1475,1535,1579,1721,1789,1888,1995,2023,2186,2288 'manual':1484 'max':612,1146 'maximum':617 'mcp':2128,2146,2170,2175,2191,2195,2200,2210,2214,2219,2230 'messag':442,483 'method':191,317,422,1301,1354 'miss':1350 'model':88,210,217,229,338,344,389,839,845 'modifi':1425,1622,1906,2203,2302 'must':171 'mutat':900,1043,1071,1163,2142,2247 'my-openai-key':1005 'my-resourc':91,392 'my-test-suit':1253 'name':90,335,391,471,477,540,545,662,674,682,836,919,1021,1089,1140,1153,1204,1211,1252,1368,1390,2166,2272 'need':256,313,418,715 'network':58,97 'new':1384,1507,1697,1966,2118 'none':2144,2249 'note':168 'number':170,1112 'object':357,574,600,1241 'omit':38 'openai':1007 'openai/gpt-4o':89,232,390 'oper':273,276,700,1285,1293,1323,1352 'option':280,285,375,475,588,627,772,857,987,1117,1310,1328,1333,2330 'optional-paramet':279,284,1327,1332 'os':18 'os.environ.get':27 'p':997 'page':202,208,1123,1125,1240,1244,1249,1257 'page.data':1126,1134,1258,1266 'page.meta':1136,1268 'page.run':1261 'page.test':1129 'pagin':189,196,1061,1135,1267 'param':376,628,773,858,1118,1304,1311,1359 'paramet':241,250,281,286,331,434,536,745,827,949,1076,1206,1245,1329,1334,2331 'parenthes':188 'patch':2298 'path':416,526 'payload':1319,2338 'pend':1237 'performan':584 'permiss':149 'phone':169,1111 'pip':12 'pointer':973 'post':329,429,534,823,947,1365,1488,1590,1656,1678,1733,1826,1944,2038,2096,2149,2253 'prefix':180 'primari':397,414,512,687,790,875,915,1017,1053,1137,1178,1269 'print':96,121,132,395,510,684,788,873,909,1011,1051,1128,1172,1260 'product':74,528,648,680 'promot':2089 'provid':678,933,940,953,961,1009 'provis':809,1597,1740,1833,2047,2153,2257 'put':1421,1617,1899,2198 'python':5,9,16,76,380,484,632,777,862,905,998,1048,1122,1168,1248 'qwen/qwen3-235b-a22b':233 'rate':60,161 'rather':1380,1503,1693,1962,2114 'read':264,277,1325 'receiv':645 'recreat':1430,1627,1911,2208,2307 'ref':968,1004 'refer':234,975 'references/api-details.md':265,266,283,293,378,379,630,631,775,776,860,861,1120,1121,1306,1307,1331,1341,2340,2341 'refund':652 'remov':1443,1552,1641,1810,1849,1859,1917,1928,2077,2222,2318 'requir':136,333,436,538,747,829,951,1078,1208,1303,1358 'resourc':93,151,394,812,893,898,1036,1041,1064,1069,1156,1161,1388,1428,1450,1511,1559,1600,1625,1648,1701,1743,1817,1836,1866,1909,1935,1970,2050,2084,2122,2135,2140,2156,2206,2229,2240,2245,2260,2305,2325 'respond':670 'respons':243,253,290,295,398,425,485,513,661,675,688,791,876,911,1013,1054,1131,1174,1263,1312,1338,1343,2333 'response-schema':289,294,1337,1342 'response.content':511,515 'result':203 'retel':957 'retri':102,111,163 'retry-aft':110 'return':192,218,324 'rubric':572,667 'rule':236 'run':1185,1216,1222,1233,1238,1455,1486,1517,1525,1542,1661 'runtim':415 'satisfi':657 'scenario':569 'schedul':1705,1730,1763,1771,1800 'schema':291,296,1313,1339,1344,2334 'scratch':945 'sdk':327,1300,1353 'second':614,620,673,1148 'secret':972 'section':282,292,1330,1340 'see':2339 'send':481 'sent':444 'server':2129,2147,2171,2176,2192,2196,2201,2211,2215,2220,2231 'setup':15 'shoul':625 'shown':48,259 'skill':263 'skill-telnyx-ai-assistants-python' 'sm':1103 'sms':1652,1655,1665 'source-team-telnyx' 'space':185 'specif':1224,1459,1515,2004,2034,2066 'state':730,1190,1404,1470,1530,1574,1716,1784,1883,1990,2018,2181,2283 'status':1229,1236,1272 'step':723 'string':336,339,348,369,372,439,453,468,472,541,551,561,586,751,757,768,833,837,840,849,969,985,1082,1093,1105,1212,1218,1230 'style':1247 'suit':1081,1088,1152,1170,1184,1203,1210,1215,1225,1251,1256,1362,1367,1389 'support':664,699 'system':350,851 'tag':1033,1049,1824,1846,1851,1858,1869 'tags.tags':1052,1056 'target':554,1759,1762 'task':298,706,816,1289,1604,1747,1840,2054,2160,2264 'tell':496 'telnyx':2,6,14,20,22,24,28,78,240,597,1090,1753,1756,1760 'telnyx-ai-assistants-python':1 'telnyx.apiconnectionerror':95 'telnyx.apistatuserror':118 'telnyx.ratelimiterror':104 'test':519,520,549,558,568,594,608,623,634,666,1059,1080,1085,1087,1096,1108,1151,1169,1183,1214,1255,1361,1393,1399,1414,1419,1423,1432,1437,1441,1451,1454,1460,1464,1480,1485,1490,1512,1516,1522,1540,1940 'test_suites.data':1173,1177 'texml':1872,1874 'th':981 'thread':462 'time':106,676 'time.sleep':107 'tool':355,360,366,1897,1904,1915,1919,1926,1938,1942,1949,1973,2234,2251,2274,2278,2293,2296,2300,2309,2312,2316,2326 'top':321,1386,1509,1699,1968,2120 'top-level':320,1385,1508,1698,1967,2119 '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' 'tri':79 'trigger':1360,1370,1482,1493,1683,1952,2104 'type':332,435,537,746,828,950,1077,1207,2167,2270 'uniqu':457 'updat':732,804,1192,1275,1406,1416,1472,1532,1576,1613,1718,1786,1885,1992,2020,2032,2183,2194,2285,2295 'url':803,888,928,1030,1114,2168 'use':198,224,235,271,346,365,463,578,701,847,1286,1305,1321,1356 'user':480,1758 'uuid':454,469,752,758,834,1219 'valid':63,133,155,525 'vapi':956 'vari':212 'variabl':762,799,801,884,886,924,926,1026,1028 'variat':718 'version':1610,1629,1977,2006,2013,2030,2036,2043,2062,2068,2075,2087,2092,2101,2125 'web':1101 'webhook':246,764,802,887,927,1029,1113,1318,2337 'within':671 'without':1429,1626,1910,2207,2306 'work':228 'workflow':1379,1502,1692,1961,2113 'wrapper':912,1014,1132,1175,1264 'write':268 'yes':337,340,349,440,455,470,542,552,562,575,753,835,958,970,1213","prices":[{"id":"22bef4d0-794e-40a6-8363-ab276a36f28c","listingId":"f5a19f70-3804-4d80-b9ce-46efe5880083","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:06:16.184Z"}],"sources":[{"listingId":"f5a19f70-3804-4d80-b9ce-46efe5880083","source":"github","sourceId":"team-telnyx/ai/telnyx-ai-assistants-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-ai-assistants-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:06:16.184Z","lastSeenAt":"2026-04-22T12:54:43.693Z"}],"details":{"listingId":"f5a19f70-3804-4d80-b9ce-46efe5880083","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-ai-assistants-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":"66445a95e00e222bad3ce0712f7a8b01baa4b6b1","skill_md_path":"skills/telnyx-ai-assistants-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-ai-assistants-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-ai-assistants-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-ai-assistants-python"},"updatedAt":"2026-04-22T12:54:43.693Z"}}