{"id":"88e20f27-bfb7-4f60-ac5b-05bb35ffe60e","shortId":"Hsyumh","kind":"skill","title":"telnyx-porting-out-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Porting Out - 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 portout requests\n\nReturns the portout requests according to filters\n\n`GET /portouts`\n\n```python\npage = client.portouts.list()\npage = page.data[0]\nprint(page.id)\n```\n\nReturns: `already_ported` (boolean), `authorized_name` (string), `carrier_name` (string), `city` (string), `created_at` (string), `current_carrier` (string), `end_user_name` (string), `foc_date` (string), `host_messaging` (boolean), `id` (string), `inserted_at` (string), `lsr` (array[string]), `phone_numbers` (array[string]), `pon` (string), `reason` (string | null), `record_type` (string), `rejection_code` (integer), `requested_foc_date` (string), `service_address` (string), `spid` (string), `state` (string), `status` (enum: pending, authorized, ported, rejected, rejected-pending, canceled), `support_key` (string), `updated_at` (string), `user_id` (uuid), `vendor` (uuid), `zip` (string)\n\n## List all port-out events\n\nReturns a list of all port-out events.\n\n`GET /portouts/events`\n\n```python\npage = client.portouts.events.list()\npage = page.data[0]\nprint(page)\n```\n\nReturns: `available_notification_methods` (array[string]), `created_at` (date-time), `event_type` (enum: portout.status_changed, portout.foc_date_changed, portout.new_comment), `id` (uuid), `payload` (object), `payload_status` (enum: created, completed), `portout_id` (uuid), `record_type` (string), `updated_at` (date-time)\n\n## Show a port-out event\n\nShow a specific port-out event.\n\n`GET /portouts/events/{id}`\n\n```python\nevent = client.portouts.events.retrieve(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(event.data)\n```\n\nReturns: `available_notification_methods` (array[string]), `created_at` (date-time), `event_type` (enum: portout.status_changed, portout.foc_date_changed, portout.new_comment), `id` (uuid), `payload` (object), `payload_status` (enum: created, completed), `portout_id` (uuid), `record_type` (string), `updated_at` (date-time)\n\n## Republish a port-out event\n\nRepublish a specific port-out event.\n\n`POST /portouts/events/{id}/republish`\n\n```python\nclient.portouts.events.republish(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\n```\n\n## List eligible port-out rejection codes for a specific order\n\nGiven a port-out ID, list rejection codes that are eligible for that port-out\n\n`GET /portouts/rejections/{portout_id}`\n\n```python\nresponse = client.portouts.list_rejection_codes(\n    portout_id=\"329d6658-8f93-405d-862f-648776e8afd7\",\n)\nprint(response.data)\n```\n\nReturns: `code` (integer), `description` (string), `reason_required` (boolean)\n\n## List port-out related reports\n\nList the reports generated about port-out operations.\n\n`GET /portouts/reports`\n\n```python\npage = client.portouts.reports.list()\npage = page.data[0]\nprint(page.id)\n```\n\nReturns: `created_at` (date-time), `document_id` (uuid), `id` (uuid), `params` (object), `record_type` (string), `report_type` (enum: export_portouts_csv), `status` (enum: pending, completed), `updated_at` (date-time)\n\n## Create a port-out related report\n\nGenerate reports about port-out operations.\n\n`POST /portouts/reports`\n\n```python\nreport = client.portouts.reports.create(\n    params={\n        \"filters\": {}\n    },\n    report_type=\"export_portouts_csv\",\n)\nprint(report.data)\n```\n\nReturns: `created_at` (date-time), `document_id` (uuid), `id` (uuid), `params` (object), `record_type` (string), `report_type` (enum: export_portouts_csv), `status` (enum: pending, completed), `updated_at` (date-time)\n\n## Retrieve a report\n\nRetrieve a specific report generated.\n\n`GET /portouts/reports/{id}`\n\n```python\nreport = client.portouts.reports.retrieve(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(report.data)\n```\n\nReturns: `created_at` (date-time), `document_id` (uuid), `id` (uuid), `params` (object), `record_type` (string), `report_type` (enum: export_portouts_csv), `status` (enum: pending, completed), `updated_at` (date-time)\n\n## Get a portout request\n\nReturns the portout request based on the ID provided\n\n`GET /portouts/{id}`\n\n```python\nportout = client.portouts.retrieve(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(portout.data)\n```\n\nReturns: `already_ported` (boolean), `authorized_name` (string), `carrier_name` (string), `city` (string), `created_at` (string), `current_carrier` (string), `end_user_name` (string), `foc_date` (string), `host_messaging` (boolean), `id` (string), `inserted_at` (string), `lsr` (array[string]), `phone_numbers` (array[string]), `pon` (string), `reason` (string | null), `record_type` (string), `rejection_code` (integer), `requested_foc_date` (string), `service_address` (string), `spid` (string), `state` (string), `status` (enum: pending, authorized, ported, rejected, rejected-pending, canceled), `support_key` (string), `updated_at` (string), `user_id` (uuid), `vendor` (uuid), `zip` (string)\n\n## List all comments for a portout request\n\nReturns a list of comments for a portout request.\n\n`GET /portouts/{id}/comments`\n\n```python\ncomments = client.portouts.comments.list(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(comments.data)\n```\n\nReturns: `body` (string), `created_at` (string), `id` (string), `portout_id` (string), `record_type` (string), `user_id` (string)\n\n## Create a comment on a portout request\n\nCreates a comment on a portout request.\n\n`POST /portouts/{id}/comments`\n\nOptional: `body` (string)\n\n```python\ncomment = client.portouts.comments.create(\n    id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(comment.data)\n```\n\nReturns: `body` (string), `created_at` (string), `id` (string), `portout_id` (string), `record_type` (string), `user_id` (string)\n\n## List supporting documents on a portout request\n\nList every supporting documents for a portout request.\n\n`GET /portouts/{id}/supporting_documents`\n\n```python\nsupporting_documents = client.portouts.supporting_documents.list(\n    \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(supporting_documents.data)\n```\n\nReturns: `created_at` (string), `document_id` (uuid), `id` (uuid), `portout_id` (uuid), `record_type` (string), `type` (enum: loa, invoice), `updated_at` (string)\n\n## Create a list of supporting documents on a portout request\n\nCreates a list of supporting documents on a portout request.\n\n`POST /portouts/{id}/supporting_documents`\n\nOptional: `documents` (array[object])\n\n```python\nsupporting_document = client.portouts.supporting_documents.create(\n    id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(supporting_document.data)\n```\n\nReturns: `created_at` (string), `document_id` (uuid), `id` (uuid), `portout_id` (uuid), `record_type` (string), `type` (enum: loa, invoice), `updated_at` (string)\n\n## Update Status\n\nAuthorize or reject portout request\n\n`PATCH /portouts/{id}/{status}` — Required: `reason`\n\nOptional: `host_messaging` (boolean)\n\n```python\nresponse = client.portouts.update_status(\n    status=\"authorized\",\n    id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n    reason=\"I do not recognize this transaction\",\n)\nprint(response.data)\n```\n\nReturns: `already_ported` (boolean), `authorized_name` (string), `carrier_name` (string), `city` (string), `created_at` (string), `current_carrier` (string), `end_user_name` (string), `foc_date` (string), `host_messaging` (boolean), `id` (string), `inserted_at` (string), `lsr` (array[string]), `phone_numbers` (array[string]), `pon` (string), `reason` (string | null), `record_type` (string), `rejection_code` (integer), `requested_foc_date` (string), `service_address` (string), `spid` (string), `state` (string), `status` (enum: pending, authorized, ported, rejected, rejected-pending, canceled), `support_key` (string), `updated_at` (string), `user_id` (uuid), `vendor` (uuid), `zip` (string)","tags":["telnyx","porting","out","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-porting-out-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-porting-out-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 (9,122 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-22T06:54:46.502Z","embedding":null,"createdAt":"2026-04-18T22:07:35.630Z","updatedAt":"2026-04-22T06:54:46.502Z","lastSeenAt":"2026-04-22T06:54:46.502Z","tsv":"'+13125550001':83 '+13125550002':85 '/comments':811,857 '/portouts':204,694,809,855,906,964,1014 '/portouts/events':314,378,446 '/portouts/rejections':486 '/portouts/reports':528,583,636 '/republish':448 '/supporting_documents':908,966 '0':210,320,534 '1':111 '182bd5e5':384,452,642,700,816,866,914,977,1031 '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e':383,451,641,699,815,865,913,976,1030 '329d6658':497 '329d6658-8f93-405d-862f-648776e8afd7':496 '401':69,146 '403':150 '404':153 '405d':499 '422':65,134,157 '429':62,99,163 '4fe4':386,454,644,702,818,868,916,979,1033 '648776e8afd7':501 '6e1a':385,453,643,701,817,867,915,978,1032 '862f':500 '8f93':498 'a799':387,455,645,703,819,869,917,980,1034 'aa6d9a6ab26e':388,456,646,704,820,870,918,981,1035 'accord':200 'actual':118 'address':269,763,1101 'alreadi':45,214,708,1046 'alway':70 'api':25,29,53,126,148 'array':247,251,327,395,741,745,969,1079,1083 'assum':42 'authent':67 'author':217,278,711,772,1008,1028,1049,1110 'auto':178 'auto-pagin':177 'automat':192 'avail':324,392 'backoff':107,169 'base':688 'bash':11 'bodi':824,859,874 'boolean':216,240,511,710,734,1022,1048,1072 'call':54 'cancel':284,778,1116 'carrier':220,229,714,723,1052,1061 'chang':338,341,406,409 'check':93,112,138,160 'citi':223,717,1055 'client':23,43 'client.messages.send':81 'client.portouts.comments.create':863 'client.portouts.comments.list':814 'client.portouts.events.list':317 'client.portouts.events.republish':450 'client.portouts.events.retrieve':382 'client.portouts.list':207,491 'client.portouts.reports.create':586 'client.portouts.reports.list':531 'client.portouts.reports.retrieve':640 'client.portouts.retrieve':698 'client.portouts.supporting_documents.create':974 'client.portouts.supporting_documents.list':912 'client.portouts.update':1025 'code':75,129,133,145,262,463,476,493,505,756,1094 'comment':343,411,794,803,813,842,849,862 'comment.data':872 'comments.data':822 'common':143 'complet':352,420,562,621,674 'connect':94 'creat':225,329,351,397,419,538,568,597,650,719,826,840,847,876,922,943,953,985,1057 'csv':558,593,617,670 'current':228,722,1060 'date':236,266,332,340,362,400,408,430,541,566,600,625,653,678,730,760,1068,1098 'date-tim':331,361,399,429,540,565,599,624,652,677 'default':34 'delay':119 'descript':507 'document':543,602,655,892,900,911,925,948,958,968,973,988 'e':123 'e.message':130 'e.status':128,132 'elig':458,479 'end':231,725,1063 'enum':276,336,350,404,418,555,560,614,619,667,672,770,937,1000,1108 'error':50,59,64,68,72,92,127,137,144,159 'event':303,312,334,369,376,381,402,437,444 'event.data':390 'everi':898 'exampl':40 'except':88,97,120 'exponenti':106,168 'export':556,591,615,668 'f':125 'fail':56 'field':140,161 'filter':202,588 'foc':235,265,729,759,1067,1097 'format':142,162 'found':156 'generat':521,575,634 'get':203,313,377,485,527,635,680,693,808,905 'given':468 'handl':51,71 'header':116 'hello':87 'host':238,732,1020,1070 'id':241,292,344,354,379,412,422,447,473,488,495,544,546,603,605,637,656,658,691,695,735,786,810,829,832,838,856,864,879,882,888,907,926,928,931,965,975,989,991,994,1015,1029,1073,1124 'import':17,21,77,108,170 'initi':46 'insert':243,737,1075 'instal':10,13 'insuffici':151 'integ':263,506,757,1095 'invalid':147 'invoic':939,1002 'item':183 'iter':180,188 'key':26,30,149,286,780,1118 'limit':61,101,165 'list':173,193,298,306,457,474,512,518,792,801,890,897,945,955 'loa':938,1001 'lsr':246,740,1078 'messag':239,733,1021,1071 'method':174,326,394 'name':218,221,233,712,715,727,1050,1053,1065 'network':58,91 'note':171 'notif':325,393 'null':257,751,1089 'number':250,744,1082 'object':347,415,549,608,661,970 'omit':38 'oper':526,581 'option':858,967,1019 'order':467 'os':18 'os.environ.get':27 'page':185,191,206,208,316,318,322,530,532 'page.data':209,319,533 'page.id':212,536 'pagin':172,179 'param':548,587,607,660 'patch':1013 'payload':346,348,414,416 'pend':277,283,561,620,673,771,777,1109,1115 'permiss':152 'phone':249,743,1081 'pip':12 'pon':253,747,1085 'port':3,7,215,279,301,310,367,374,435,442,460,471,483,514,524,571,579,709,773,1047,1111 'port-out':300,309,366,373,434,441,459,470,482,513,523,570,578 'portout':194,198,353,421,487,494,557,592,616,669,682,686,697,797,806,831,845,852,881,895,903,930,951,961,993,1011 'portout.data':706 'portout.foc':339,407 'portout.new':342,410 'portout.status':337,405 'post':445,582,854,963 'print':90,124,135,211,321,389,502,535,594,647,705,821,871,919,982,1043 'product':74 'provid':692 'python':5,9,16,76,205,315,380,449,489,529,584,638,696,812,861,909,971,1023 'rate':60,100,164 'reason':255,509,749,1018,1036,1087 'recogn':1040 'record':258,356,424,550,609,662,752,834,884,933,996,1090 'reject':261,280,282,462,475,492,755,774,776,1010,1093,1112,1114 'rejected-pend':281,775,1113 'relat':516,573 'report':517,520,553,574,576,585,589,612,629,633,639,665 'report.data':595,648 'republish':432,438 'request':195,199,264,683,687,758,798,807,846,853,896,904,952,962,1012,1096 'requir':139,510,1017 'resourc':154 'respons':490,1024 'response.data':503,1044 'result':80,186 'retri':96,104,114,166 'retriev':627,630 'retry-aft':113 'return':175,196,213,304,323,391,504,537,596,649,684,707,799,823,873,921,984,1045 'servic':268,762,1100 'setup':15 'show':364,370 'shown':48 'skill' 'skill-telnyx-porting-out-python' 'source-team-telnyx' 'specif':372,440,466,632 'spid':271,765,1103 'state':273,767,1105 'status':275,349,417,559,618,671,769,1007,1016,1026,1027,1107 'string':219,222,224,227,230,234,237,242,245,248,252,254,256,260,267,270,272,274,287,290,297,328,358,396,426,508,552,611,664,713,716,718,721,724,728,731,736,739,742,746,748,750,754,761,764,766,768,781,784,791,825,828,830,833,836,839,860,875,878,880,883,886,889,924,935,942,987,998,1005,1051,1054,1056,1059,1062,1066,1069,1074,1077,1080,1084,1086,1088,1092,1099,1102,1104,1106,1119,1122,1129 'support':285,779,891,899,910,947,957,972,1117 'supporting_document.data':983 'supporting_documents.data':920 'telnyx':2,6,14,20,22,24,28,78 'telnyx-porting-out-python':1 'telnyx.apiconnectionerror':89 'telnyx.apistatuserror':121 'telnyx.ratelimiterror':98 'text':86 'time':109,333,363,401,431,542,567,601,626,654,679 'time.sleep':110 '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' 'transact':1042 'tri':79 'type':259,335,357,403,425,551,554,590,610,613,663,666,753,835,885,934,936,997,999,1091 'updat':288,359,427,563,622,675,782,940,1003,1006,1120 'use':181 'user':232,291,726,785,837,887,1064,1123 'uuid':293,295,345,355,413,423,545,547,604,606,657,659,787,789,927,929,932,990,992,995,1125,1127 'valid':63,136,158 'vendor':294,788,1126 'wait':102 'zip':296,790,1128","prices":[{"id":"79369026-2dea-40ff-95e5-913f0dabfe52","listingId":"88e20f27-bfb7-4f60-ac5b-05bb35ffe60e","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:07:35.630Z"}],"sources":[{"listingId":"88e20f27-bfb7-4f60-ac5b-05bb35ffe60e","source":"github","sourceId":"team-telnyx/ai/telnyx-porting-out-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-porting-out-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:07:35.630Z","lastSeenAt":"2026-04-22T06:54:46.502Z"}],"details":{"listingId":"88e20f27-bfb7-4f60-ac5b-05bb35ffe60e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-porting-out-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":"ea15fc3e88c20949083a97b35f4d8e886a7d1f14","skill_md_path":"skills/telnyx-porting-out-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-porting-out-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-porting-out-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-porting-out-python"},"updatedAt":"2026-04-22T06:54:46.502Z"}}