wavix-python-sdk 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wavix/__init__.py +801 -0
- wavix/_default_clients.py +32 -0
- wavix/api_keys/__init__.py +4 -0
- wavix/api_keys/client.py +764 -0
- wavix/api_keys/raw_client.py +1191 -0
- wavix/billing/__init__.py +41 -0
- wavix/billing/client.py +82 -0
- wavix/billing/invoices/__init__.py +34 -0
- wavix/billing/invoices/client.py +203 -0
- wavix/billing/invoices/raw_client.py +302 -0
- wavix/billing/invoices/types/__init__.py +34 -0
- wavix/billing/invoices/types/list_invoices_response.py +31 -0
- wavix/billing/raw_client.py +13 -0
- wavix/billing/transactions/__init__.py +34 -0
- wavix/billing/transactions/client.py +209 -0
- wavix/billing/transactions/raw_client.py +253 -0
- wavix/billing/transactions/types/__init__.py +34 -0
- wavix/billing/transactions/types/list_transactions_response.py +31 -0
- wavix/buy/__init__.py +61 -0
- wavix/buy/cities/__init__.py +34 -0
- wavix/buy/cities/client.py +134 -0
- wavix/buy/cities/raw_client.py +201 -0
- wavix/buy/cities/types/__init__.py +34 -0
- wavix/buy/cities/types/list_cities_response.py +23 -0
- wavix/buy/client.py +139 -0
- wavix/buy/countries/__init__.py +34 -0
- wavix/buy/countries/client.py +116 -0
- wavix/buy/countries/raw_client.py +144 -0
- wavix/buy/countries/types/__init__.py +34 -0
- wavix/buy/countries/types/list_countries_response.py +23 -0
- wavix/buy/numbers/__init__.py +34 -0
- wavix/buy/numbers/client.py +168 -0
- wavix/buy/numbers/raw_client.py +227 -0
- wavix/buy/numbers/types/__init__.py +34 -0
- wavix/buy/numbers/types/list_numbers_response.py +26 -0
- wavix/buy/raw_client.py +13 -0
- wavix/buy/region_cities/__init__.py +34 -0
- wavix/buy/region_cities/client.py +142 -0
- wavix/buy/region_cities/raw_client.py +207 -0
- wavix/buy/region_cities/types/__init__.py +34 -0
- wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
- wavix/buy/regions/__init__.py +34 -0
- wavix/buy/regions/client.py +132 -0
- wavix/buy/regions/raw_client.py +222 -0
- wavix/buy/regions/types/__init__.py +34 -0
- wavix/buy/regions/types/list_regions_response.py +23 -0
- wavix/call_control/__init__.py +40 -0
- wavix/call_control/audio/__init__.py +4 -0
- wavix/call_control/audio/client.py +195 -0
- wavix/call_control/audio/raw_client.py +333 -0
- wavix/call_control/client.py +796 -0
- wavix/call_control/raw_client.py +1224 -0
- wavix/call_control/streams/__init__.py +4 -0
- wavix/call_control/streams/client.py +250 -0
- wavix/call_control/streams/raw_client.py +325 -0
- wavix/call_control/types/__init__.py +38 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
- wavix/call_recording/__init__.py +4 -0
- wavix/call_recording/client.py +430 -0
- wavix/call_recording/raw_client.py +726 -0
- wavix/call_webhooks/__init__.py +37 -0
- wavix/call_webhooks/client.py +281 -0
- wavix/call_webhooks/raw_client.py +529 -0
- wavix/call_webhooks/types/__init__.py +38 -0
- wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
- wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
- wavix/cart/__init__.py +38 -0
- wavix/cart/client.py +327 -0
- wavix/cart/raw_client.py +629 -0
- wavix/cart/types/__init__.py +40 -0
- wavix/cart/types/checkout_cart_response.py +22 -0
- wavix/cart/types/get_cart_response.py +29 -0
- wavix/cart/types/remove_cart_response.py +22 -0
- wavix/cdrs/__init__.py +39 -0
- wavix/cdrs/client.py +968 -0
- wavix/cdrs/raw_client.py +1176 -0
- wavix/cdrs/transcription/__init__.py +4 -0
- wavix/cdrs/transcription/client.py +112 -0
- wavix/cdrs/transcription/raw_client.py +156 -0
- wavix/cdrs/types/__init__.py +38 -0
- wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
- wavix/cdrs/types/cdr_search_request_type.py +5 -0
- wavix/client.py +578 -0
- wavix/core/__init__.py +127 -0
- wavix/core/api_error.py +23 -0
- wavix/core/client_wrapper.py +119 -0
- wavix/core/datetime_utils.py +70 -0
- wavix/core/file.py +67 -0
- wavix/core/force_multipart.py +18 -0
- wavix/core/http_client.py +839 -0
- wavix/core/http_response.py +59 -0
- wavix/core/http_sse/__init__.py +42 -0
- wavix/core/http_sse/_api.py +170 -0
- wavix/core/http_sse/_decoders.py +61 -0
- wavix/core/http_sse/_exceptions.py +7 -0
- wavix/core/http_sse/_models.py +17 -0
- wavix/core/jsonable_encoder.py +120 -0
- wavix/core/logging.py +107 -0
- wavix/core/parse_error.py +36 -0
- wavix/core/pydantic_utilities.py +508 -0
- wavix/core/query_encoder.py +58 -0
- wavix/core/remove_none_from_dict.py +11 -0
- wavix/core/request_options.py +35 -0
- wavix/core/serialization.py +347 -0
- wavix/environment.py +7 -0
- wavix/errors/__init__.py +56 -0
- wavix/errors/bad_request_error.py +10 -0
- wavix/errors/forbidden_error.py +10 -0
- wavix/errors/not_found_error.py +10 -0
- wavix/errors/service_unavailable_error.py +11 -0
- wavix/errors/too_many_requests_error.py +11 -0
- wavix/errors/unauthorized_error.py +11 -0
- wavix/errors/unprocessable_entity_error.py +10 -0
- wavix/link_shortener/__init__.py +34 -0
- wavix/link_shortener/client.py +194 -0
- wavix/link_shortener/metrics/__init__.py +4 -0
- wavix/link_shortener/metrics/client.py +198 -0
- wavix/link_shortener/metrics/raw_client.py +218 -0
- wavix/link_shortener/raw_client.py +265 -0
- wavix/number_validator/__init__.py +35 -0
- wavix/number_validator/client.py +271 -0
- wavix/number_validator/raw_client.py +383 -0
- wavix/number_validator/results/__init__.py +4 -0
- wavix/number_validator/results/client.py +114 -0
- wavix/number_validator/results/raw_client.py +156 -0
- wavix/number_validator/types/__init__.py +34 -0
- wavix/number_validator/types/get_number_validator_response.py +112 -0
- wavix/numbers/__init__.py +39 -0
- wavix/numbers/client.py +689 -0
- wavix/numbers/papers/__init__.py +4 -0
- wavix/numbers/papers/client.py +155 -0
- wavix/numbers/papers/raw_client.py +208 -0
- wavix/numbers/raw_client.py +1000 -0
- wavix/numbers/types/__init__.py +38 -0
- wavix/numbers/types/bulk_update_numbers_response.py +23 -0
- wavix/numbers/types/delete_numbers_response.py +22 -0
- wavix/profile/__init__.py +41 -0
- wavix/profile/client.py +308 -0
- wavix/profile/config/__init__.py +34 -0
- wavix/profile/config/client.py +100 -0
- wavix/profile/config/raw_client.py +124 -0
- wavix/profile/config/types/__init__.py +34 -0
- wavix/profile/config/types/get_config_response.py +25 -0
- wavix/profile/raw_client.py +360 -0
- wavix/profile/types/__init__.py +38 -0
- wavix/profile/types/profile_update_request_company_info.py +48 -0
- wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
- wavix/py.typed +0 -0
- wavix/sip_trunks/__init__.py +4 -0
- wavix/sip_trunks/client.py +927 -0
- wavix/sip_trunks/raw_client.py +1324 -0
- wavix/sms_and_mms/__init__.py +66 -0
- wavix/sms_and_mms/client.py +101 -0
- wavix/sms_and_mms/messages/__init__.py +49 -0
- wavix/sms_and_mms/messages/client.py +625 -0
- wavix/sms_and_mms/messages/raw_client.py +793 -0
- wavix/sms_and_mms/messages/types/__init__.py +47 -0
- wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
- wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
- wavix/sms_and_mms/opt_outs/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/client.py +277 -0
- wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
- wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
- wavix/sms_and_mms/raw_client.py +13 -0
- wavix/sms_and_mms/sender_ids/__init__.py +38 -0
- wavix/sms_and_mms/sender_ids/client.py +391 -0
- wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
- wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
- wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
- wavix/speech_analytics/__init__.py +52 -0
- wavix/speech_analytics/client.py +372 -0
- wavix/speech_analytics/file/__init__.py +4 -0
- wavix/speech_analytics/file/client.py +114 -0
- wavix/speech_analytics/file/raw_client.py +148 -0
- wavix/speech_analytics/raw_client.py +527 -0
- wavix/speech_analytics/types/__init__.py +47 -0
- wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
- wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
- wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
- wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
- wavix/sub_accounts/__init__.py +52 -0
- wavix/sub_accounts/client.py +442 -0
- wavix/sub_accounts/raw_client.py +775 -0
- wavix/sub_accounts/transactions/__init__.py +4 -0
- wavix/sub_accounts/transactions/client.py +198 -0
- wavix/sub_accounts/transactions/raw_client.py +265 -0
- wavix/sub_accounts/types/__init__.py +47 -0
- wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
- wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
- wavix/ten_dlc/__init__.py +167 -0
- wavix/ten_dlc/brand_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/client.py +244 -0
- wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
- wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
- wavix/ten_dlc/brand_evidence/__init__.py +37 -0
- wavix/ten_dlc/brand_evidence/client.py +365 -0
- wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
- wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
- wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
- wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
- wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
- wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
- wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
- wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
- wavix/ten_dlc/brand_vettings/__init__.py +4 -0
- wavix/ten_dlc/brand_vettings/client.py +325 -0
- wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
- wavix/ten_dlc/brands/__init__.py +85 -0
- wavix/ten_dlc/brands/client.py +870 -0
- wavix/ten_dlc/brands/raw_client.py +1263 -0
- wavix/ten_dlc/brands/types/__init__.py +83 -0
- wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
- wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
- wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
- wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
- wavix/ten_dlc/campaign_numbers/client.py +304 -0
- wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
- wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
- wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
- wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaigns/__init__.py +64 -0
- wavix/ten_dlc/campaigns/client.py +1493 -0
- wavix/ten_dlc/campaigns/raw_client.py +1840 -0
- wavix/ten_dlc/campaigns/types/__init__.py +62 -0
- wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
- wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
- wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
- wavix/ten_dlc/client.py +196 -0
- wavix/ten_dlc/raw_client.py +13 -0
- wavix/ten_dlc/subscriptions/__init__.py +37 -0
- wavix/ten_dlc/subscriptions/client.py +271 -0
- wavix/ten_dlc/subscriptions/raw_client.py +398 -0
- wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
- wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
- wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
- wavix/two_fa/__init__.py +56 -0
- wavix/two_fa/client.py +101 -0
- wavix/two_fa/events/__init__.py +4 -0
- wavix/two_fa/events/client.py +114 -0
- wavix/two_fa/events/raw_client.py +156 -0
- wavix/two_fa/raw_client.py +13 -0
- wavix/two_fa/sessions/__init__.py +4 -0
- wavix/two_fa/sessions/client.py +142 -0
- wavix/two_fa/sessions/raw_client.py +200 -0
- wavix/two_fa/verification/__init__.py +49 -0
- wavix/two_fa/verification/client.py +395 -0
- wavix/two_fa/verification/raw_client.py +664 -0
- wavix/two_fa/verification/types/__init__.py +47 -0
- wavix/two_fa/verification/types/check_verification_response.py +22 -0
- wavix/two_fa/verification/types/create_verification_response.py +51 -0
- wavix/two_fa/verification/types/resend_verification_response.py +38 -0
- wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
- wavix/types/__init__.py +637 -0
- wavix/types/account_error_response.py +31 -0
- wavix/types/account_limits.py +32 -0
- wavix/types/allowed_i_ps.py +7 -0
- wavix/types/allowed_i_ps_item.py +27 -0
- wavix/types/api_key.py +138 -0
- wavix/types/api_key_calls_scope_permission.py +30 -0
- wavix/types/api_key_calls_scope_permission_allow.py +5 -0
- wavix/types/api_key_scope_permission.py +30 -0
- wavix/types/api_key_scope_permission_allow.py +5 -0
- wavix/types/available_number.py +97 -0
- wavix/types/available_number_list_response.py +26 -0
- wavix/types/bad_request_error_body.py +27 -0
- wavix/types/billing_transaction_list_response.py +31 -0
- wavix/types/brand_status_updated_webhook.py +28 -0
- wavix/types/brand_status_updated_webhook_status.py +7 -0
- wavix/types/call.py +92 -0
- wavix/types/call_control_validation_error_response.py +34 -0
- wavix/types/call_create_response.py +92 -0
- wavix/types/call_create_response_event_type.py +18 -0
- wavix/types/call_direction.py +5 -0
- wavix/types/call_disposition.py +5 -0
- wavix/types/call_event_type.py +18 -0
- wavix/types/call_list_response.py +28 -0
- wavix/types/call_recording_list_response.py +28 -0
- wavix/types/call_response.py +24 -0
- wavix/types/call_status_webhook.py +70 -0
- wavix/types/call_status_webhook_direction.py +5 -0
- wavix/types/call_stream_channel.py +5 -0
- wavix/types/call_stream_response.py +27 -0
- wavix/types/call_stream_type.py +5 -0
- wavix/types/call_webhook.py +37 -0
- wavix/types/call_webhook_event_type.py +5 -0
- wavix/types/call_webhook_list_response.py +10 -0
- wavix/types/call_webhook_list_response_item.py +28 -0
- wavix/types/call_webhook_list_response_item_event_type.py +5 -0
- wavix/types/campaign_status_updated_webhook.py +41 -0
- wavix/types/campaign_status_updated_webhook_status.py +7 -0
- wavix/types/cart_response.py +29 -0
- wavix/types/cdr.py +97 -0
- wavix/types/cdr_list_response.py +26 -0
- wavix/types/cdr_response.py +104 -0
- wavix/types/cdr_transcription_completed_webhook.py +28 -0
- wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
- wavix/types/cdr_transcription_response.py +74 -0
- wavix/types/cdr_transcription_search_response.py +26 -0
- wavix/types/cdr_with_transcription.py +97 -0
- wavix/types/city.py +32 -0
- wavix/types/city_list_response.py +23 -0
- wavix/types/country.py +32 -0
- wavix/types/country_has_no_regions_error_response.py +27 -0
- wavix/types/country_list_response.py +23 -0
- wavix/types/document_type.py +32 -0
- wavix/types/document_type_id.py +7 -0
- wavix/types/file_transcript_response.py +30 -0
- wavix/types/file_transcript_turn.py +46 -0
- wavix/types/file_transcription_completed_webhook.py +32 -0
- wavix/types/file_transcription_response.py +77 -0
- wavix/types/file_transcription_response_language.py +5 -0
- wavix/types/file_transcription_response_status.py +5 -0
- wavix/types/financial_transaction.py +57 -0
- wavix/types/forbidden_error_response.py +27 -0
- wavix/types/inbound_call_destination.py +53 -0
- wavix/types/inbound_call_transport.py +6 -0
- wavix/types/inbound_message.py +46 -0
- wavix/types/invalid_recording.py +31 -0
- wavix/types/invoice.py +42 -0
- wavix/types/invoice_list_response.py +31 -0
- wavix/types/list_brand_evidence_response.py +23 -0
- wavix/types/list_sessions_response_item.py +58 -0
- wavix/types/message.py +103 -0
- wavix/types/message_body.py +29 -0
- wavix/types/message_create_request.py +46 -0
- wavix/types/message_delivery_status.py +8 -0
- wavix/types/message_list_response.py +26 -0
- wavix/types/message_response.py +97 -0
- wavix/types/messages_delivery_report.py +81 -0
- wavix/types/not_found_error_body.py +27 -0
- wavix/types/not_found_error_response.py +27 -0
- wavix/types/number.py +160 -0
- wavix/types/number_destination.py +38 -0
- wavix/types/number_document.py +58 -0
- wavix/types/number_list_response.py +32 -0
- wavix/types/number_status_updated_webhook.py +38 -0
- wavix/types/number_status_updated_webhook_status.py +5 -0
- wavix/types/number_validator_create_bulk_response.py +10 -0
- wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
- wavix/types/on_call_event_payload.py +34 -0
- wavix/types/on_call_event_payload_type.py +5 -0
- wavix/types/opt_out.py +27 -0
- wavix/types/opt_out_item.py +38 -0
- wavix/types/opt_outs_list_response.py +26 -0
- wavix/types/pagination.py +37 -0
- wavix/types/phone_lookup_details.py +32 -0
- wavix/types/phone_number_validation_type.py +5 -0
- wavix/types/phone_validation_batch_response.py +38 -0
- wavix/types/phone_validation_batch_result_response.py +41 -0
- wavix/types/phone_validation_response.py +112 -0
- wavix/types/phone_validation_result_response.py +115 -0
- wavix/types/profile_config_response.py +25 -0
- wavix/types/profile_response.py +79 -0
- wavix/types/profile_response_company_info.py +53 -0
- wavix/types/profile_response_company_info_country.py +31 -0
- wavix/types/profile_response_company_info_industry.py +22 -0
- wavix/types/profile_response_default_destinations_item.py +27 -0
- wavix/types/record_not_found_error_response.py +27 -0
- wavix/types/recording.py +57 -0
- wavix/types/recording_deleted_error_response.py +38 -0
- wavix/types/region.py +31 -0
- wavix/types/region_list_response.py +23 -0
- wavix/types/send_messages_response.py +100 -0
- wavix/types/sender_id.py +48 -0
- wavix/types/sender_id_details.py +44 -0
- wavix/types/sender_id_list_response.py +23 -0
- wavix/types/sender_id_response.py +48 -0
- wavix/types/sender_id_response_type.py +5 -0
- wavix/types/sender_id_type.py +5 -0
- wavix/types/short_link_metrics_item.py +69 -0
- wavix/types/short_link_metrics_response.py +26 -0
- wavix/types/short_link_response.py +22 -0
- wavix/types/sip_trunk_create_request.py +132 -0
- wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
- wavix/types/sip_trunk_create_request_host_request.py +26 -0
- wavix/types/sip_trunk_list_response.py +26 -0
- wavix/types/sip_trunk_response.py +145 -0
- wavix/types/sip_trunk_summary.py +114 -0
- wavix/types/sip_trunk_summary_host_request.py +31 -0
- wavix/types/sub_accounts_list_response.py +26 -0
- wavix/types/sub_accounts_transactions_list_response.py +30 -0
- wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
- wavix/types/sub_organization_response.py +59 -0
- wavix/types/sub_organization_response_default_destinations.py +31 -0
- wavix/types/sub_organization_response_status.py +5 -0
- wavix/types/submit_file_transcription_response.py +32 -0
- wavix/types/success_response.py +22 -0
- wavix/types/tcr_error_message.py +27 -0
- wavix/types/tcr_feedback.py +23 -0
- wavix/types/tcr_feedback_category.py +47 -0
- wavix/types/ten_dlc_brand.py +143 -0
- wavix/types/ten_dlc_brand_appeal.py +54 -0
- wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
- wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
- wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
- wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
- wavix/types/ten_dlc_brand_create_request.py +8 -0
- wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
- wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
- wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
- wavix/types/ten_dlc_brand_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_evidence.py +38 -0
- wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
- wavix/types/ten_dlc_brand_list_response.py +33 -0
- wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_brand_qualification_result.py +33 -0
- wavix/types/ten_dlc_brand_status.py +7 -0
- wavix/types/ten_dlc_brand_vetting.py +71 -0
- wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
- wavix/types/ten_dlc_campaign.py +211 -0
- wavix/types/ten_dlc_campaign_list_response.py +33 -0
- wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
- wavix/types/ten_dlc_campaign_number.py +27 -0
- wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
- wavix/types/ten_dlc_event_subscription.py +31 -0
- wavix/types/ten_dlcmno_metadata.py +101 -0
- wavix/types/transaction_status.py +5 -0
- wavix/types/transaction_type.py +50 -0
- wavix/types/transcript_turn.py +46 -0
- wavix/types/transcription_filter.py +35 -0
- wavix/types/transcription_filter_agent.py +36 -0
- wavix/types/transcription_filter_any.py +36 -0
- wavix/types/transcription_filter_client.py +36 -0
- wavix/types/transcription_language.py +5 -0
- wavix/types/transcription_reference.py +29 -0
- wavix/types/transcription_status.py +5 -0
- wavix/types/tts_language.py +5 -0
- wavix/types/tts_voice_id.py +25 -0
- wavix/types/two_factor_verification_check_response.py +22 -0
- wavix/types/two_factor_verification_event.py +47 -0
- wavix/types/two_factor_verification_resend_response.py +38 -0
- wavix/types/two_factor_verification_response.py +51 -0
- wavix/types/unauthorized_error_response.py +32 -0
- wavix/types/unprocessable_entity_error_body.py +27 -0
- wavix/types/validation_error_response.py +27 -0
- wavix/types/voice_campaign_create_request.py +20 -0
- wavix/types/voice_campaign_response.py +41 -0
- wavix/types/voice_campaigns_create_response.py +20 -0
- wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
- wavix/types/voice_campaigns_get_response.py +20 -0
- wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
- wavix/types/web_rtc_token.py +43 -0
- wavix/types/web_rtc_token_response.py +44 -0
- wavix/types/web_rtc_tokens_list_response.py +30 -0
- wavix/version.py +3 -0
- wavix/voice_campaigns/__init__.py +4 -0
- wavix/voice_campaigns/client.py +197 -0
- wavix/voice_campaigns/raw_client.py +332 -0
- wavix/webrtc/__init__.py +34 -0
- wavix/webrtc/client.py +63 -0
- wavix/webrtc/raw_client.py +13 -0
- wavix/webrtc/tokens/__init__.py +4 -0
- wavix/webrtc/tokens/client.py +432 -0
- wavix/webrtc/tokens/raw_client.py +869 -0
- wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
- wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
- wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
- wavix_python_sdk-1.0.0.dist-info/WHEEL +4 -0
wavix/api_keys/client.py
ADDED
|
@@ -0,0 +1,764 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
6
|
+
from ..core.request_options import RequestOptions
|
|
7
|
+
from ..types.api_key import ApiKey
|
|
8
|
+
from ..types.api_key_calls_scope_permission import ApiKeyCallsScopePermission
|
|
9
|
+
from ..types.api_key_scope_permission import ApiKeyScopePermission
|
|
10
|
+
from ..types.success_response import SuccessResponse
|
|
11
|
+
from .raw_client import AsyncRawApiKeysClient, RawApiKeysClient
|
|
12
|
+
|
|
13
|
+
# this is used as the default value for optional parameters
|
|
14
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ApiKeysClient:
|
|
18
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
19
|
+
self._raw_client = RawApiKeysClient(client_wrapper=client_wrapper)
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def with_raw_response(self) -> RawApiKeysClient:
|
|
23
|
+
"""
|
|
24
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
25
|
+
|
|
26
|
+
Returns
|
|
27
|
+
-------
|
|
28
|
+
RawApiKeysClient
|
|
29
|
+
"""
|
|
30
|
+
return self._raw_client
|
|
31
|
+
|
|
32
|
+
def list(
|
|
33
|
+
self, *, label: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
|
|
34
|
+
) -> typing.List[ApiKey]:
|
|
35
|
+
"""
|
|
36
|
+
Returns the API keys belonging to the authenticated account.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
label : typing.Optional[str]
|
|
41
|
+
Filters API keys by `label`. Matches partial values.
|
|
42
|
+
|
|
43
|
+
request_options : typing.Optional[RequestOptions]
|
|
44
|
+
Request-specific configuration.
|
|
45
|
+
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
typing.List[ApiKey]
|
|
49
|
+
Returns the list of API keys.
|
|
50
|
+
|
|
51
|
+
Examples
|
|
52
|
+
--------
|
|
53
|
+
from wavix import Wavix
|
|
54
|
+
|
|
55
|
+
client = Wavix(
|
|
56
|
+
token="YOUR_TOKEN",
|
|
57
|
+
)
|
|
58
|
+
client.api_keys.list(
|
|
59
|
+
label="production",
|
|
60
|
+
)
|
|
61
|
+
"""
|
|
62
|
+
_response = self._raw_client.list(label=label, request_options=request_options)
|
|
63
|
+
return _response.data
|
|
64
|
+
|
|
65
|
+
def create(
|
|
66
|
+
self,
|
|
67
|
+
*,
|
|
68
|
+
label: str,
|
|
69
|
+
active: typing.Optional[bool] = OMIT,
|
|
70
|
+
restricted: typing.Optional[bool] = OMIT,
|
|
71
|
+
permitted_ips: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
72
|
+
scopes_enabled: typing.Optional[bool] = OMIT,
|
|
73
|
+
numbers: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
74
|
+
trunks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
75
|
+
calls: typing.Optional[ApiKeyCallsScopePermission] = OMIT,
|
|
76
|
+
messages: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
77
|
+
recordings: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
78
|
+
campaigns: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
79
|
+
two_fa: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
80
|
+
validator: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
81
|
+
webhooks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
82
|
+
embeddable: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
83
|
+
billing: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
84
|
+
account: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
85
|
+
subaccounts: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
86
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
87
|
+
) -> ApiKey:
|
|
88
|
+
"""
|
|
89
|
+
Creates an API key for the authenticated account. Restrict access by listing permitted IP addresses in `permitted_ips`.
|
|
90
|
+
|
|
91
|
+
Parameters
|
|
92
|
+
----------
|
|
93
|
+
label : str
|
|
94
|
+
API key label.
|
|
95
|
+
|
|
96
|
+
active : typing.Optional[bool]
|
|
97
|
+
Indicates whether the API key should be activated upon creation.
|
|
98
|
+
|
|
99
|
+
restricted : typing.Optional[bool]
|
|
100
|
+
Indicates whether to restrict API key access by IP address. When enabled, only requests from IP addresses listed in `permitted_ips` are allowed.
|
|
101
|
+
|
|
102
|
+
permitted_ips : typing.Optional[typing.Sequence[str]]
|
|
103
|
+
List of permitted IP addresses for this API key. Each must be a valid IPv4 address. Required when `restricted` is true.
|
|
104
|
+
|
|
105
|
+
scopes_enabled : typing.Optional[bool]
|
|
106
|
+
When `true`, scope fields below are enforced. When `false` (default), the
|
|
107
|
+
key has full access. Omitted scope fields default to `{ allow: none }`,
|
|
108
|
+
so with `scopes_enabled: true` and no scopes set the key has no access.
|
|
109
|
+
|
|
110
|
+
numbers : typing.Optional[ApiKeyScopePermission]
|
|
111
|
+
View, buy, release, and configure phone numbers, browse inventory, and manage the cart.
|
|
112
|
+
|
|
113
|
+
trunks : typing.Optional[ApiKeyScopePermission]
|
|
114
|
+
View, create, update, and delete SIP trunks and their settings.
|
|
115
|
+
|
|
116
|
+
calls : typing.Optional[ApiKeyCallsScopePermission]
|
|
117
|
+
Access call records and active calls, and control live call actions such as starting, answering, ending, audio playback, DTMF, streaming, and transcription requests.
|
|
118
|
+
|
|
119
|
+
messages : typing.Optional[ApiKeyScopePermission]
|
|
120
|
+
Access message history and Sender IDs, send messages, manage opt-outs, and create or delete Sender IDs.
|
|
121
|
+
|
|
122
|
+
recordings : typing.Optional[ApiKeyScopePermission]
|
|
123
|
+
List, download, and delete call recordings.
|
|
124
|
+
|
|
125
|
+
campaigns : typing.Optional[ApiKeyScopePermission]
|
|
126
|
+
View campaign analytics and Sender ID or Brand status, schedule bulk voice or SMS campaigns, register Brands, and create short links.
|
|
127
|
+
|
|
128
|
+
two_fa : typing.Optional[ApiKeyScopePermission]
|
|
129
|
+
View 2FA service details and verification logs, trigger OTPs by voice or SMS, and validate verification codes.
|
|
130
|
+
|
|
131
|
+
validator : typing.Optional[ApiKeyScopePermission]
|
|
132
|
+
View number validation results and trigger single or bulk validation or HLR lookup requests.
|
|
133
|
+
|
|
134
|
+
webhooks : typing.Optional[ApiKeyScopePermission]
|
|
135
|
+
List, create, and delete webhooks.
|
|
136
|
+
|
|
137
|
+
embeddable : typing.Optional[ApiKeyScopePermission]
|
|
138
|
+
Manage widget tokens, including listing, viewing, creating, updating, and deleting them.
|
|
139
|
+
|
|
140
|
+
billing : typing.Optional[ApiKeyScopePermission]
|
|
141
|
+
Access statements, balance, payment methods, usage reports, and billing settings, including payment method updates.
|
|
142
|
+
|
|
143
|
+
account : typing.Optional[ApiKeyScopePermission]
|
|
144
|
+
View and update account profile information and timezone.
|
|
145
|
+
|
|
146
|
+
subaccounts : typing.Optional[ApiKeyScopePermission]
|
|
147
|
+
Manage subaccounts: list and view them, create, update, and suspend them.
|
|
148
|
+
|
|
149
|
+
request_options : typing.Optional[RequestOptions]
|
|
150
|
+
Request-specific configuration.
|
|
151
|
+
|
|
152
|
+
Returns
|
|
153
|
+
-------
|
|
154
|
+
ApiKey
|
|
155
|
+
Returns the created API key.
|
|
156
|
+
|
|
157
|
+
Examples
|
|
158
|
+
--------
|
|
159
|
+
from wavix import ApiKeyCallsScopePermission, ApiKeyScopePermission, Wavix
|
|
160
|
+
|
|
161
|
+
client = Wavix(
|
|
162
|
+
token="YOUR_TOKEN",
|
|
163
|
+
)
|
|
164
|
+
client.api_keys.create(
|
|
165
|
+
label="Production API Key",
|
|
166
|
+
active=True,
|
|
167
|
+
restricted=True,
|
|
168
|
+
permitted_ips=["192.168.1.1", "10.0.0.1"],
|
|
169
|
+
scopes_enabled=True,
|
|
170
|
+
numbers=ApiKeyScopePermission(
|
|
171
|
+
allow="read",
|
|
172
|
+
),
|
|
173
|
+
calls=ApiKeyCallsScopePermission(
|
|
174
|
+
allow="read",
|
|
175
|
+
),
|
|
176
|
+
messages=ApiKeyScopePermission(
|
|
177
|
+
allow="write",
|
|
178
|
+
),
|
|
179
|
+
two_fa=ApiKeyScopePermission(
|
|
180
|
+
allow="write",
|
|
181
|
+
),
|
|
182
|
+
billing=ApiKeyScopePermission(
|
|
183
|
+
allow="read",
|
|
184
|
+
),
|
|
185
|
+
)
|
|
186
|
+
"""
|
|
187
|
+
_response = self._raw_client.create(
|
|
188
|
+
label=label,
|
|
189
|
+
active=active,
|
|
190
|
+
restricted=restricted,
|
|
191
|
+
permitted_ips=permitted_ips,
|
|
192
|
+
scopes_enabled=scopes_enabled,
|
|
193
|
+
numbers=numbers,
|
|
194
|
+
trunks=trunks,
|
|
195
|
+
calls=calls,
|
|
196
|
+
messages=messages,
|
|
197
|
+
recordings=recordings,
|
|
198
|
+
campaigns=campaigns,
|
|
199
|
+
two_fa=two_fa,
|
|
200
|
+
validator=validator,
|
|
201
|
+
webhooks=webhooks,
|
|
202
|
+
embeddable=embeddable,
|
|
203
|
+
billing=billing,
|
|
204
|
+
account=account,
|
|
205
|
+
subaccounts=subaccounts,
|
|
206
|
+
request_options=request_options,
|
|
207
|
+
)
|
|
208
|
+
return _response.data
|
|
209
|
+
|
|
210
|
+
def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
211
|
+
"""
|
|
212
|
+
Deletes the API key identified by `id`. Deletion is permanent and revokes the key immediately.
|
|
213
|
+
|
|
214
|
+
Parameters
|
|
215
|
+
----------
|
|
216
|
+
id : int
|
|
217
|
+
The unique ID of the API key.
|
|
218
|
+
|
|
219
|
+
request_options : typing.Optional[RequestOptions]
|
|
220
|
+
Request-specific configuration.
|
|
221
|
+
|
|
222
|
+
Returns
|
|
223
|
+
-------
|
|
224
|
+
SuccessResponse
|
|
225
|
+
Returns a success confirmation. The API key is revoked.
|
|
226
|
+
|
|
227
|
+
Examples
|
|
228
|
+
--------
|
|
229
|
+
from wavix import Wavix
|
|
230
|
+
|
|
231
|
+
client = Wavix(
|
|
232
|
+
token="YOUR_TOKEN",
|
|
233
|
+
)
|
|
234
|
+
client.api_keys.delete(
|
|
235
|
+
id=1,
|
|
236
|
+
)
|
|
237
|
+
"""
|
|
238
|
+
_response = self._raw_client.delete(id, request_options=request_options)
|
|
239
|
+
return _response.data
|
|
240
|
+
|
|
241
|
+
def update(
|
|
242
|
+
self,
|
|
243
|
+
id: int,
|
|
244
|
+
*,
|
|
245
|
+
active: typing.Optional[bool] = OMIT,
|
|
246
|
+
restricted: typing.Optional[bool] = OMIT,
|
|
247
|
+
scopes_enabled: typing.Optional[bool] = OMIT,
|
|
248
|
+
permitted_ips: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
249
|
+
label: typing.Optional[str] = OMIT,
|
|
250
|
+
numbers: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
251
|
+
trunks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
252
|
+
calls: typing.Optional[ApiKeyCallsScopePermission] = OMIT,
|
|
253
|
+
messages: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
254
|
+
recordings: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
255
|
+
campaigns: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
256
|
+
two_fa: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
257
|
+
validator: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
258
|
+
webhooks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
259
|
+
embeddable: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
260
|
+
billing: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
261
|
+
account: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
262
|
+
subaccounts: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
263
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
264
|
+
) -> ApiKey:
|
|
265
|
+
"""
|
|
266
|
+
Updates an API key identified by `id`. Only the provided fields are changed.
|
|
267
|
+
|
|
268
|
+
Parameters
|
|
269
|
+
----------
|
|
270
|
+
id : int
|
|
271
|
+
The unique ID of the API key.
|
|
272
|
+
|
|
273
|
+
active : typing.Optional[bool]
|
|
274
|
+
Indicates whether the API key is active.
|
|
275
|
+
|
|
276
|
+
restricted : typing.Optional[bool]
|
|
277
|
+
Indicates whether the API key is restricted to the listed permitted IPs.
|
|
278
|
+
|
|
279
|
+
scopes_enabled : typing.Optional[bool]
|
|
280
|
+
Indicates whether per-resource scope permissions are enforced for the API key.
|
|
281
|
+
|
|
282
|
+
permitted_ips : typing.Optional[typing.Sequence[str]]
|
|
283
|
+
IP addresses allowed to use the API key when restriction is enabled.
|
|
284
|
+
|
|
285
|
+
label : typing.Optional[str]
|
|
286
|
+
Human-readable label for the API key.
|
|
287
|
+
|
|
288
|
+
numbers : typing.Optional[ApiKeyScopePermission]
|
|
289
|
+
View, buy, release, and configure phone numbers, browse inventory, and manage the cart.
|
|
290
|
+
|
|
291
|
+
trunks : typing.Optional[ApiKeyScopePermission]
|
|
292
|
+
View, create, update, and delete SIP trunks and their settings.
|
|
293
|
+
|
|
294
|
+
calls : typing.Optional[ApiKeyCallsScopePermission]
|
|
295
|
+
Access call records and active calls, and control live call actions such as starting, answering, ending, audio playback, DTMF, streaming, and transcription requests.
|
|
296
|
+
|
|
297
|
+
messages : typing.Optional[ApiKeyScopePermission]
|
|
298
|
+
Access message history and Sender IDs, send messages, manage opt-outs, and create or delete Sender IDs.
|
|
299
|
+
|
|
300
|
+
recordings : typing.Optional[ApiKeyScopePermission]
|
|
301
|
+
List, download, and delete call recordings.
|
|
302
|
+
|
|
303
|
+
campaigns : typing.Optional[ApiKeyScopePermission]
|
|
304
|
+
View campaign analytics and Sender ID or Brand status, schedule bulk voice or SMS campaigns, register Brands, and create short links.
|
|
305
|
+
|
|
306
|
+
two_fa : typing.Optional[ApiKeyScopePermission]
|
|
307
|
+
View 2FA service details and verification logs, trigger OTPs by voice or SMS, and validate verification codes.
|
|
308
|
+
|
|
309
|
+
validator : typing.Optional[ApiKeyScopePermission]
|
|
310
|
+
View number validation results and trigger single or bulk validation or HLR lookup requests.
|
|
311
|
+
|
|
312
|
+
webhooks : typing.Optional[ApiKeyScopePermission]
|
|
313
|
+
List, create, and delete webhooks.
|
|
314
|
+
|
|
315
|
+
embeddable : typing.Optional[ApiKeyScopePermission]
|
|
316
|
+
Manage widget tokens, including listing, viewing, creating, updating, and deleting them.
|
|
317
|
+
|
|
318
|
+
billing : typing.Optional[ApiKeyScopePermission]
|
|
319
|
+
Access statements, balance, payment methods, usage reports, and billing settings, including payment method updates.
|
|
320
|
+
|
|
321
|
+
account : typing.Optional[ApiKeyScopePermission]
|
|
322
|
+
View and update account profile information and timezone.
|
|
323
|
+
|
|
324
|
+
subaccounts : typing.Optional[ApiKeyScopePermission]
|
|
325
|
+
Manage subaccounts: list and view them, create, update, and suspend them.
|
|
326
|
+
|
|
327
|
+
request_options : typing.Optional[RequestOptions]
|
|
328
|
+
Request-specific configuration.
|
|
329
|
+
|
|
330
|
+
Returns
|
|
331
|
+
-------
|
|
332
|
+
ApiKey
|
|
333
|
+
Returns the updated API key.
|
|
334
|
+
|
|
335
|
+
Examples
|
|
336
|
+
--------
|
|
337
|
+
from wavix import Wavix
|
|
338
|
+
|
|
339
|
+
client = Wavix(
|
|
340
|
+
token="YOUR_TOKEN",
|
|
341
|
+
)
|
|
342
|
+
client.api_keys.update(
|
|
343
|
+
id=1,
|
|
344
|
+
active=True,
|
|
345
|
+
restricted=True,
|
|
346
|
+
scopes_enabled=True,
|
|
347
|
+
permitted_ips=["192.168.1.1", "10.0.0.1"],
|
|
348
|
+
label="Production API Key",
|
|
349
|
+
)
|
|
350
|
+
"""
|
|
351
|
+
_response = self._raw_client.update(
|
|
352
|
+
id,
|
|
353
|
+
active=active,
|
|
354
|
+
restricted=restricted,
|
|
355
|
+
scopes_enabled=scopes_enabled,
|
|
356
|
+
permitted_ips=permitted_ips,
|
|
357
|
+
label=label,
|
|
358
|
+
numbers=numbers,
|
|
359
|
+
trunks=trunks,
|
|
360
|
+
calls=calls,
|
|
361
|
+
messages=messages,
|
|
362
|
+
recordings=recordings,
|
|
363
|
+
campaigns=campaigns,
|
|
364
|
+
two_fa=two_fa,
|
|
365
|
+
validator=validator,
|
|
366
|
+
webhooks=webhooks,
|
|
367
|
+
embeddable=embeddable,
|
|
368
|
+
billing=billing,
|
|
369
|
+
account=account,
|
|
370
|
+
subaccounts=subaccounts,
|
|
371
|
+
request_options=request_options,
|
|
372
|
+
)
|
|
373
|
+
return _response.data
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
class AsyncApiKeysClient:
|
|
377
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
378
|
+
self._raw_client = AsyncRawApiKeysClient(client_wrapper=client_wrapper)
|
|
379
|
+
|
|
380
|
+
@property
|
|
381
|
+
def with_raw_response(self) -> AsyncRawApiKeysClient:
|
|
382
|
+
"""
|
|
383
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
384
|
+
|
|
385
|
+
Returns
|
|
386
|
+
-------
|
|
387
|
+
AsyncRawApiKeysClient
|
|
388
|
+
"""
|
|
389
|
+
return self._raw_client
|
|
390
|
+
|
|
391
|
+
async def list(
|
|
392
|
+
self, *, label: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
|
|
393
|
+
) -> typing.List[ApiKey]:
|
|
394
|
+
"""
|
|
395
|
+
Returns the API keys belonging to the authenticated account.
|
|
396
|
+
|
|
397
|
+
Parameters
|
|
398
|
+
----------
|
|
399
|
+
label : typing.Optional[str]
|
|
400
|
+
Filters API keys by `label`. Matches partial values.
|
|
401
|
+
|
|
402
|
+
request_options : typing.Optional[RequestOptions]
|
|
403
|
+
Request-specific configuration.
|
|
404
|
+
|
|
405
|
+
Returns
|
|
406
|
+
-------
|
|
407
|
+
typing.List[ApiKey]
|
|
408
|
+
Returns the list of API keys.
|
|
409
|
+
|
|
410
|
+
Examples
|
|
411
|
+
--------
|
|
412
|
+
import asyncio
|
|
413
|
+
|
|
414
|
+
from wavix import AsyncWavix
|
|
415
|
+
|
|
416
|
+
client = AsyncWavix(
|
|
417
|
+
token="YOUR_TOKEN",
|
|
418
|
+
)
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
async def main() -> None:
|
|
422
|
+
await client.api_keys.list(
|
|
423
|
+
label="production",
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
asyncio.run(main())
|
|
428
|
+
"""
|
|
429
|
+
_response = await self._raw_client.list(label=label, request_options=request_options)
|
|
430
|
+
return _response.data
|
|
431
|
+
|
|
432
|
+
async def create(
|
|
433
|
+
self,
|
|
434
|
+
*,
|
|
435
|
+
label: str,
|
|
436
|
+
active: typing.Optional[bool] = OMIT,
|
|
437
|
+
restricted: typing.Optional[bool] = OMIT,
|
|
438
|
+
permitted_ips: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
439
|
+
scopes_enabled: typing.Optional[bool] = OMIT,
|
|
440
|
+
numbers: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
441
|
+
trunks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
442
|
+
calls: typing.Optional[ApiKeyCallsScopePermission] = OMIT,
|
|
443
|
+
messages: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
444
|
+
recordings: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
445
|
+
campaigns: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
446
|
+
two_fa: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
447
|
+
validator: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
448
|
+
webhooks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
449
|
+
embeddable: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
450
|
+
billing: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
451
|
+
account: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
452
|
+
subaccounts: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
453
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
454
|
+
) -> ApiKey:
|
|
455
|
+
"""
|
|
456
|
+
Creates an API key for the authenticated account. Restrict access by listing permitted IP addresses in `permitted_ips`.
|
|
457
|
+
|
|
458
|
+
Parameters
|
|
459
|
+
----------
|
|
460
|
+
label : str
|
|
461
|
+
API key label.
|
|
462
|
+
|
|
463
|
+
active : typing.Optional[bool]
|
|
464
|
+
Indicates whether the API key should be activated upon creation.
|
|
465
|
+
|
|
466
|
+
restricted : typing.Optional[bool]
|
|
467
|
+
Indicates whether to restrict API key access by IP address. When enabled, only requests from IP addresses listed in `permitted_ips` are allowed.
|
|
468
|
+
|
|
469
|
+
permitted_ips : typing.Optional[typing.Sequence[str]]
|
|
470
|
+
List of permitted IP addresses for this API key. Each must be a valid IPv4 address. Required when `restricted` is true.
|
|
471
|
+
|
|
472
|
+
scopes_enabled : typing.Optional[bool]
|
|
473
|
+
When `true`, scope fields below are enforced. When `false` (default), the
|
|
474
|
+
key has full access. Omitted scope fields default to `{ allow: none }`,
|
|
475
|
+
so with `scopes_enabled: true` and no scopes set the key has no access.
|
|
476
|
+
|
|
477
|
+
numbers : typing.Optional[ApiKeyScopePermission]
|
|
478
|
+
View, buy, release, and configure phone numbers, browse inventory, and manage the cart.
|
|
479
|
+
|
|
480
|
+
trunks : typing.Optional[ApiKeyScopePermission]
|
|
481
|
+
View, create, update, and delete SIP trunks and their settings.
|
|
482
|
+
|
|
483
|
+
calls : typing.Optional[ApiKeyCallsScopePermission]
|
|
484
|
+
Access call records and active calls, and control live call actions such as starting, answering, ending, audio playback, DTMF, streaming, and transcription requests.
|
|
485
|
+
|
|
486
|
+
messages : typing.Optional[ApiKeyScopePermission]
|
|
487
|
+
Access message history and Sender IDs, send messages, manage opt-outs, and create or delete Sender IDs.
|
|
488
|
+
|
|
489
|
+
recordings : typing.Optional[ApiKeyScopePermission]
|
|
490
|
+
List, download, and delete call recordings.
|
|
491
|
+
|
|
492
|
+
campaigns : typing.Optional[ApiKeyScopePermission]
|
|
493
|
+
View campaign analytics and Sender ID or Brand status, schedule bulk voice or SMS campaigns, register Brands, and create short links.
|
|
494
|
+
|
|
495
|
+
two_fa : typing.Optional[ApiKeyScopePermission]
|
|
496
|
+
View 2FA service details and verification logs, trigger OTPs by voice or SMS, and validate verification codes.
|
|
497
|
+
|
|
498
|
+
validator : typing.Optional[ApiKeyScopePermission]
|
|
499
|
+
View number validation results and trigger single or bulk validation or HLR lookup requests.
|
|
500
|
+
|
|
501
|
+
webhooks : typing.Optional[ApiKeyScopePermission]
|
|
502
|
+
List, create, and delete webhooks.
|
|
503
|
+
|
|
504
|
+
embeddable : typing.Optional[ApiKeyScopePermission]
|
|
505
|
+
Manage widget tokens, including listing, viewing, creating, updating, and deleting them.
|
|
506
|
+
|
|
507
|
+
billing : typing.Optional[ApiKeyScopePermission]
|
|
508
|
+
Access statements, balance, payment methods, usage reports, and billing settings, including payment method updates.
|
|
509
|
+
|
|
510
|
+
account : typing.Optional[ApiKeyScopePermission]
|
|
511
|
+
View and update account profile information and timezone.
|
|
512
|
+
|
|
513
|
+
subaccounts : typing.Optional[ApiKeyScopePermission]
|
|
514
|
+
Manage subaccounts: list and view them, create, update, and suspend them.
|
|
515
|
+
|
|
516
|
+
request_options : typing.Optional[RequestOptions]
|
|
517
|
+
Request-specific configuration.
|
|
518
|
+
|
|
519
|
+
Returns
|
|
520
|
+
-------
|
|
521
|
+
ApiKey
|
|
522
|
+
Returns the created API key.
|
|
523
|
+
|
|
524
|
+
Examples
|
|
525
|
+
--------
|
|
526
|
+
import asyncio
|
|
527
|
+
|
|
528
|
+
from wavix import ApiKeyCallsScopePermission, ApiKeyScopePermission, AsyncWavix
|
|
529
|
+
|
|
530
|
+
client = AsyncWavix(
|
|
531
|
+
token="YOUR_TOKEN",
|
|
532
|
+
)
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
async def main() -> None:
|
|
536
|
+
await client.api_keys.create(
|
|
537
|
+
label="Production API Key",
|
|
538
|
+
active=True,
|
|
539
|
+
restricted=True,
|
|
540
|
+
permitted_ips=["192.168.1.1", "10.0.0.1"],
|
|
541
|
+
scopes_enabled=True,
|
|
542
|
+
numbers=ApiKeyScopePermission(
|
|
543
|
+
allow="read",
|
|
544
|
+
),
|
|
545
|
+
calls=ApiKeyCallsScopePermission(
|
|
546
|
+
allow="read",
|
|
547
|
+
),
|
|
548
|
+
messages=ApiKeyScopePermission(
|
|
549
|
+
allow="write",
|
|
550
|
+
),
|
|
551
|
+
two_fa=ApiKeyScopePermission(
|
|
552
|
+
allow="write",
|
|
553
|
+
),
|
|
554
|
+
billing=ApiKeyScopePermission(
|
|
555
|
+
allow="read",
|
|
556
|
+
),
|
|
557
|
+
)
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
asyncio.run(main())
|
|
561
|
+
"""
|
|
562
|
+
_response = await self._raw_client.create(
|
|
563
|
+
label=label,
|
|
564
|
+
active=active,
|
|
565
|
+
restricted=restricted,
|
|
566
|
+
permitted_ips=permitted_ips,
|
|
567
|
+
scopes_enabled=scopes_enabled,
|
|
568
|
+
numbers=numbers,
|
|
569
|
+
trunks=trunks,
|
|
570
|
+
calls=calls,
|
|
571
|
+
messages=messages,
|
|
572
|
+
recordings=recordings,
|
|
573
|
+
campaigns=campaigns,
|
|
574
|
+
two_fa=two_fa,
|
|
575
|
+
validator=validator,
|
|
576
|
+
webhooks=webhooks,
|
|
577
|
+
embeddable=embeddable,
|
|
578
|
+
billing=billing,
|
|
579
|
+
account=account,
|
|
580
|
+
subaccounts=subaccounts,
|
|
581
|
+
request_options=request_options,
|
|
582
|
+
)
|
|
583
|
+
return _response.data
|
|
584
|
+
|
|
585
|
+
async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
586
|
+
"""
|
|
587
|
+
Deletes the API key identified by `id`. Deletion is permanent and revokes the key immediately.
|
|
588
|
+
|
|
589
|
+
Parameters
|
|
590
|
+
----------
|
|
591
|
+
id : int
|
|
592
|
+
The unique ID of the API key.
|
|
593
|
+
|
|
594
|
+
request_options : typing.Optional[RequestOptions]
|
|
595
|
+
Request-specific configuration.
|
|
596
|
+
|
|
597
|
+
Returns
|
|
598
|
+
-------
|
|
599
|
+
SuccessResponse
|
|
600
|
+
Returns a success confirmation. The API key is revoked.
|
|
601
|
+
|
|
602
|
+
Examples
|
|
603
|
+
--------
|
|
604
|
+
import asyncio
|
|
605
|
+
|
|
606
|
+
from wavix import AsyncWavix
|
|
607
|
+
|
|
608
|
+
client = AsyncWavix(
|
|
609
|
+
token="YOUR_TOKEN",
|
|
610
|
+
)
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
async def main() -> None:
|
|
614
|
+
await client.api_keys.delete(
|
|
615
|
+
id=1,
|
|
616
|
+
)
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
asyncio.run(main())
|
|
620
|
+
"""
|
|
621
|
+
_response = await self._raw_client.delete(id, request_options=request_options)
|
|
622
|
+
return _response.data
|
|
623
|
+
|
|
624
|
+
async def update(
|
|
625
|
+
self,
|
|
626
|
+
id: int,
|
|
627
|
+
*,
|
|
628
|
+
active: typing.Optional[bool] = OMIT,
|
|
629
|
+
restricted: typing.Optional[bool] = OMIT,
|
|
630
|
+
scopes_enabled: typing.Optional[bool] = OMIT,
|
|
631
|
+
permitted_ips: typing.Optional[typing.Sequence[str]] = OMIT,
|
|
632
|
+
label: typing.Optional[str] = OMIT,
|
|
633
|
+
numbers: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
634
|
+
trunks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
635
|
+
calls: typing.Optional[ApiKeyCallsScopePermission] = OMIT,
|
|
636
|
+
messages: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
637
|
+
recordings: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
638
|
+
campaigns: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
639
|
+
two_fa: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
640
|
+
validator: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
641
|
+
webhooks: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
642
|
+
embeddable: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
643
|
+
billing: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
644
|
+
account: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
645
|
+
subaccounts: typing.Optional[ApiKeyScopePermission] = OMIT,
|
|
646
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
647
|
+
) -> ApiKey:
|
|
648
|
+
"""
|
|
649
|
+
Updates an API key identified by `id`. Only the provided fields are changed.
|
|
650
|
+
|
|
651
|
+
Parameters
|
|
652
|
+
----------
|
|
653
|
+
id : int
|
|
654
|
+
The unique ID of the API key.
|
|
655
|
+
|
|
656
|
+
active : typing.Optional[bool]
|
|
657
|
+
Indicates whether the API key is active.
|
|
658
|
+
|
|
659
|
+
restricted : typing.Optional[bool]
|
|
660
|
+
Indicates whether the API key is restricted to the listed permitted IPs.
|
|
661
|
+
|
|
662
|
+
scopes_enabled : typing.Optional[bool]
|
|
663
|
+
Indicates whether per-resource scope permissions are enforced for the API key.
|
|
664
|
+
|
|
665
|
+
permitted_ips : typing.Optional[typing.Sequence[str]]
|
|
666
|
+
IP addresses allowed to use the API key when restriction is enabled.
|
|
667
|
+
|
|
668
|
+
label : typing.Optional[str]
|
|
669
|
+
Human-readable label for the API key.
|
|
670
|
+
|
|
671
|
+
numbers : typing.Optional[ApiKeyScopePermission]
|
|
672
|
+
View, buy, release, and configure phone numbers, browse inventory, and manage the cart.
|
|
673
|
+
|
|
674
|
+
trunks : typing.Optional[ApiKeyScopePermission]
|
|
675
|
+
View, create, update, and delete SIP trunks and their settings.
|
|
676
|
+
|
|
677
|
+
calls : typing.Optional[ApiKeyCallsScopePermission]
|
|
678
|
+
Access call records and active calls, and control live call actions such as starting, answering, ending, audio playback, DTMF, streaming, and transcription requests.
|
|
679
|
+
|
|
680
|
+
messages : typing.Optional[ApiKeyScopePermission]
|
|
681
|
+
Access message history and Sender IDs, send messages, manage opt-outs, and create or delete Sender IDs.
|
|
682
|
+
|
|
683
|
+
recordings : typing.Optional[ApiKeyScopePermission]
|
|
684
|
+
List, download, and delete call recordings.
|
|
685
|
+
|
|
686
|
+
campaigns : typing.Optional[ApiKeyScopePermission]
|
|
687
|
+
View campaign analytics and Sender ID or Brand status, schedule bulk voice or SMS campaigns, register Brands, and create short links.
|
|
688
|
+
|
|
689
|
+
two_fa : typing.Optional[ApiKeyScopePermission]
|
|
690
|
+
View 2FA service details and verification logs, trigger OTPs by voice or SMS, and validate verification codes.
|
|
691
|
+
|
|
692
|
+
validator : typing.Optional[ApiKeyScopePermission]
|
|
693
|
+
View number validation results and trigger single or bulk validation or HLR lookup requests.
|
|
694
|
+
|
|
695
|
+
webhooks : typing.Optional[ApiKeyScopePermission]
|
|
696
|
+
List, create, and delete webhooks.
|
|
697
|
+
|
|
698
|
+
embeddable : typing.Optional[ApiKeyScopePermission]
|
|
699
|
+
Manage widget tokens, including listing, viewing, creating, updating, and deleting them.
|
|
700
|
+
|
|
701
|
+
billing : typing.Optional[ApiKeyScopePermission]
|
|
702
|
+
Access statements, balance, payment methods, usage reports, and billing settings, including payment method updates.
|
|
703
|
+
|
|
704
|
+
account : typing.Optional[ApiKeyScopePermission]
|
|
705
|
+
View and update account profile information and timezone.
|
|
706
|
+
|
|
707
|
+
subaccounts : typing.Optional[ApiKeyScopePermission]
|
|
708
|
+
Manage subaccounts: list and view them, create, update, and suspend them.
|
|
709
|
+
|
|
710
|
+
request_options : typing.Optional[RequestOptions]
|
|
711
|
+
Request-specific configuration.
|
|
712
|
+
|
|
713
|
+
Returns
|
|
714
|
+
-------
|
|
715
|
+
ApiKey
|
|
716
|
+
Returns the updated API key.
|
|
717
|
+
|
|
718
|
+
Examples
|
|
719
|
+
--------
|
|
720
|
+
import asyncio
|
|
721
|
+
|
|
722
|
+
from wavix import AsyncWavix
|
|
723
|
+
|
|
724
|
+
client = AsyncWavix(
|
|
725
|
+
token="YOUR_TOKEN",
|
|
726
|
+
)
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
async def main() -> None:
|
|
730
|
+
await client.api_keys.update(
|
|
731
|
+
id=1,
|
|
732
|
+
active=True,
|
|
733
|
+
restricted=True,
|
|
734
|
+
scopes_enabled=True,
|
|
735
|
+
permitted_ips=["192.168.1.1", "10.0.0.1"],
|
|
736
|
+
label="Production API Key",
|
|
737
|
+
)
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
asyncio.run(main())
|
|
741
|
+
"""
|
|
742
|
+
_response = await self._raw_client.update(
|
|
743
|
+
id,
|
|
744
|
+
active=active,
|
|
745
|
+
restricted=restricted,
|
|
746
|
+
scopes_enabled=scopes_enabled,
|
|
747
|
+
permitted_ips=permitted_ips,
|
|
748
|
+
label=label,
|
|
749
|
+
numbers=numbers,
|
|
750
|
+
trunks=trunks,
|
|
751
|
+
calls=calls,
|
|
752
|
+
messages=messages,
|
|
753
|
+
recordings=recordings,
|
|
754
|
+
campaigns=campaigns,
|
|
755
|
+
two_fa=two_fa,
|
|
756
|
+
validator=validator,
|
|
757
|
+
webhooks=webhooks,
|
|
758
|
+
embeddable=embeddable,
|
|
759
|
+
billing=billing,
|
|
760
|
+
account=account,
|
|
761
|
+
subaccounts=subaccounts,
|
|
762
|
+
request_options=request_options,
|
|
763
|
+
)
|
|
764
|
+
return _response.data
|