Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Port phone numbers into Telnyx. Check portability, create port orders, upload LOA documents, and track porting status. This skill provides Python SDK examples.
.claude/skills/team-telnyx-telnyx-porting-in-python/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 248% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 615% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 778% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 669% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 825% | 0% |
<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->
bashpip install telnyx
pythonimport os from telnyx import Telnyx client = Telnyx( api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted )
All examples below assume client is already initialized as shown above.
All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:
pythonimport telnyx try: result = client.messages.send(to="+13125550001", from_="+13125550002", text="Hello") except telnyx.APIConnectionError: print("Network error — check connectivity and retry") except telnyx.RateLimitError: # 429: rate limited — wait and retry with exponential backoff import time time.sleep(1) # Check Retry-After header for actual delay except telnyx.APIStatusError as e: print(f"API error {e.status_code}: {e.message}") if e.status_code == 422: print("Validation error — check required fields and formats")
Common error codes: 401 invalid API key, 403 insufficient permissions, 404 resource not found, 422 validation error (check field formats), 429 rate limited (retry with exponential backoff).
+13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses.for item in page_result: to iterate through all pages automatically.Runs a portability check, returning the results immediately.
POST /portability_checks
Optional: phone_numbers (arraystring])
pythonresponse = client.portability_checks.run( phone_numbers=["+18005550101"], ) print(response.data)
Returns: fast_portable (boolean), not_portable_reason (string), phone_number (string), portable (boolean), record_type (string)
Returns a list of all porting events.
GET /porting/events
pythonpage = client.porting.events.list() page = page.data[0] print(page)
Returns: available_notification_methods (arraystring]), event_type (enum: porting_order.deleted), id (uuid), payload (object), payload_status (enum: created, completed), porting_order_id (uuid)
Show a specific porting event.
GET /porting/events/{id}
pythonevent = client.porting.events.retrieve( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(event.data)
Returns: available_notification_methods (arraystring]), event_type (enum: porting_order.deleted), id (uuid), payload (object), payload_status (enum: created, completed), porting_order_id (uuid)
Republish a specific porting event.
POST /porting/events/{id}/republish
pythonclient.porting.events.republish( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", )
List the LOA configurations.
GET /porting/loa_configurations
pythonpage = client.porting.loa_configurations.list() page = page.data[0] print(page.id)
Returns: address (object), company_name (string), contact (object), created_at (date-time), id (uuid), logo (object), name (string), organization_id (string), record_type (string), updated_at (date-time)
Create a LOA configuration.
POST /porting/loa_configurations
pythonloa_configuration = client.porting.loa_configurations.create( address={ "city": "Austin", "country_code": "US", "state": "TX", "street_address": "600 Congress Avenue", "zip_code": "78701", }, company_name="Telnyx", contact={ "email": "testing@telnyx.com", "phone_number": "+12003270001", }, logo={ "document_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e" }, name="My LOA Configuration", ) print(loa_configuration.data)
Returns: address (object), company_name (string), contact (object), created_at (date-time), id (uuid), logo (object), name (string), organization_id (string), record_type (string), updated_at (date-time)
Preview the LOA template that would be generated without need to create LOA configuration.
POST /porting/loa_configurations/preview
pythonresponse = client.porting.loa_configurations.preview( address={ "city": "Austin", "country_code": "US", "state": "TX", "street_address": "600 Congress Avenue", "zip_code": "78701", }, company_name="Telnyx", contact={ "email": "testing@telnyx.com", "phone_number": "+12003270001", }, logo={ "document_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e" }, name="My LOA Configuration", ) print(response) content = response.read() print(content)
Retrieve a specific LOA configuration.
GET /porting/loa_configurations/{id}
pythonloa_configuration = client.porting.loa_configurations.retrieve( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(loa_configuration.data)
Returns: address (object), company_name (string), contact (object), created_at (date-time), id (uuid), logo (object), name (string), organization_id (string), record_type (string), updated_at (date-time)
Update a specific LOA configuration.
PATCH /porting/loa_configurations/{id}
pythonloa_configuration = client.porting.loa_configurations.update( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", address={ "city": "Austin", "country_code": "US", "state": "TX", "street_address": "600 Congress Avenue", "zip_code": "78701", }, company_name="Telnyx", contact={ "email": "testing@telnyx.com", "phone_number": "+12003270001", }, logo={ "document_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e" }, name="My LOA Configuration", ) print(loa_configuration.data)
Returns: address (object), company_name (string), contact (object), created_at (date-time), id (uuid), logo (object), name (string), organization_id (string), record_type (string), updated_at (date-time)
Delete a specific LOA configuration.
DELETE /porting/loa_configurations/{id}
pythonclient.porting.loa_configurations.delete( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", )
Preview a specific LOA configuration.
GET /porting/loa_configurations/{id}/preview
pythonresponse = client.porting.loa_configurations.preview_1( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response) content = response.read() print(content)
List the reports generated about porting operations.
GET /porting/reports
pythonpage = client.porting.reports.list() page = page.data[0] print(page.id)
Returns: created_at (date-time), document_id (uuid), id (uuid), params (object), record_type (string), report_type (enum: export_porting_orders_csv), status (enum: pending, completed), updated_at (date-time)
Generate reports about porting operations.
POST /porting/reports
pythonreport = client.porting.reports.create( params={ "filters": {} }, report_type="export_porting_orders_csv", ) print(report.data)
Returns: created_at (date-time), document_id (uuid), id (uuid), params (object), record_type (string), report_type (enum: export_porting_orders_csv), status (enum: pending, completed), updated_at (date-time)
Retrieve a specific report generated.
GET /porting/reports/{id}
pythonreport = client.porting.reports.retrieve( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(report.data)
Returns: created_at (date-time), document_id (uuid), id (uuid), params (object), record_type (string), report_type (enum: export_porting_orders_csv), status (enum: pending, completed), updated_at (date-time)
List available carriers in the UK.
GET /porting/uk_carriers
pythonresponse = client.porting.list_uk_carriers() print(response.data)
Returns: alternative_cupids (arraystring]), created_at (date-time), cupid (string), id (uuid), name (string), record_type (string), updated_at (date-time)
Returns a list of your porting order.
GET /porting_orders
pythonpage = client.porting_orders.list() page = page.data[0] print(page.id)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Creates a new porting order object.
POST /porting_orders — Required: phone_numbers
Optional: customer_group_reference (string), customer_reference (string | null)
pythonporting_order = client.porting_orders.create( phone_numbers=["+13035550000", "+13035550001", "+13035550002"], ) print(porting_order.data)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Returns a list of all possible exception types for a porting order.
GET /porting_orders/exception_types
pythonresponse = client.porting_orders.retrieve_exception_types() print(response.data)
Returns: code (enum: ACCOUNT_NUMBER_MISMATCH, AUTH_PERSON_MISMATCH, BTN_ATN_MISMATCH, ENTITY_NAME_MISMATCH, FOC_EXPIRED, FOC_REJECTED, LOCATION_MISMATCH, LSR_PENDING, MAIN_BTN_PORTING, OSP_IRRESPONSIVE, OTHER, PASSCODE_PIN_INVALID, PHONE_NUMBER_HAS_SPECIAL_FEATURE, PHONE_NUMBER_MISMATCH, PHONE_NUMBER_NOT_PORTABLE, PORT_TYPE_INCORRECT, PORTING_ORDER_SPLIT_REQUIRED, POSTAL_CODE_MISMATCH, RATE_CENTER_NOT_PORTABLE, SV_CONFLICT, SV_UNKNOWN_FAILURE), description (string)
Returns a list of phone number configurations paginated.
GET /porting_orders/phone_number_configurations
pythonpage = client.porting_orders.phone_number_configurations.list() page = page.data[0] print(page.id)
Returns: created_at (date-time), id (uuid), porting_phone_number_id (uuid), record_type (string), updated_at (date-time), user_bundle_id (uuid)
Creates a list of phone number configurations.
POST /porting_orders/phone_number_configurations
pythonphone_number_configuration = client.porting_orders.phone_number_configurations.create() print(phone_number_configuration.data)
Returns: created_at (date-time), id (uuid), porting_phone_number_id (uuid), record_type (string), updated_at (date-time), user_bundle_id (uuid)
Retrieves the details of an existing porting order.
GET /porting_orders/{id}
pythonporting_order = client.porting_orders.retrieve( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(porting_order.data)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Edits the details of an existing porting order. Any or all of a porting orders attributes may be included in the resource object included in a PATCH request. If a request does not include all of the attributes for a resource, the system will interpret the missing attributes as if they were included with their current values.
PATCH /porting_orders/{id}
Optional: activation_settings (object), customer_group_reference (string), customer_reference (string), documents (object), end_user (object), messaging (object), misc (object), phone_number_configuration (object), requirement_group_id (uuid), requirements (arrayobject]), user_feedback (object), webhook_url (uri)
pythonporting_order = client.porting_orders.update( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(porting_order.data)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Deletes an existing porting order. This operation is restrict to porting orders in draft state.
DELETE /porting_orders/{id}
pythonclient.porting_orders.delete( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", )
Activate each number in a porting order asynchronously. This operation is limited to US FastPort orders only.
POST /porting_orders/{id}/actions/activate
pythonresponse = client.porting_orders.actions.activate( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: activate_at (date-time), activation_type (enum: scheduled, on-demand), activation_windows (arrayobject]), created_at (date-time), id (uuid), record_type (string), status (enum: created, in-process, completed, failed), updated_at (date-time)
POST /porting_orders/{id}/actions/cancel
pythonresponse = client.porting_orders.actions.cancel( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Confirm and submit your porting order.
POST /porting_orders/{id}/actions/confirm
pythonresponse = client.porting_orders.actions.confirm( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: activation_settings (object), additional_steps (arraystring]), created_at (date-time), customer_group_reference (string | null), customer_reference (string | null), description (string), documents (object), end_user (object), id (uuid), messaging (object), misc (object), old_service_provider_ocn (string), parent_support_key (string | null), phone_number_configuration (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), phone_numbers (arrayobject]), porting_phone_numbers_count (integer), record_type (string), requirements (arrayobject]), requirements_met (boolean), status (object), support_key (string | null), updated_at (date-time), user_feedback (object), user_id (uuid), webhook_url (uri)
Creates a sharing token for a porting order. The token can be used to share the porting order with non-Telnyx users.
POST /porting_orders/{id}/actions/share
pythonresponse = client.porting_orders.actions.share( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: created_at (date-time), expires_at (date-time), expires_in_seconds (integer), id (uuid), permissions (arraystring]), porting_order_id (uuid), record_type (string), token (string)
Returns a list of your porting activation jobs.
GET /porting_orders/{id}/activation_jobs
pythonpage = client.porting_orders.activation_jobs.list( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: activate_at (date-time), activation_type (enum: scheduled, on-demand), activation_windows (arrayobject]), created_at (date-time), id (uuid), record_type (string), status (enum: created, in-process, completed, failed), updated_at (date-time)
Returns a porting activation job.
GET /porting_orders/{id}/activation_jobs/{activationJobId}
pythonactivation_job = client.porting_orders.activation_jobs.retrieve( activation_job_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(activation_job.data)
Returns: activate_at (date-time), activation_type (enum: scheduled, on-demand), activation_windows (arrayobject]), created_at (date-time), id (uuid), record_type (string), status (enum: created, in-process, completed, failed), updated_at (date-time)
Updates the activation time of a porting activation job.
PATCH /porting_orders/{id}/activation_jobs/{activationJobId}
pythonactivation_job = client.porting_orders.activation_jobs.update( activation_job_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(activation_job.data)
Returns: activate_at (date-time), activation_type (enum: scheduled, on-demand), activation_windows (arrayobject]), created_at (date-time), id (uuid), record_type (string), status (enum: created, in-process, completed, failed), updated_at (date-time)
Returns a list of additional documents for a porting order.
GET /porting_orders/{id}/additional_documents
pythonpage = client.porting_orders.additional_documents.list( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: content_type (string), created_at (date-time), document_id (uuid), document_type (enum: loa, invoice, csr, other), filename (string), id (uuid), porting_order_id (uuid), record_type (string), updated_at (date-time)
Creates a list of additional documents for a porting order.
POST /porting_orders/{id}/additional_documents
pythonadditional_document = client.porting_orders.additional_documents.create( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(additional_document.data)
Returns: content_type (string), created_at (date-time), document_id (uuid), document_type (enum: loa, invoice, csr, other), filename (string), id (uuid), porting_order_id (uuid), record_type (string), updated_at (date-time)
Deletes an additional document for a porting order.
DELETE /porting_orders/{id}/additional_documents/{additional_document_id}
pythonclient.porting_orders.additional_documents.delete( additional_document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", )
Returns a list of allowed FOC dates for a porting order.
GET /porting_orders/{id}/allowed_foc_windows
pythonresponse = client.porting_orders.retrieve_allowed_foc_windows( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: ended_at (date-time), record_type (string), started_at (date-time)
Returns a list of all comments of a porting order.
GET /porting_orders/{id}/comments
pythonpage = client.porting_orders.comments.list( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: body (string), created_at (date-time), id (uuid), porting_order_id (uuid), record_type (string), user_type (enum: admin, user, system)
Creates a new comment for a porting order.
POST /porting_orders/{id}/comments
Optional: body (string)
pythoncomment = client.porting_orders.comments.create( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(comment.data)
Returns: body (string), created_at (date-time), id (uuid), porting_order_id (uuid), record_type (string), user_type (enum: admin, user, system)
GET /porting_orders/{id}/loa_template
pythonresponse = client.porting_orders.retrieve_loa_template( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response) content = response.read() print(content)
Returns a list of all requirements based on country/number type for this porting order.
GET /porting_orders/{id}/requirements
pythonpage = client.porting_orders.retrieve_requirements( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.field_type)
Returns: field_type (enum: document, textual), field_value (string), record_type (string), requirement_status (string), requirement_type (object)
GET /porting_orders/{id}/sub_request
pythonresponse = client.porting_orders.retrieve_sub_request( "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: port_request_id (string), sub_request_id (string)
Returns a list of verification codes for a porting order.
GET /porting_orders/{id}/verification_codes
pythonpage = client.porting_orders.verification_codes.list( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: created_at (date-time), id (uuid), phone_number (string), porting_order_id (uuid), record_type (string), updated_at (date-time), verified (boolean)
Send the verification code for all porting phone numbers.
POST /porting_orders/{id}/verification_codes/send
pythonclient.porting_orders.verification_codes.send( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", )
Verifies the verification code for a list of phone numbers.
POST /porting_orders/{id}/verification_codes/verify
pythonresponse = client.porting_orders.verification_codes.verify( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(response.data)
Returns: created_at (date-time), id (uuid), phone_number (string), porting_order_id (uuid), record_type (string), updated_at (date-time), verified (boolean)
Returns a list of action requirements for a specific porting order.
GET /porting_orders/{porting_order_id}/action_requirements
pythonpage = client.porting_orders.action_requirements.list( porting_order_id="550e8400-e29b-41d4-a716-446655440000", ) page = page.data[0] print(page.id)
Returns: action_type (string), action_url (string | null), cancel_reason (string | null), created_at (date-time), id (string), porting_order_id (string), record_type (enum: porting_action_requirement), requirement_type_id (string), status (enum: created, pending, completed, cancelled, failed), updated_at (date-time)
Initiates a specific action requirement for a porting order.
POST /porting_orders/{porting_order_id}/action_requirements/{id}/initiate
pythonresponse = client.porting_orders.action_requirements.initiate( id="550e8400-e29b-41d4-a716-446655440000", porting_order_id="550e8400-e29b-41d4-a716-446655440000", params={ "first_name": "John", "last_name": "Doe", }, ) print(response.data)
Returns: action_type (string), action_url (string | null), cancel_reason (string | null), created_at (date-time), id (string), porting_order_id (string), record_type (enum: porting_action_requirement), requirement_type_id (string), status (enum: created, pending, completed, cancelled, failed), updated_at (date-time)
Returns a list of all associated phone numbers for a porting order. Associated phone numbers are used for partial porting in GB to specify which phone numbers should be kept or disconnected.
GET /porting_orders/{porting_order_id}/associated_phone_numbers
pythonpage = client.porting_orders.associated_phone_numbers.list( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: action (enum: keep, disconnect), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), porting_order_id (uuid), record_type (string), updated_at (date-time)
Creates a new associated phone number for a porting order. This is used for partial porting in GB to specify which phone numbers should be kept or disconnected.
POST /porting_orders/{porting_order_id}/associated_phone_numbers
pythonassociated_phone_number = client.porting_orders.associated_phone_numbers.create( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", action="keep", phone_number_range={}, ) print(associated_phone_number.data)
Returns: action (enum: keep, disconnect), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), porting_order_id (uuid), record_type (string), updated_at (date-time)
Deletes an associated phone number from a porting order.
DELETE /porting_orders/{porting_order_id}/associated_phone_numbers/{id}
pythonassociated_phone_number = client.porting_orders.associated_phone_numbers.delete( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(associated_phone_number.data)
Returns: action (enum: keep, disconnect), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), porting_order_id (uuid), record_type (string), updated_at (date-time)
Returns a list of all phone number blocks of a porting order.
GET /porting_orders/{porting_order_id}/phone_number_blocks
pythonpage = client.porting_orders.phone_number_blocks.list( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: activation_ranges (arrayobject]), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), record_type (string), updated_at (date-time)
Creates a new phone number block.
POST /porting_orders/{porting_order_id}/phone_number_blocks
pythonphone_number_block = client.porting_orders.phone_number_blocks.create( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", activation_ranges=[{ "end_at": "+4930244999910", "start_at": "+4930244999901", }], phone_number_range={ "end_at": "+4930244999910", "start_at": "+4930244999901", }, ) print(phone_number_block.data)
Returns: activation_ranges (arrayobject]), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), record_type (string), updated_at (date-time)
Deletes a phone number block.
DELETE /porting_orders/{porting_order_id}/phone_number_blocks/{id}
pythonphone_number_block = client.porting_orders.phone_number_blocks.delete( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(phone_number_block.data)
Returns: activation_ranges (arrayobject]), country_code (string), created_at (date-time), id (uuid), phone_number_range (object), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), record_type (string), updated_at (date-time)
Returns a list of all phone number extensions of a porting order.
GET /porting_orders/{porting_order_id}/phone_number_extensions
pythonpage = client.porting_orders.phone_number_extensions.list( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) page = page.data[0] print(page.id)
Returns: activation_ranges (arrayobject]), created_at (date-time), extension_range (object), id (uuid), porting_phone_number_id (uuid), record_type (string), updated_at (date-time)
Creates a new phone number extension.
POST /porting_orders/{porting_order_id}/phone_number_extensions
pythonphone_number_extension = client.porting_orders.phone_number_extensions.create( porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", activation_ranges=[{ "end_at": 10, "start_at": 1, }], extension_range={ "end_at": 10, "start_at": 1, }, porting_phone_number_id="f24151b6-3389-41d3-8747-7dd8c681e5e2", ) print(phone_number_extension.data)
Returns: activation_ranges (arrayobject]), created_at (date-time), extension_range (object), id (uuid), porting_phone_number_id (uuid), record_type (string), updated_at (date-time)
Deletes a phone number extension.
DELETE /porting_orders/{porting_order_id}/phone_number_extensions/{id}
pythonphone_number_extension = client.porting_orders.phone_number_extensions.delete( id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", porting_order_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", ) print(phone_number_extension.data)
Returns: activation_ranges (arrayobject]), created_at (date-time), extension_range (object), id (uuid), porting_phone_number_id (uuid), record_type (string), updated_at (date-time)
Returns a list of your porting phone numbers.
GET /porting_phone_numbers
pythonpage = client.porting_phone_numbers.list() page = page.data[0] print(page.porting_order_id)
Returns: activation_status (enum: New, Pending, Conflict, Cancel Pending, Failed, Concurred, Activate RDY, Disconnect Pending, Concurrence Sent, Old, Sending, Active, Cancelled), phone_number (string), phone_number_type (enum: landline, local, mobile, national, shared_cost, toll_free), portability_status (enum: pending, confirmed, provisional), porting_order_id (uuid), porting_order_status (enum: draft, in-process, submitted, exception, foc-date-confirmed, cancel-pending, ported, cancelled), record_type (string), requirements_status (enum: requirement-info-pending, requirement-info-under-review, requirement-info-exception, approved), support_key (string)
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 18,014 | 22,817 | +27% | 1 | 1 | 0% | 3,852 | 13,403 | +248% | 0 | 0 | — |
case-02 | fail→pass | 27,577 | 11,440 | -59% | 1 | 1 | 0% | 1,875 | 13,399 | +615% | 0 | 0 | — |
case-03 | fail→fail | 14,921 | 9,533 | -36% | 1 | 1 | 0% | 2,334 | 13,639 | +484% | 0 | 0 | — |
case-04 | pass→pass | 42,618 | 11,637 | -73% | 1 | 1 | 0% | 2,013 | 14,071 | +599% | 0 | 0 | — |
case-05 | pass→pass | 9,013 | 8,212 | -9% | 1 | 1 | 0% | 1,715 | 13,304 | +676% | 0 | 0 | — |
case-06 | pass→pass | 13,975 | 9,004 | -36% | 1 | 1 | 0% | 2,825 | 13,438 | +376% | 0 | 0 | — |
case-07 | fail→pass | 11,569 | 4,567 | -61% | 1 | 1 | 0% | 1,432 | 12,577 | +778% | 0 | 0 | — |
case-08 | fail→pass | 9,333 | 5,106 | -45% | 1 | 1 | 0% | 1,653 | 12,713 | +669% | 0 | 0 | — |
case-09 | fail→pass | 6,617 | 3,965 | -40% | 1 | 1 | 0% | 1,349 | 12,481 | +825% | 0 | 0 | — |
case-10 | fail→pass | 9,491 | 4,967 | -48% | 1 | 1 | 0% | 1,841 | 12,703 | +590% | 0 | 0 | — |
case-11 | fail→pass | 15,158 | 8,157 | -46% | 1 | 1 | 0% | 2,971 | 13,351 | +349% | 0 | 0 | — |
case-12 | fail→pass | 14,636 | 5,857 | -60% | 1 | 1 | 0% | 2,293 | 12,929 | +464% | 0 | 0 | — |
case-13 | fail→pass | 16,198 | 6,502 | -60% | 1 | 1 | 0% | 2,396 | 12,970 | +441% | 0 | 0 | — |
case-14 | fail→pass | 14,278 | 5,527 | -61% | 1 | 1 | 0% | 2,841 | 12,818 | +351% | 0 | 0 | — |
case-15 | fail→pass | 29,037 | 4,656 | -84% | 1 | 1 | 0% | 2,522 | 12,614 | +400% | 0 | 0 | — |
case-16 | fail→pass | 13,499 | 5,895 | -56% | 1 | 1 | 0% | 2,242 | 13,090 | +484% | 0 | 0 | — |
case-17 | fail→pass | 15,098 | 5,090 | -66% | 1 | 1 | 0% | 2,145 | 12,806 | +497% | 0 | 0 | — |
case-18 | fail→pass | 11,131 | 5,068 | -54% | 1 | 1 | 0% | 2,277 | 12,791 | +462% | 0 | 0 | — |
case-19 | fail→pass | 22,649 | 5,910 | -74% | 1 | 1 | 0% | 2,902 | 12,906 | +345% | 0 | 0 | — |
case-20 | fail→pass | 16,538 | 5,874 | -64% | 1 | 1 | 0% | 3,426 | 12,912 | +277% | 0 | 0 | — |
case-21 | fail→pass | 13,873 | 6,824 | -51% | 1 | 1 | 0% | 2,934 | 13,196 | +350% | 0 | 0 | — |
case-22 | fail→pass | 18,627 | 6,216 | -67% | 1 | 1 | 0% | 2,724 | 13,144 | +383% | 0 | 0 | — |
case-23 | fail→pass | 14,652 | 6,184 | -58% | 1 | 1 | 0% | 2,875 | 13,009 | +352% | 0 | 0 | — |
case-24 | fail→pass | 17,585 | 5,817 | -67% | 1 | 1 | 0% | 3,360 | 12,998 | +287% | 0 | 0 | — |
case-25 | fail→pass | 17,997 | 6,245 | -65% | 1 | 1 | 0% | 2,557 | 13,132 | +414% | 0 | 0 | — |
case-26 | fail→pass | 6,505 | 3,544 | -46% | 1 | 1 | 0% | 1,305 | 12,328 | +845% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted. The headline lift of +85 percentage points is the difference between those two pass rates over the 26 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.