{"id":"91cc1f76-ee51-49d6-8927-4dc11ece69f7","shortId":"m8yafr","kind":"skill","title":"telnyx-porting-out-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Porting Out - Ruby\n\n## Installation\n\n```bash\ngem install telnyx\n```\n\n## Setup\n\n```ruby\nrequire \"telnyx\"\n\nclient = Telnyx::Client.new(\n  api_key: ENV[\"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```ruby\nbegin\n  result = client.messages.send_(to: \"+13125550001\", from: \"+13125550002\", text: \"Hello\")\nrescue Telnyx::Errors::APIConnectionError\n  puts \"Network error — check connectivity and retry\"\nrescue Telnyx::Errors::RateLimitError\n  # 429: rate limited — wait and retry with exponential backoff\n  sleep(1) # Check Retry-After header for actual delay\nrescue Telnyx::Errors::APIStatusError => e\n  puts \"API error #{e.status}: #{e.message}\"\n  if e.status == 422\n    puts \"Validation error — check required fields and formats\"\n  end\nend\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:** Use `.auto_paging_each` for automatic iteration: `page.auto_paging_each { |item| puts item.id }`.\n\n## List portout requests\n\nReturns the portout requests according to filters\n\n`GET /portouts`\n\n```ruby\npage = client.portouts.list\n\nputs(page)\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```ruby\npage = client.portouts.events.list\n\nputs(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```ruby\nevent = client.portouts.events.retrieve(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(event)\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```ruby\nresult = client.portouts.events.republish(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(result)\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```ruby\nresponse = client.portouts.list_rejection_codes(\"329d6658-8f93-405d-862f-648776e8afd7\")\n\nputs(response)\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```ruby\npage = client.portouts.reports.list\n\nputs(page)\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```ruby\nreport = client.portouts.reports.create(params: {filters: {}}, report_type: :export_portouts_csv)\n\nputs(report)\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```ruby\nreport = client.portouts.reports.retrieve(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(report)\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```ruby\nportout = client.portouts.retrieve(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(portout)\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```ruby\ncomments = client.portouts.comments.list(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(comments)\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```ruby\ncomment = client.portouts.comments.create(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(comment)\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```ruby\nsupporting_documents = client.portouts.supporting_documents.list(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(supporting_documents)\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```ruby\nsupporting_document = client.portouts.supporting_documents.create(\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\")\n\nputs(supporting_document)\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```ruby\nresponse = client.portouts.update_status(\n  :authorized,\n  id: \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n  reason: \"I do not recognize this transaction\"\n)\n\nputs(response)\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","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-porting-out-ruby","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-ruby","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 (8,793 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.586Z","embedding":null,"createdAt":"2026-04-18T22:07:36.379Z","updatedAt":"2026-04-22T06:54:46.586Z","lastSeenAt":"2026-04-22T06:54:46.586Z","tsv":"'+13125550001':78 '+13125550002':80 '/comments':793,839 '/portouts':194,676,791,837,887,946,996 '/portouts/events':301,362,430 '/portouts/rejections':473 '/portouts/reports':513,565,618 '/republish':432 '/supporting_documents':889,948 '1':108 '182bd5e5':368,437,624,682,798,847,895,958,1012 '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e':367,436,623,681,797,846,894,957,1011 '329d6658':482 '329d6658-8f93-405d-862f-648776e8afd7':481 '401':66,143 '403':147 '404':150 '405d':484 '422':62,129,154 '429':59,98,160 '4fe4':370,439,626,684,800,849,897,960,1014 '648776e8afd7':486 '6e1a':369,438,625,683,799,848,896,959,1013 '862f':485 '8f93':483 'a799':371,440,627,685,801,850,898,961,1015 'aa6d9a6ab26e':372,441,628,686,802,851,899,962,1016 'accord':190 'actual':115 'address':256,745,1082 'alreadi':42,201,690,1027 'alway':67 'api':22,26,50,123,145 'apiconnectionerror':86 'apistatuserror':120 'array':234,238,311,379,723,727,951,1060,1064 'assum':39 'authent':64 'author':204,265,693,754,990,1009,1030,1091 'auto':171 'automat':175 'avail':308,376 'backoff':106,166 'base':670 'bash':11 'begin':74 'bodi':806,841,855 'boolean':203,227,496,692,716,1004,1029,1053 'call':51 'cancel':271,760,1097 'carrier':207,216,696,705,1033,1042 'chang':322,325,390,393 'check':90,109,133,157 'citi':210,699,1036 'client':19,40 'client.messages.send':76 'client.new':21 'client.portouts.comments.create':845 'client.portouts.comments.list':796 'client.portouts.events.list':304 'client.portouts.events.republish':435 'client.portouts.events.retrieve':366 'client.portouts.list':197,478 'client.portouts.reports.create':568 'client.portouts.reports.list':516 'client.portouts.reports.retrieve':622 'client.portouts.retrieve':680 'client.portouts.supporting_documents.create':956 'client.portouts.supporting_documents.list':893 'client.portouts.update':1007 'code':72,142,249,450,463,480,490,738,1075 'comment':327,395,776,785,795,804,824,831,844,853 'common':140 'complet':336,404,544,603,656 'connect':91 'creat':212,313,335,381,403,520,550,579,632,701,808,822,829,857,904,925,935,967,1038 'csv':540,575,599,652 'current':215,704,1041 'date':223,253,316,324,346,384,392,414,523,548,582,607,635,660,712,742,1049,1079 'date-tim':315,345,383,413,522,547,581,606,634,659 'default':31 'delay':116 'descript':492 'document':525,584,637,873,881,892,902,907,930,940,950,955,965,970 'e':121 'e.message':126 'e.status':125,128 'elig':445,466 'end':138,139,218,707,1044 'enum':263,320,334,388,402,537,542,596,601,649,654,752,919,982,1089 'env':24 'error':47,56,61,65,69,85,89,96,119,124,132,141,156 'event':290,299,318,353,360,365,374,386,421,428 'everi':879 'exampl':37 'exponenti':105,165 'export':538,573,597,650 'fail':53 'field':135,158 'filter':192,570 'foc':222,252,711,741,1048,1078 'format':137,159 'found':153 'gem':12 'generat':506,557,616 'get':193,300,361,472,512,617,662,675,790,886 'given':455 'handl':48,68 'header':113 'hello':82 'host':225,714,1002,1051 'id':228,279,328,338,363,396,406,431,460,475,526,528,585,587,619,638,640,673,677,717,768,792,811,814,820,838,860,863,869,888,908,910,913,947,971,973,976,997,1010,1054,1105 'import':167 'initi':43 'insert':230,719,1056 'instal':10,13 'insuffici':148 'integ':250,491,739,1076 'invalid':144 'invoic':921,984 'item':180 'item.id':182 'iter':176 'key':23,27,146,273,762,1099 'limit':58,100,162 'list':183,285,293,444,461,497,503,774,783,871,878,927,937 'loa':920,983 'lsr':233,722,1059 'messag':226,715,1003,1052 'method':310,378 'name':205,208,220,694,697,709,1031,1034,1046 'network':55,88 'note':168 'notif':309,377 'null':244,733,1070 'number':237,726,1063 'object':331,399,531,590,643,952 'omit':35 'oper':511,563 'option':840,949,1001 'order':454 'page':172,178,196,199,303,306,515,518 'page.auto':177 'pagin':169 'param':530,569,589,642 'patch':995 'payload':330,332,398,400 'pend':264,270,543,602,655,753,759,1090,1096 'permiss':149 'phone':236,725,1062 'pon':240,729,1066 'port':3,7,202,266,288,297,351,358,419,426,447,458,470,499,509,553,561,691,755,1028,1092 'port-out':287,296,350,357,418,425,446,457,469,498,508,552,560 'portout':184,188,337,405,474,539,574,598,651,664,668,679,688,779,788,813,827,834,862,876,884,912,933,943,975,993 'portout.foc':323,391 'portout.new':326,394 'portout.status':321,389 'post':429,564,836,945 'product':71 'provid':674 'put':87,122,130,181,198,305,373,442,487,517,576,629,687,803,852,900,963,1024 'rate':57,99,161 'ratelimiterror':97 'reason':242,494,731,1000,1017,1068 'recogn':1021 'record':245,340,408,532,591,644,734,816,865,915,978,1071 'reject':248,267,269,449,462,479,737,756,758,992,1074,1093,1095 'rejected-pend':268,757,1094 'relat':501,555 'report':502,505,535,556,558,567,571,577,594,611,615,621,630,647 'republish':416,422 'request':185,189,251,665,669,740,780,789,828,835,877,885,934,944,994,1077 'requir':17,134,495,999 'rescu':83,94,117 'resourc':151 'respons':477,488,1006,1025 'result':75,434,443 'retri':93,103,111,163 'retriev':609,612 'retry-aft':110 'return':186,200,291,307,375,489,519,578,631,666,689,781,805,854,903,966,1026 'rubi':5,9,16,73,195,302,364,433,476,514,566,620,678,794,843,890,953,1005 'servic':255,744,1081 'setup':15 'show':348,354 'shown':45 'skill' 'skill-telnyx-porting-out-ruby' 'sleep':107 'source-team-telnyx' 'specif':356,424,453,614 'spid':258,747,1084 'state':260,749,1086 'status':262,333,401,541,600,653,751,989,998,1008,1088 'string':206,209,211,214,217,221,224,229,232,235,239,241,243,247,254,257,259,261,274,277,284,312,342,380,410,493,534,593,646,695,698,700,703,706,710,713,718,721,724,728,730,732,736,743,746,748,750,763,766,773,807,810,812,815,818,821,842,856,859,861,864,867,870,906,917,924,969,980,987,1032,1035,1037,1040,1043,1047,1050,1055,1058,1061,1065,1067,1069,1073,1080,1083,1085,1087,1100,1103,1110 'support':272,761,872,880,891,901,929,939,954,964,1098 'telnyx':2,6,14,18,20,25,84,95,118 'telnyx-porting-out-rubi':1 'text':81 'time':317,347,385,415,524,549,583,608,636,661 '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':1023 'type':246,319,341,387,409,533,536,572,592,595,645,648,735,817,866,916,918,979,981,1072 'updat':275,343,411,545,604,657,764,922,985,988,1101 'use':170 'user':219,278,708,767,819,868,1045,1104 'uuid':280,282,329,339,397,407,527,529,586,588,639,641,769,771,909,911,914,972,974,977,1106,1108 'valid':60,131,155 'vendor':281,770,1107 'wait':101 'zip':283,772,1109","prices":[{"id":"5aa9825e-e42d-45ed-be31-e3a74ea5d369","listingId":"91cc1f76-ee51-49d6-8927-4dc11ece69f7","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:36.379Z"}],"sources":[{"listingId":"91cc1f76-ee51-49d6-8927-4dc11ece69f7","source":"github","sourceId":"team-telnyx/ai/telnyx-porting-out-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-porting-out-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:07:36.379Z","lastSeenAt":"2026-04-22T06:54:46.586Z"}],"details":{"listingId":"91cc1f76-ee51-49d6-8927-4dc11ece69f7","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-porting-out-ruby","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":"a47dce3cbb593a26becfdb56a9f09165996a63d8","skill_md_path":"skills/telnyx-porting-out-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-porting-out-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-porting-out-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-porting-out-ruby"},"updatedAt":"2026-04-22T06:54:46.586Z"}}