{"id":"7f22d39c-782d-4b46-847a-2cca622eadcc","shortId":"2j4NCs","kind":"skill","title":"telnyx-webrtc-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Webrtc - 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    result = client.messages.send(to=\"+13125550001\", from_=\"+13125550002\", text=\"Hello\")\nexcept telnyx.APIConnectionError:\n    print(\"Network error — check connectivity and retry\")\nexcept telnyx.RateLimitError:\n    # 429: rate limited — wait and retry with exponential backoff\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- **Pagination:** List methods return an auto-paginating iterator. Use `for item in page_result:` to iterate through all pages automatically.\n\n## List mobile push credentials\n\n`GET /mobile_push_credentials`\n\n```python\npage = client.mobile_push_credentials.list()\npage = page.data[0]\nprint(page.id)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Creates a new mobile push credential\n\n`POST /mobile_push_credentials` — Required: `type`, `certificate`, `private_key`, `alias`\n\n```python\npush_credential_response = client.mobile_push_credentials.create(\n    create_mobile_push_credential_request={\n        \"alias\": \"LucyIosCredential\",\n        \"certificate\": \"-----BEGIN CERTIFICATE----- MIIGVDCCBTKCAQEAsNlRJVZn9ZvXcECQm65czs... -----END CERTIFICATE-----\",\n        \"private_key\": \"-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAsNlRJVZn9ZvXcECQm65czs... -----END RSA PRIVATE KEY-----\",\n        \"type\": \"ios\",\n    },\n)\nprint(push_credential_response.data)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Retrieves a mobile push credential\n\nRetrieves mobile push credential based on the given `push_credential_id`\n\n`GET /mobile_push_credentials/{push_credential_id}`\n\n```python\npush_credential_response = client.mobile_push_credentials.retrieve(\n    \"0ccc7b76-4df3-4bca-a05a-3da1ecc389f0\",\n)\nprint(push_credential_response.data)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Deletes a mobile push credential\n\nDeletes a mobile push credential based on the given `push_credential_id`\n\n`DELETE /mobile_push_credentials/{push_credential_id}`\n\n```python\nclient.mobile_push_credentials.delete(\n    \"0ccc7b76-4df3-4bca-a05a-3da1ecc389f0\",\n)\n```\n\n## List all credentials\n\nList all On-demand Credentials.\n\n`GET /telephony_credentials`\n\n```python\npage = client.telephony_credentials.list()\npage = page.data[0]\nprint(page.id)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Create a credential\n\nCreate a credential.\n\n`POST /telephony_credentials` — Required: `connection_id`\n\nOptional: `expires_at` (string), `name` (string), `tag` (string)\n\n```python\ntelephony_credential = client.telephony_credentials.create(\n    connection_id=\"1234567890\",\n)\nprint(telephony_credential.data)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Get a credential\n\nGet the details of an existing On-demand Credential.\n\n`GET /telephony_credentials/{id}`\n\n```python\ntelephony_credential = client.telephony_credentials.retrieve(\n    \"id\",\n)\nprint(telephony_credential.data)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Update a credential\n\nUpdate an existing credential.\n\n`PATCH /telephony_credentials/{id}`\n\nOptional: `connection_id` (string), `expires_at` (string), `name` (string), `tag` (string)\n\n```python\ntelephony_credential = client.telephony_credentials.update(\n    id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(telephony_credential.data)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Delete a credential\n\nDelete an existing credential.\n\n`DELETE /telephony_credentials/{id}`\n\n```python\ntelephony_credential = client.telephony_credentials.delete(\n    \"id\",\n)\nprint(telephony_credential.data)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)","tags":["telnyx","webrtc","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-webrtc-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-webrtc-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 (6,070 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:56.256Z","embedding":null,"createdAt":"2026-04-18T22:08:49.493Z","updatedAt":"2026-04-22T00:54:56.256Z","lastSeenAt":"2026-04-22T00:54:56.256Z","tsv":"'+13125550001':81 '+13125550002':83 '/mobile_push_credentials':196,242,329,394 '/telephony_credentials':416,463,529,577,642 '0':202,422 '0ccc7b76':339,401 '0ccc7b76-4df3-4bca-a05a-3da1ecc389f0':338,400 '1':109 '1234567890':481 '3da1ecc389f0':343,405 '401':67,144 '403':148 '404':151 '41d4':598 '422':63,132,155 '429':60,97,161 '446655440000':600 '4bca':341,403 '4df3':340,402 '550e8400':595 'a05a':342,404 'a716':599 'account':221,298,362 'actual':116 'alia':206,248,259,283,347 'alreadi':43 'alway':68 'api':23,27,51,124,146 'assum':40 'authent':65 'auto':176 'auto-pagin':175 'automat':190 'backoff':105,167 'base':321,386 'bash':9 'begin':262,269 'boolean':430,489,543,608,656 'call':52 'certif':208,245,261,263,266,285,349 'check':91,110,136,158 'client':21,41 'client.messages.send':79 'client.mobile_push_credentials.create':253 'client.mobile_push_credentials.delete':399 'client.mobile_push_credentials.list':199 'client.mobile_push_credentials.retrieve':337 'client.telephony_credentials.create':478 'client.telephony_credentials.delete':647 'client.telephony_credentials.list':419 'client.telephony_credentials.retrieve':534 'client.telephony_credentials.update':593 'code':73,127,131,143 'common':141 'connect':92,465,479,580 'creat':210,235,254,287,351,426,456,459,485,539,604,652 'credenti':194,240,251,257,316,320,326,331,335,380,385,391,396,408,414,458,461,477,517,527,533,571,575,592,636,640,646 'date':213,233,290,310,354,374 'date-tim':212,232,289,309,353,373 'default':32 'delay':117 'delet':376,381,393,634,637,641 'demand':413,526 'detail':520 'e':121 'e.message':128 'e.status':126,130 'e29b':597 'e29b-41d4-a716':596 'end':265,274 'error':48,57,62,66,70,90,125,135,142,157 'exampl':38 'except':86,95,118 'exist':523,574,639 'expir':429,431,468,488,490,542,544,583,607,609,655,657 'exponenti':104,166 'f':123 'fail':54 'field':138,159 'file':223,300,364 'format':140,160 'found':154 'get':195,328,415,515,518,528 'given':324,389 'handl':49,69 'header':114 'hello':85 'id':215,292,327,332,356,392,397,434,442,454,466,480,493,501,513,530,535,547,555,567,578,581,594,612,620,632,643,648,660,668,680 'import':15,19,75,106,168 'initi':44 'instal':8,11 'insuffici':149 'invalid':145 'io':279 'item':181 'iter':178,186 'json':222,299,363 'key':24,28,147,218,247,268,272,277,295,359 'limit':59,99,163 'list':171,191,406,409 'lucyioscredenti':260 'method':172 'miiepqibaakcaqeasnlrjvzn9zvxcecqm65czs':273 'miigvdccbtkcaqeasnlrjvzn9zvxcecqm65czs':264 'mobil':192,238,255,314,318,378,383 'name':436,471,495,549,586,614,662 'network':56,89 'new':237 'note':169 'object':224,301,365 'omit':36 'on-demand':411,524 'option':467,579 'os':16 'os.environ.get':25 'page':183,189,198,200,418,420 'page.data':201,421 'page.id':204,424 'pagin':170,177 'password':445,504,558,623,671 'patch':576 'permiss':150 'pip':10 'post':241,462 'print':88,122,133,203,280,344,423,482,536,601,649 'privat':217,246,267,271,276,294,358 'product':72 'project':220,297,361 'push':193,239,250,256,315,319,325,330,334,379,384,390,395 'push_credential_response.data':281,345 'python':4,7,14,74,197,249,333,398,417,475,531,590,644 'rate':58,98,162 'record':225,302,366,438,497,551,616,664 'request':258 'requir':137,243,464 'resourc':152,441,500,554,619,667 'respons':252,336 'result':78,184 'retri':94,102,112,164 'retriev':312,317 'retry-aft':111 'return':173,205,282,346,425,484,538,603,651 'rsa':270,275 'setup':13 'shown':46 'sip':444,447,503,506,557,560,622,625,670,673 'skill' 'skill-telnyx-webrtc-python' 'source-team-telnyx' 'string':207,209,216,219,227,229,284,286,293,296,304,306,348,350,357,360,368,370,428,433,435,437,440,443,446,449,452,455,470,472,474,487,492,494,496,499,502,505,508,511,514,541,546,548,550,553,556,559,562,565,568,582,585,587,589,606,611,613,615,618,621,624,627,630,633,654,659,661,663,666,669,672,675,678,681 'tag':473,588 'telephoni':476,532,591,645 'telephony_credential.data':483,537,602,650 'telnyx':2,5,12,18,20,22,26,76 'telnyx-webrtc-python':1 'telnyx.apiconnectionerror':87 'telnyx.apistatuserror':119 'telnyx.ratelimiterror':96 'text':84 'time':107,214,234,291,311,355,375 'time.sleep':108 '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':77 'type':226,228,244,278,303,305,367,369,439,498,552,617,665 'updat':230,307,371,450,509,563,569,572,628,676 'use':179 'user':453,512,566,631,679 'usernam':448,507,561,626,674 'valid':61,134,156 'wait':100 'webrtc':3,6","prices":[{"id":"4b0a103e-5b14-43dd-a63c-97900fb6fd21","listingId":"7f22d39c-782d-4b46-847a-2cca622eadcc","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:49.493Z"}],"sources":[{"listingId":"7f22d39c-782d-4b46-847a-2cca622eadcc","source":"github","sourceId":"team-telnyx/ai/telnyx-webrtc-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-webrtc-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:49.493Z","lastSeenAt":"2026-04-22T00:54:56.256Z"}],"details":{"listingId":"7f22d39c-782d-4b46-847a-2cca622eadcc","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-webrtc-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":"febe805b167ce4c2546eb741687ec1642c8639e9","skill_md_path":"skills/telnyx-webrtc-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-webrtc-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-webrtc-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-webrtc-python"},"updatedAt":"2026-04-22T00:54:56.256Z"}}