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.
Files changed (497) hide show
  1. wavix/__init__.py +801 -0
  2. wavix/_default_clients.py +32 -0
  3. wavix/api_keys/__init__.py +4 -0
  4. wavix/api_keys/client.py +764 -0
  5. wavix/api_keys/raw_client.py +1191 -0
  6. wavix/billing/__init__.py +41 -0
  7. wavix/billing/client.py +82 -0
  8. wavix/billing/invoices/__init__.py +34 -0
  9. wavix/billing/invoices/client.py +203 -0
  10. wavix/billing/invoices/raw_client.py +302 -0
  11. wavix/billing/invoices/types/__init__.py +34 -0
  12. wavix/billing/invoices/types/list_invoices_response.py +31 -0
  13. wavix/billing/raw_client.py +13 -0
  14. wavix/billing/transactions/__init__.py +34 -0
  15. wavix/billing/transactions/client.py +209 -0
  16. wavix/billing/transactions/raw_client.py +253 -0
  17. wavix/billing/transactions/types/__init__.py +34 -0
  18. wavix/billing/transactions/types/list_transactions_response.py +31 -0
  19. wavix/buy/__init__.py +61 -0
  20. wavix/buy/cities/__init__.py +34 -0
  21. wavix/buy/cities/client.py +134 -0
  22. wavix/buy/cities/raw_client.py +201 -0
  23. wavix/buy/cities/types/__init__.py +34 -0
  24. wavix/buy/cities/types/list_cities_response.py +23 -0
  25. wavix/buy/client.py +139 -0
  26. wavix/buy/countries/__init__.py +34 -0
  27. wavix/buy/countries/client.py +116 -0
  28. wavix/buy/countries/raw_client.py +144 -0
  29. wavix/buy/countries/types/__init__.py +34 -0
  30. wavix/buy/countries/types/list_countries_response.py +23 -0
  31. wavix/buy/numbers/__init__.py +34 -0
  32. wavix/buy/numbers/client.py +168 -0
  33. wavix/buy/numbers/raw_client.py +227 -0
  34. wavix/buy/numbers/types/__init__.py +34 -0
  35. wavix/buy/numbers/types/list_numbers_response.py +26 -0
  36. wavix/buy/raw_client.py +13 -0
  37. wavix/buy/region_cities/__init__.py +34 -0
  38. wavix/buy/region_cities/client.py +142 -0
  39. wavix/buy/region_cities/raw_client.py +207 -0
  40. wavix/buy/region_cities/types/__init__.py +34 -0
  41. wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
  42. wavix/buy/regions/__init__.py +34 -0
  43. wavix/buy/regions/client.py +132 -0
  44. wavix/buy/regions/raw_client.py +222 -0
  45. wavix/buy/regions/types/__init__.py +34 -0
  46. wavix/buy/regions/types/list_regions_response.py +23 -0
  47. wavix/call_control/__init__.py +40 -0
  48. wavix/call_control/audio/__init__.py +4 -0
  49. wavix/call_control/audio/client.py +195 -0
  50. wavix/call_control/audio/raw_client.py +333 -0
  51. wavix/call_control/client.py +796 -0
  52. wavix/call_control/raw_client.py +1224 -0
  53. wavix/call_control/streams/__init__.py +4 -0
  54. wavix/call_control/streams/client.py +250 -0
  55. wavix/call_control/streams/raw_client.py +325 -0
  56. wavix/call_control/types/__init__.py +38 -0
  57. wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
  58. wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
  59. wavix/call_recording/__init__.py +4 -0
  60. wavix/call_recording/client.py +430 -0
  61. wavix/call_recording/raw_client.py +726 -0
  62. wavix/call_webhooks/__init__.py +37 -0
  63. wavix/call_webhooks/client.py +281 -0
  64. wavix/call_webhooks/raw_client.py +529 -0
  65. wavix/call_webhooks/types/__init__.py +38 -0
  66. wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
  67. wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
  68. wavix/cart/__init__.py +38 -0
  69. wavix/cart/client.py +327 -0
  70. wavix/cart/raw_client.py +629 -0
  71. wavix/cart/types/__init__.py +40 -0
  72. wavix/cart/types/checkout_cart_response.py +22 -0
  73. wavix/cart/types/get_cart_response.py +29 -0
  74. wavix/cart/types/remove_cart_response.py +22 -0
  75. wavix/cdrs/__init__.py +39 -0
  76. wavix/cdrs/client.py +968 -0
  77. wavix/cdrs/raw_client.py +1176 -0
  78. wavix/cdrs/transcription/__init__.py +4 -0
  79. wavix/cdrs/transcription/client.py +112 -0
  80. wavix/cdrs/transcription/raw_client.py +156 -0
  81. wavix/cdrs/types/__init__.py +38 -0
  82. wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
  83. wavix/cdrs/types/cdr_search_request_type.py +5 -0
  84. wavix/client.py +578 -0
  85. wavix/core/__init__.py +127 -0
  86. wavix/core/api_error.py +23 -0
  87. wavix/core/client_wrapper.py +119 -0
  88. wavix/core/datetime_utils.py +70 -0
  89. wavix/core/file.py +67 -0
  90. wavix/core/force_multipart.py +18 -0
  91. wavix/core/http_client.py +839 -0
  92. wavix/core/http_response.py +59 -0
  93. wavix/core/http_sse/__init__.py +42 -0
  94. wavix/core/http_sse/_api.py +170 -0
  95. wavix/core/http_sse/_decoders.py +61 -0
  96. wavix/core/http_sse/_exceptions.py +7 -0
  97. wavix/core/http_sse/_models.py +17 -0
  98. wavix/core/jsonable_encoder.py +120 -0
  99. wavix/core/logging.py +107 -0
  100. wavix/core/parse_error.py +36 -0
  101. wavix/core/pydantic_utilities.py +508 -0
  102. wavix/core/query_encoder.py +58 -0
  103. wavix/core/remove_none_from_dict.py +11 -0
  104. wavix/core/request_options.py +35 -0
  105. wavix/core/serialization.py +347 -0
  106. wavix/environment.py +7 -0
  107. wavix/errors/__init__.py +56 -0
  108. wavix/errors/bad_request_error.py +10 -0
  109. wavix/errors/forbidden_error.py +10 -0
  110. wavix/errors/not_found_error.py +10 -0
  111. wavix/errors/service_unavailable_error.py +11 -0
  112. wavix/errors/too_many_requests_error.py +11 -0
  113. wavix/errors/unauthorized_error.py +11 -0
  114. wavix/errors/unprocessable_entity_error.py +10 -0
  115. wavix/link_shortener/__init__.py +34 -0
  116. wavix/link_shortener/client.py +194 -0
  117. wavix/link_shortener/metrics/__init__.py +4 -0
  118. wavix/link_shortener/metrics/client.py +198 -0
  119. wavix/link_shortener/metrics/raw_client.py +218 -0
  120. wavix/link_shortener/raw_client.py +265 -0
  121. wavix/number_validator/__init__.py +35 -0
  122. wavix/number_validator/client.py +271 -0
  123. wavix/number_validator/raw_client.py +383 -0
  124. wavix/number_validator/results/__init__.py +4 -0
  125. wavix/number_validator/results/client.py +114 -0
  126. wavix/number_validator/results/raw_client.py +156 -0
  127. wavix/number_validator/types/__init__.py +34 -0
  128. wavix/number_validator/types/get_number_validator_response.py +112 -0
  129. wavix/numbers/__init__.py +39 -0
  130. wavix/numbers/client.py +689 -0
  131. wavix/numbers/papers/__init__.py +4 -0
  132. wavix/numbers/papers/client.py +155 -0
  133. wavix/numbers/papers/raw_client.py +208 -0
  134. wavix/numbers/raw_client.py +1000 -0
  135. wavix/numbers/types/__init__.py +38 -0
  136. wavix/numbers/types/bulk_update_numbers_response.py +23 -0
  137. wavix/numbers/types/delete_numbers_response.py +22 -0
  138. wavix/profile/__init__.py +41 -0
  139. wavix/profile/client.py +308 -0
  140. wavix/profile/config/__init__.py +34 -0
  141. wavix/profile/config/client.py +100 -0
  142. wavix/profile/config/raw_client.py +124 -0
  143. wavix/profile/config/types/__init__.py +34 -0
  144. wavix/profile/config/types/get_config_response.py +25 -0
  145. wavix/profile/raw_client.py +360 -0
  146. wavix/profile/types/__init__.py +38 -0
  147. wavix/profile/types/profile_update_request_company_info.py +48 -0
  148. wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
  149. wavix/py.typed +0 -0
  150. wavix/sip_trunks/__init__.py +4 -0
  151. wavix/sip_trunks/client.py +927 -0
  152. wavix/sip_trunks/raw_client.py +1324 -0
  153. wavix/sms_and_mms/__init__.py +66 -0
  154. wavix/sms_and_mms/client.py +101 -0
  155. wavix/sms_and_mms/messages/__init__.py +49 -0
  156. wavix/sms_and_mms/messages/client.py +625 -0
  157. wavix/sms_and_mms/messages/raw_client.py +793 -0
  158. wavix/sms_and_mms/messages/types/__init__.py +47 -0
  159. wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
  160. wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
  161. wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
  162. wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
  163. wavix/sms_and_mms/opt_outs/__init__.py +34 -0
  164. wavix/sms_and_mms/opt_outs/client.py +277 -0
  165. wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
  166. wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
  167. wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
  168. wavix/sms_and_mms/raw_client.py +13 -0
  169. wavix/sms_and_mms/sender_ids/__init__.py +38 -0
  170. wavix/sms_and_mms/sender_ids/client.py +391 -0
  171. wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
  172. wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
  173. wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
  174. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
  175. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
  176. wavix/speech_analytics/__init__.py +52 -0
  177. wavix/speech_analytics/client.py +372 -0
  178. wavix/speech_analytics/file/__init__.py +4 -0
  179. wavix/speech_analytics/file/client.py +114 -0
  180. wavix/speech_analytics/file/raw_client.py +148 -0
  181. wavix/speech_analytics/raw_client.py +527 -0
  182. wavix/speech_analytics/types/__init__.py +47 -0
  183. wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
  184. wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
  185. wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
  186. wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
  187. wavix/sub_accounts/__init__.py +52 -0
  188. wavix/sub_accounts/client.py +442 -0
  189. wavix/sub_accounts/raw_client.py +775 -0
  190. wavix/sub_accounts/transactions/__init__.py +4 -0
  191. wavix/sub_accounts/transactions/client.py +198 -0
  192. wavix/sub_accounts/transactions/raw_client.py +265 -0
  193. wavix/sub_accounts/types/__init__.py +47 -0
  194. wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
  195. wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
  196. wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
  197. wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
  198. wavix/ten_dlc/__init__.py +167 -0
  199. wavix/ten_dlc/brand_appeals/__init__.py +34 -0
  200. wavix/ten_dlc/brand_appeals/client.py +244 -0
  201. wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
  202. wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
  203. wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
  204. wavix/ten_dlc/brand_evidence/__init__.py +37 -0
  205. wavix/ten_dlc/brand_evidence/client.py +365 -0
  206. wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
  207. wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
  208. wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
  209. wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
  210. wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
  211. wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
  212. wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
  213. wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
  214. wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
  215. wavix/ten_dlc/brand_vettings/__init__.py +4 -0
  216. wavix/ten_dlc/brand_vettings/client.py +325 -0
  217. wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
  218. wavix/ten_dlc/brands/__init__.py +85 -0
  219. wavix/ten_dlc/brands/client.py +870 -0
  220. wavix/ten_dlc/brands/raw_client.py +1263 -0
  221. wavix/ten_dlc/brands/types/__init__.py +83 -0
  222. wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
  223. wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
  224. wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
  225. wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
  226. wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
  227. wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
  228. wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
  229. wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
  230. wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
  231. wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
  232. wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
  233. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
  234. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
  235. wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
  236. wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
  237. wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
  238. wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
  239. wavix/ten_dlc/campaign_numbers/client.py +304 -0
  240. wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
  241. wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
  242. wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
  243. wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
  244. wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
  245. wavix/ten_dlc/campaigns/__init__.py +64 -0
  246. wavix/ten_dlc/campaigns/client.py +1493 -0
  247. wavix/ten_dlc/campaigns/raw_client.py +1840 -0
  248. wavix/ten_dlc/campaigns/types/__init__.py +62 -0
  249. wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
  250. wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
  251. wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
  252. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
  253. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
  254. wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
  255. wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
  256. wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
  257. wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
  258. wavix/ten_dlc/client.py +196 -0
  259. wavix/ten_dlc/raw_client.py +13 -0
  260. wavix/ten_dlc/subscriptions/__init__.py +37 -0
  261. wavix/ten_dlc/subscriptions/client.py +271 -0
  262. wavix/ten_dlc/subscriptions/raw_client.py +398 -0
  263. wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
  264. wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
  265. wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
  266. wavix/two_fa/__init__.py +56 -0
  267. wavix/two_fa/client.py +101 -0
  268. wavix/two_fa/events/__init__.py +4 -0
  269. wavix/two_fa/events/client.py +114 -0
  270. wavix/two_fa/events/raw_client.py +156 -0
  271. wavix/two_fa/raw_client.py +13 -0
  272. wavix/two_fa/sessions/__init__.py +4 -0
  273. wavix/two_fa/sessions/client.py +142 -0
  274. wavix/two_fa/sessions/raw_client.py +200 -0
  275. wavix/two_fa/verification/__init__.py +49 -0
  276. wavix/two_fa/verification/client.py +395 -0
  277. wavix/two_fa/verification/raw_client.py +664 -0
  278. wavix/two_fa/verification/types/__init__.py +47 -0
  279. wavix/two_fa/verification/types/check_verification_response.py +22 -0
  280. wavix/two_fa/verification/types/create_verification_response.py +51 -0
  281. wavix/two_fa/verification/types/resend_verification_response.py +38 -0
  282. wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
  283. wavix/types/__init__.py +637 -0
  284. wavix/types/account_error_response.py +31 -0
  285. wavix/types/account_limits.py +32 -0
  286. wavix/types/allowed_i_ps.py +7 -0
  287. wavix/types/allowed_i_ps_item.py +27 -0
  288. wavix/types/api_key.py +138 -0
  289. wavix/types/api_key_calls_scope_permission.py +30 -0
  290. wavix/types/api_key_calls_scope_permission_allow.py +5 -0
  291. wavix/types/api_key_scope_permission.py +30 -0
  292. wavix/types/api_key_scope_permission_allow.py +5 -0
  293. wavix/types/available_number.py +97 -0
  294. wavix/types/available_number_list_response.py +26 -0
  295. wavix/types/bad_request_error_body.py +27 -0
  296. wavix/types/billing_transaction_list_response.py +31 -0
  297. wavix/types/brand_status_updated_webhook.py +28 -0
  298. wavix/types/brand_status_updated_webhook_status.py +7 -0
  299. wavix/types/call.py +92 -0
  300. wavix/types/call_control_validation_error_response.py +34 -0
  301. wavix/types/call_create_response.py +92 -0
  302. wavix/types/call_create_response_event_type.py +18 -0
  303. wavix/types/call_direction.py +5 -0
  304. wavix/types/call_disposition.py +5 -0
  305. wavix/types/call_event_type.py +18 -0
  306. wavix/types/call_list_response.py +28 -0
  307. wavix/types/call_recording_list_response.py +28 -0
  308. wavix/types/call_response.py +24 -0
  309. wavix/types/call_status_webhook.py +70 -0
  310. wavix/types/call_status_webhook_direction.py +5 -0
  311. wavix/types/call_stream_channel.py +5 -0
  312. wavix/types/call_stream_response.py +27 -0
  313. wavix/types/call_stream_type.py +5 -0
  314. wavix/types/call_webhook.py +37 -0
  315. wavix/types/call_webhook_event_type.py +5 -0
  316. wavix/types/call_webhook_list_response.py +10 -0
  317. wavix/types/call_webhook_list_response_item.py +28 -0
  318. wavix/types/call_webhook_list_response_item_event_type.py +5 -0
  319. wavix/types/campaign_status_updated_webhook.py +41 -0
  320. wavix/types/campaign_status_updated_webhook_status.py +7 -0
  321. wavix/types/cart_response.py +29 -0
  322. wavix/types/cdr.py +97 -0
  323. wavix/types/cdr_list_response.py +26 -0
  324. wavix/types/cdr_response.py +104 -0
  325. wavix/types/cdr_transcription_completed_webhook.py +28 -0
  326. wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
  327. wavix/types/cdr_transcription_response.py +74 -0
  328. wavix/types/cdr_transcription_search_response.py +26 -0
  329. wavix/types/cdr_with_transcription.py +97 -0
  330. wavix/types/city.py +32 -0
  331. wavix/types/city_list_response.py +23 -0
  332. wavix/types/country.py +32 -0
  333. wavix/types/country_has_no_regions_error_response.py +27 -0
  334. wavix/types/country_list_response.py +23 -0
  335. wavix/types/document_type.py +32 -0
  336. wavix/types/document_type_id.py +7 -0
  337. wavix/types/file_transcript_response.py +30 -0
  338. wavix/types/file_transcript_turn.py +46 -0
  339. wavix/types/file_transcription_completed_webhook.py +32 -0
  340. wavix/types/file_transcription_response.py +77 -0
  341. wavix/types/file_transcription_response_language.py +5 -0
  342. wavix/types/file_transcription_response_status.py +5 -0
  343. wavix/types/financial_transaction.py +57 -0
  344. wavix/types/forbidden_error_response.py +27 -0
  345. wavix/types/inbound_call_destination.py +53 -0
  346. wavix/types/inbound_call_transport.py +6 -0
  347. wavix/types/inbound_message.py +46 -0
  348. wavix/types/invalid_recording.py +31 -0
  349. wavix/types/invoice.py +42 -0
  350. wavix/types/invoice_list_response.py +31 -0
  351. wavix/types/list_brand_evidence_response.py +23 -0
  352. wavix/types/list_sessions_response_item.py +58 -0
  353. wavix/types/message.py +103 -0
  354. wavix/types/message_body.py +29 -0
  355. wavix/types/message_create_request.py +46 -0
  356. wavix/types/message_delivery_status.py +8 -0
  357. wavix/types/message_list_response.py +26 -0
  358. wavix/types/message_response.py +97 -0
  359. wavix/types/messages_delivery_report.py +81 -0
  360. wavix/types/not_found_error_body.py +27 -0
  361. wavix/types/not_found_error_response.py +27 -0
  362. wavix/types/number.py +160 -0
  363. wavix/types/number_destination.py +38 -0
  364. wavix/types/number_document.py +58 -0
  365. wavix/types/number_list_response.py +32 -0
  366. wavix/types/number_status_updated_webhook.py +38 -0
  367. wavix/types/number_status_updated_webhook_status.py +5 -0
  368. wavix/types/number_validator_create_bulk_response.py +10 -0
  369. wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
  370. wavix/types/on_call_event_payload.py +34 -0
  371. wavix/types/on_call_event_payload_type.py +5 -0
  372. wavix/types/opt_out.py +27 -0
  373. wavix/types/opt_out_item.py +38 -0
  374. wavix/types/opt_outs_list_response.py +26 -0
  375. wavix/types/pagination.py +37 -0
  376. wavix/types/phone_lookup_details.py +32 -0
  377. wavix/types/phone_number_validation_type.py +5 -0
  378. wavix/types/phone_validation_batch_response.py +38 -0
  379. wavix/types/phone_validation_batch_result_response.py +41 -0
  380. wavix/types/phone_validation_response.py +112 -0
  381. wavix/types/phone_validation_result_response.py +115 -0
  382. wavix/types/profile_config_response.py +25 -0
  383. wavix/types/profile_response.py +79 -0
  384. wavix/types/profile_response_company_info.py +53 -0
  385. wavix/types/profile_response_company_info_country.py +31 -0
  386. wavix/types/profile_response_company_info_industry.py +22 -0
  387. wavix/types/profile_response_default_destinations_item.py +27 -0
  388. wavix/types/record_not_found_error_response.py +27 -0
  389. wavix/types/recording.py +57 -0
  390. wavix/types/recording_deleted_error_response.py +38 -0
  391. wavix/types/region.py +31 -0
  392. wavix/types/region_list_response.py +23 -0
  393. wavix/types/send_messages_response.py +100 -0
  394. wavix/types/sender_id.py +48 -0
  395. wavix/types/sender_id_details.py +44 -0
  396. wavix/types/sender_id_list_response.py +23 -0
  397. wavix/types/sender_id_response.py +48 -0
  398. wavix/types/sender_id_response_type.py +5 -0
  399. wavix/types/sender_id_type.py +5 -0
  400. wavix/types/short_link_metrics_item.py +69 -0
  401. wavix/types/short_link_metrics_response.py +26 -0
  402. wavix/types/short_link_response.py +22 -0
  403. wavix/types/sip_trunk_create_request.py +132 -0
  404. wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
  405. wavix/types/sip_trunk_create_request_host_request.py +26 -0
  406. wavix/types/sip_trunk_list_response.py +26 -0
  407. wavix/types/sip_trunk_response.py +145 -0
  408. wavix/types/sip_trunk_summary.py +114 -0
  409. wavix/types/sip_trunk_summary_host_request.py +31 -0
  410. wavix/types/sub_accounts_list_response.py +26 -0
  411. wavix/types/sub_accounts_transactions_list_response.py +30 -0
  412. wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
  413. wavix/types/sub_organization_response.py +59 -0
  414. wavix/types/sub_organization_response_default_destinations.py +31 -0
  415. wavix/types/sub_organization_response_status.py +5 -0
  416. wavix/types/submit_file_transcription_response.py +32 -0
  417. wavix/types/success_response.py +22 -0
  418. wavix/types/tcr_error_message.py +27 -0
  419. wavix/types/tcr_feedback.py +23 -0
  420. wavix/types/tcr_feedback_category.py +47 -0
  421. wavix/types/ten_dlc_brand.py +143 -0
  422. wavix/types/ten_dlc_brand_appeal.py +54 -0
  423. wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
  424. wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
  425. wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
  426. wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
  427. wavix/types/ten_dlc_brand_create_request.py +8 -0
  428. wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
  429. wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
  430. wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
  431. wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
  432. wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
  433. wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
  434. wavix/types/ten_dlc_brand_entity_type.py +7 -0
  435. wavix/types/ten_dlc_brand_evidence.py +38 -0
  436. wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
  437. wavix/types/ten_dlc_brand_list_response.py +33 -0
  438. wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
  439. wavix/types/ten_dlc_brand_qualification_result.py +33 -0
  440. wavix/types/ten_dlc_brand_status.py +7 -0
  441. wavix/types/ten_dlc_brand_vetting.py +71 -0
  442. wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
  443. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
  444. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
  445. wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
  446. wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
  447. wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
  448. wavix/types/ten_dlc_campaign.py +211 -0
  449. wavix/types/ten_dlc_campaign_list_response.py +33 -0
  450. wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
  451. wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
  452. wavix/types/ten_dlc_campaign_number.py +27 -0
  453. wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
  454. wavix/types/ten_dlc_event_subscription.py +31 -0
  455. wavix/types/ten_dlcmno_metadata.py +101 -0
  456. wavix/types/transaction_status.py +5 -0
  457. wavix/types/transaction_type.py +50 -0
  458. wavix/types/transcript_turn.py +46 -0
  459. wavix/types/transcription_filter.py +35 -0
  460. wavix/types/transcription_filter_agent.py +36 -0
  461. wavix/types/transcription_filter_any.py +36 -0
  462. wavix/types/transcription_filter_client.py +36 -0
  463. wavix/types/transcription_language.py +5 -0
  464. wavix/types/transcription_reference.py +29 -0
  465. wavix/types/transcription_status.py +5 -0
  466. wavix/types/tts_language.py +5 -0
  467. wavix/types/tts_voice_id.py +25 -0
  468. wavix/types/two_factor_verification_check_response.py +22 -0
  469. wavix/types/two_factor_verification_event.py +47 -0
  470. wavix/types/two_factor_verification_resend_response.py +38 -0
  471. wavix/types/two_factor_verification_response.py +51 -0
  472. wavix/types/unauthorized_error_response.py +32 -0
  473. wavix/types/unprocessable_entity_error_body.py +27 -0
  474. wavix/types/validation_error_response.py +27 -0
  475. wavix/types/voice_campaign_create_request.py +20 -0
  476. wavix/types/voice_campaign_response.py +41 -0
  477. wavix/types/voice_campaigns_create_response.py +20 -0
  478. wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
  479. wavix/types/voice_campaigns_get_response.py +20 -0
  480. wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
  481. wavix/types/web_rtc_token.py +43 -0
  482. wavix/types/web_rtc_token_response.py +44 -0
  483. wavix/types/web_rtc_tokens_list_response.py +30 -0
  484. wavix/version.py +3 -0
  485. wavix/voice_campaigns/__init__.py +4 -0
  486. wavix/voice_campaigns/client.py +197 -0
  487. wavix/voice_campaigns/raw_client.py +332 -0
  488. wavix/webrtc/__init__.py +34 -0
  489. wavix/webrtc/client.py +63 -0
  490. wavix/webrtc/raw_client.py +13 -0
  491. wavix/webrtc/tokens/__init__.py +4 -0
  492. wavix/webrtc/tokens/client.py +432 -0
  493. wavix/webrtc/tokens/raw_client.py +869 -0
  494. wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
  495. wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
  496. wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
  497. wavix_python_sdk-1.0.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,726 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+ from json.decoder import JSONDecodeError
6
+
7
+ from ..core.api_error import ApiError
8
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
10
+ from ..core.jsonable_encoder import encode_path_param
11
+ from ..core.parse_error import ParsingError
12
+ from ..core.pydantic_utilities import parse_obj_as
13
+ from ..core.request_options import RequestOptions
14
+ from ..errors.bad_request_error import BadRequestError
15
+ from ..errors.forbidden_error import ForbiddenError
16
+ from ..errors.not_found_error import NotFoundError
17
+ from ..errors.unauthorized_error import UnauthorizedError
18
+ from ..types.call_recording_list_response import CallRecordingListResponse
19
+ from ..types.recording import Recording
20
+ from ..types.success_response import SuccessResponse
21
+ from ..types.unauthorized_error_response import UnauthorizedErrorResponse
22
+ from pydantic import ValidationError
23
+
24
+
25
+ class RawCallRecordingClient:
26
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
27
+ self._client_wrapper = client_wrapper
28
+
29
+ def list(
30
+ self,
31
+ *,
32
+ from_date: typing.Optional[dt.date] = None,
33
+ to_date: typing.Optional[dt.date] = None,
34
+ from_: typing.Optional[str] = None,
35
+ to: typing.Optional[str] = None,
36
+ call_uuid: typing.Optional[str] = None,
37
+ sip_trunks: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
38
+ page: typing.Optional[int] = None,
39
+ per_page: typing.Optional[int] = None,
40
+ request_options: typing.Optional[RequestOptions] = None,
41
+ ) -> HttpResponse[CallRecordingListResponse]:
42
+ """
43
+ Returns a paginated list of call recordings for the authenticated account, filtered by date range, number, call, or SIP trunk.
44
+
45
+ Parameters
46
+ ----------
47
+ from_date : typing.Optional[dt.date]
48
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
49
+
50
+ to_date : typing.Optional[dt.date]
51
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
52
+
53
+ from_ : typing.Optional[str]
54
+ Filters recordings by originating phone number. Accepts a full or partial number.
55
+
56
+ to : typing.Optional[str]
57
+ Filters recordings by destination phone number. Accepts a full or partial number.
58
+
59
+ call_uuid : typing.Optional[str]
60
+ Filters recordings by the unique call ID.
61
+
62
+ sip_trunks : typing.Optional[typing.Union[str, typing.Sequence[str]]]
63
+ Filters recordings of outbound calls placed through the listed SIP trunk logins.
64
+
65
+ page : typing.Optional[int]
66
+ Page number to retrieve. Default `1`.
67
+
68
+ per_page : typing.Optional[int]
69
+ Number of records to return per page. Default `25`.
70
+
71
+ request_options : typing.Optional[RequestOptions]
72
+ Request-specific configuration.
73
+
74
+ Returns
75
+ -------
76
+ HttpResponse[CallRecordingListResponse]
77
+ Returns a paginated list of call recordings.
78
+ """
79
+ _response = self._client_wrapper.httpx_client.request(
80
+ "v1/recordings",
81
+ method="GET",
82
+ params={
83
+ "from_date": str(from_date) if from_date is not None else None,
84
+ "to_date": str(to_date) if to_date is not None else None,
85
+ "from": from_,
86
+ "to": to,
87
+ "call_uuid": call_uuid,
88
+ "sip_trunks": sip_trunks,
89
+ "page": page,
90
+ "per_page": per_page,
91
+ },
92
+ request_options=request_options,
93
+ )
94
+ try:
95
+ if 200 <= _response.status_code < 300:
96
+ _data = typing.cast(
97
+ CallRecordingListResponse,
98
+ parse_obj_as(
99
+ type_=CallRecordingListResponse, # type: ignore
100
+ object_=_response.json(),
101
+ ),
102
+ )
103
+ return HttpResponse(response=_response, data=_data)
104
+ if _response.status_code == 401:
105
+ raise UnauthorizedError(
106
+ headers=dict(_response.headers),
107
+ body=typing.cast(
108
+ UnauthorizedErrorResponse,
109
+ parse_obj_as(
110
+ type_=UnauthorizedErrorResponse, # type: ignore
111
+ object_=_response.json(),
112
+ ),
113
+ ),
114
+ )
115
+ if _response.status_code == 403:
116
+ raise ForbiddenError(
117
+ headers=dict(_response.headers),
118
+ body=typing.cast(
119
+ typing.Any,
120
+ parse_obj_as(
121
+ type_=typing.Any, # type: ignore
122
+ object_=_response.json(),
123
+ ),
124
+ ),
125
+ )
126
+ _response_json = _response.json()
127
+ except JSONDecodeError:
128
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
129
+ except ValidationError as e:
130
+ raise ParsingError(
131
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
132
+ )
133
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
134
+
135
+ def get_by_call(
136
+ self, call_id: str, *, request_options: typing.Optional[RequestOptions] = None
137
+ ) -> HttpResponse[None]:
138
+ """
139
+ Redirects to the recording file for the call identified by `call_id`. The download URL is returned in the `Location` header.
140
+
141
+ Parameters
142
+ ----------
143
+ call_id : str
144
+ The unique ID of the call whose recording is retrieved.
145
+
146
+ request_options : typing.Optional[RequestOptions]
147
+ Request-specific configuration.
148
+
149
+ Returns
150
+ -------
151
+ HttpResponse[None]
152
+ """
153
+ _response = self._client_wrapper.httpx_client.request(
154
+ f"v1/recordings/{encode_path_param(call_id)}",
155
+ method="GET",
156
+ request_options=request_options,
157
+ )
158
+ try:
159
+ if 200 <= _response.status_code < 300:
160
+ return HttpResponse(response=_response, data=None)
161
+ if _response.status_code == 400:
162
+ raise BadRequestError(
163
+ headers=dict(_response.headers),
164
+ body=typing.cast(
165
+ typing.Any,
166
+ parse_obj_as(
167
+ type_=typing.Any, # type: ignore
168
+ object_=_response.json(),
169
+ ),
170
+ ),
171
+ )
172
+ if _response.status_code == 401:
173
+ raise UnauthorizedError(
174
+ headers=dict(_response.headers),
175
+ body=typing.cast(
176
+ UnauthorizedErrorResponse,
177
+ parse_obj_as(
178
+ type_=UnauthorizedErrorResponse, # type: ignore
179
+ object_=_response.json(),
180
+ ),
181
+ ),
182
+ )
183
+ if _response.status_code == 403:
184
+ raise ForbiddenError(
185
+ headers=dict(_response.headers),
186
+ body=typing.cast(
187
+ typing.Any,
188
+ parse_obj_as(
189
+ type_=typing.Any, # type: ignore
190
+ object_=_response.json(),
191
+ ),
192
+ ),
193
+ )
194
+ if _response.status_code == 404:
195
+ raise NotFoundError(
196
+ headers=dict(_response.headers),
197
+ body=typing.cast(
198
+ typing.Any,
199
+ parse_obj_as(
200
+ type_=typing.Any, # type: ignore
201
+ object_=_response.json(),
202
+ ),
203
+ ),
204
+ )
205
+ _response_json = _response.json()
206
+ except JSONDecodeError:
207
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
208
+ except ValidationError as e:
209
+ raise ParsingError(
210
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
211
+ )
212
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
213
+
214
+ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Recording]:
215
+ """
216
+ Returns the call recording identified by `id`, including its metadata and download URL.
217
+
218
+ Parameters
219
+ ----------
220
+ id : int
221
+ The unique ID of the call recording.
222
+
223
+ request_options : typing.Optional[RequestOptions]
224
+ Request-specific configuration.
225
+
226
+ Returns
227
+ -------
228
+ HttpResponse[Recording]
229
+ Returns the call recording.
230
+ """
231
+ _response = self._client_wrapper.httpx_client.request(
232
+ f"v1/recordings/{encode_path_param(id)}",
233
+ method="GET",
234
+ request_options=request_options,
235
+ )
236
+ try:
237
+ if 200 <= _response.status_code < 300:
238
+ _data = typing.cast(
239
+ Recording,
240
+ parse_obj_as(
241
+ type_=Recording, # type: ignore
242
+ object_=_response.json(),
243
+ ),
244
+ )
245
+ return HttpResponse(response=_response, data=_data)
246
+ if _response.status_code == 401:
247
+ raise UnauthorizedError(
248
+ headers=dict(_response.headers),
249
+ body=typing.cast(
250
+ UnauthorizedErrorResponse,
251
+ parse_obj_as(
252
+ type_=UnauthorizedErrorResponse, # type: ignore
253
+ object_=_response.json(),
254
+ ),
255
+ ),
256
+ )
257
+ if _response.status_code == 403:
258
+ raise ForbiddenError(
259
+ headers=dict(_response.headers),
260
+ body=typing.cast(
261
+ typing.Any,
262
+ parse_obj_as(
263
+ type_=typing.Any, # type: ignore
264
+ object_=_response.json(),
265
+ ),
266
+ ),
267
+ )
268
+ if _response.status_code == 404:
269
+ raise NotFoundError(
270
+ headers=dict(_response.headers),
271
+ body=typing.cast(
272
+ typing.Any,
273
+ parse_obj_as(
274
+ type_=typing.Any, # type: ignore
275
+ object_=_response.json(),
276
+ ),
277
+ ),
278
+ )
279
+ _response_json = _response.json()
280
+ except JSONDecodeError:
281
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
282
+ except ValidationError as e:
283
+ raise ParsingError(
284
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
285
+ )
286
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
287
+
288
+ def delete(
289
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
290
+ ) -> HttpResponse[SuccessResponse]:
291
+ """
292
+ Deletes the call recording identified by `id`. Deletion is permanent and removes the recording file.
293
+
294
+ Parameters
295
+ ----------
296
+ id : int
297
+ The unique ID of the call recording.
298
+
299
+ request_options : typing.Optional[RequestOptions]
300
+ Request-specific configuration.
301
+
302
+ Returns
303
+ -------
304
+ HttpResponse[SuccessResponse]
305
+ Returns a success confirmation. The recording is deleted.
306
+ """
307
+ _response = self._client_wrapper.httpx_client.request(
308
+ f"v1/recordings/{encode_path_param(id)}",
309
+ method="DELETE",
310
+ request_options=request_options,
311
+ )
312
+ try:
313
+ if 200 <= _response.status_code < 300:
314
+ _data = typing.cast(
315
+ SuccessResponse,
316
+ parse_obj_as(
317
+ type_=SuccessResponse, # type: ignore
318
+ object_=_response.json(),
319
+ ),
320
+ )
321
+ return HttpResponse(response=_response, data=_data)
322
+ if _response.status_code == 400:
323
+ raise BadRequestError(
324
+ headers=dict(_response.headers),
325
+ body=typing.cast(
326
+ typing.Any,
327
+ parse_obj_as(
328
+ type_=typing.Any, # type: ignore
329
+ object_=_response.json(),
330
+ ),
331
+ ),
332
+ )
333
+ if _response.status_code == 401:
334
+ raise UnauthorizedError(
335
+ headers=dict(_response.headers),
336
+ body=typing.cast(
337
+ UnauthorizedErrorResponse,
338
+ parse_obj_as(
339
+ type_=UnauthorizedErrorResponse, # type: ignore
340
+ object_=_response.json(),
341
+ ),
342
+ ),
343
+ )
344
+ if _response.status_code == 403:
345
+ raise ForbiddenError(
346
+ headers=dict(_response.headers),
347
+ body=typing.cast(
348
+ typing.Any,
349
+ parse_obj_as(
350
+ type_=typing.Any, # type: ignore
351
+ object_=_response.json(),
352
+ ),
353
+ ),
354
+ )
355
+ if _response.status_code == 404:
356
+ raise NotFoundError(
357
+ headers=dict(_response.headers),
358
+ body=typing.cast(
359
+ typing.Any,
360
+ parse_obj_as(
361
+ type_=typing.Any, # type: ignore
362
+ object_=_response.json(),
363
+ ),
364
+ ),
365
+ )
366
+ _response_json = _response.json()
367
+ except JSONDecodeError:
368
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
369
+ except ValidationError as e:
370
+ raise ParsingError(
371
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
372
+ )
373
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
374
+
375
+
376
+ class AsyncRawCallRecordingClient:
377
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
378
+ self._client_wrapper = client_wrapper
379
+
380
+ async def list(
381
+ self,
382
+ *,
383
+ from_date: typing.Optional[dt.date] = None,
384
+ to_date: typing.Optional[dt.date] = None,
385
+ from_: typing.Optional[str] = None,
386
+ to: typing.Optional[str] = None,
387
+ call_uuid: typing.Optional[str] = None,
388
+ sip_trunks: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
389
+ page: typing.Optional[int] = None,
390
+ per_page: typing.Optional[int] = None,
391
+ request_options: typing.Optional[RequestOptions] = None,
392
+ ) -> AsyncHttpResponse[CallRecordingListResponse]:
393
+ """
394
+ Returns a paginated list of call recordings for the authenticated account, filtered by date range, number, call, or SIP trunk.
395
+
396
+ Parameters
397
+ ----------
398
+ from_date : typing.Optional[dt.date]
399
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
400
+
401
+ to_date : typing.Optional[dt.date]
402
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
403
+
404
+ from_ : typing.Optional[str]
405
+ Filters recordings by originating phone number. Accepts a full or partial number.
406
+
407
+ to : typing.Optional[str]
408
+ Filters recordings by destination phone number. Accepts a full or partial number.
409
+
410
+ call_uuid : typing.Optional[str]
411
+ Filters recordings by the unique call ID.
412
+
413
+ sip_trunks : typing.Optional[typing.Union[str, typing.Sequence[str]]]
414
+ Filters recordings of outbound calls placed through the listed SIP trunk logins.
415
+
416
+ page : typing.Optional[int]
417
+ Page number to retrieve. Default `1`.
418
+
419
+ per_page : typing.Optional[int]
420
+ Number of records to return per page. Default `25`.
421
+
422
+ request_options : typing.Optional[RequestOptions]
423
+ Request-specific configuration.
424
+
425
+ Returns
426
+ -------
427
+ AsyncHttpResponse[CallRecordingListResponse]
428
+ Returns a paginated list of call recordings.
429
+ """
430
+ _response = await self._client_wrapper.httpx_client.request(
431
+ "v1/recordings",
432
+ method="GET",
433
+ params={
434
+ "from_date": str(from_date) if from_date is not None else None,
435
+ "to_date": str(to_date) if to_date is not None else None,
436
+ "from": from_,
437
+ "to": to,
438
+ "call_uuid": call_uuid,
439
+ "sip_trunks": sip_trunks,
440
+ "page": page,
441
+ "per_page": per_page,
442
+ },
443
+ request_options=request_options,
444
+ )
445
+ try:
446
+ if 200 <= _response.status_code < 300:
447
+ _data = typing.cast(
448
+ CallRecordingListResponse,
449
+ parse_obj_as(
450
+ type_=CallRecordingListResponse, # type: ignore
451
+ object_=_response.json(),
452
+ ),
453
+ )
454
+ return AsyncHttpResponse(response=_response, data=_data)
455
+ if _response.status_code == 401:
456
+ raise UnauthorizedError(
457
+ headers=dict(_response.headers),
458
+ body=typing.cast(
459
+ UnauthorizedErrorResponse,
460
+ parse_obj_as(
461
+ type_=UnauthorizedErrorResponse, # type: ignore
462
+ object_=_response.json(),
463
+ ),
464
+ ),
465
+ )
466
+ if _response.status_code == 403:
467
+ raise ForbiddenError(
468
+ headers=dict(_response.headers),
469
+ body=typing.cast(
470
+ typing.Any,
471
+ parse_obj_as(
472
+ type_=typing.Any, # type: ignore
473
+ object_=_response.json(),
474
+ ),
475
+ ),
476
+ )
477
+ _response_json = _response.json()
478
+ except JSONDecodeError:
479
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
480
+ except ValidationError as e:
481
+ raise ParsingError(
482
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
483
+ )
484
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
485
+
486
+ async def get_by_call(
487
+ self, call_id: str, *, request_options: typing.Optional[RequestOptions] = None
488
+ ) -> AsyncHttpResponse[None]:
489
+ """
490
+ Redirects to the recording file for the call identified by `call_id`. The download URL is returned in the `Location` header.
491
+
492
+ Parameters
493
+ ----------
494
+ call_id : str
495
+ The unique ID of the call whose recording is retrieved.
496
+
497
+ request_options : typing.Optional[RequestOptions]
498
+ Request-specific configuration.
499
+
500
+ Returns
501
+ -------
502
+ AsyncHttpResponse[None]
503
+ """
504
+ _response = await self._client_wrapper.httpx_client.request(
505
+ f"v1/recordings/{encode_path_param(call_id)}",
506
+ method="GET",
507
+ request_options=request_options,
508
+ )
509
+ try:
510
+ if 200 <= _response.status_code < 300:
511
+ return AsyncHttpResponse(response=_response, data=None)
512
+ if _response.status_code == 400:
513
+ raise BadRequestError(
514
+ headers=dict(_response.headers),
515
+ body=typing.cast(
516
+ typing.Any,
517
+ parse_obj_as(
518
+ type_=typing.Any, # type: ignore
519
+ object_=_response.json(),
520
+ ),
521
+ ),
522
+ )
523
+ if _response.status_code == 401:
524
+ raise UnauthorizedError(
525
+ headers=dict(_response.headers),
526
+ body=typing.cast(
527
+ UnauthorizedErrorResponse,
528
+ parse_obj_as(
529
+ type_=UnauthorizedErrorResponse, # type: ignore
530
+ object_=_response.json(),
531
+ ),
532
+ ),
533
+ )
534
+ if _response.status_code == 403:
535
+ raise ForbiddenError(
536
+ headers=dict(_response.headers),
537
+ body=typing.cast(
538
+ typing.Any,
539
+ parse_obj_as(
540
+ type_=typing.Any, # type: ignore
541
+ object_=_response.json(),
542
+ ),
543
+ ),
544
+ )
545
+ if _response.status_code == 404:
546
+ raise NotFoundError(
547
+ headers=dict(_response.headers),
548
+ body=typing.cast(
549
+ typing.Any,
550
+ parse_obj_as(
551
+ type_=typing.Any, # type: ignore
552
+ object_=_response.json(),
553
+ ),
554
+ ),
555
+ )
556
+ _response_json = _response.json()
557
+ except JSONDecodeError:
558
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
559
+ except ValidationError as e:
560
+ raise ParsingError(
561
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
562
+ )
563
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
564
+
565
+ async def get(
566
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
567
+ ) -> AsyncHttpResponse[Recording]:
568
+ """
569
+ Returns the call recording identified by `id`, including its metadata and download URL.
570
+
571
+ Parameters
572
+ ----------
573
+ id : int
574
+ The unique ID of the call recording.
575
+
576
+ request_options : typing.Optional[RequestOptions]
577
+ Request-specific configuration.
578
+
579
+ Returns
580
+ -------
581
+ AsyncHttpResponse[Recording]
582
+ Returns the call recording.
583
+ """
584
+ _response = await self._client_wrapper.httpx_client.request(
585
+ f"v1/recordings/{encode_path_param(id)}",
586
+ method="GET",
587
+ request_options=request_options,
588
+ )
589
+ try:
590
+ if 200 <= _response.status_code < 300:
591
+ _data = typing.cast(
592
+ Recording,
593
+ parse_obj_as(
594
+ type_=Recording, # type: ignore
595
+ object_=_response.json(),
596
+ ),
597
+ )
598
+ return AsyncHttpResponse(response=_response, data=_data)
599
+ if _response.status_code == 401:
600
+ raise UnauthorizedError(
601
+ headers=dict(_response.headers),
602
+ body=typing.cast(
603
+ UnauthorizedErrorResponse,
604
+ parse_obj_as(
605
+ type_=UnauthorizedErrorResponse, # type: ignore
606
+ object_=_response.json(),
607
+ ),
608
+ ),
609
+ )
610
+ if _response.status_code == 403:
611
+ raise ForbiddenError(
612
+ headers=dict(_response.headers),
613
+ body=typing.cast(
614
+ typing.Any,
615
+ parse_obj_as(
616
+ type_=typing.Any, # type: ignore
617
+ object_=_response.json(),
618
+ ),
619
+ ),
620
+ )
621
+ if _response.status_code == 404:
622
+ raise NotFoundError(
623
+ headers=dict(_response.headers),
624
+ body=typing.cast(
625
+ typing.Any,
626
+ parse_obj_as(
627
+ type_=typing.Any, # type: ignore
628
+ object_=_response.json(),
629
+ ),
630
+ ),
631
+ )
632
+ _response_json = _response.json()
633
+ except JSONDecodeError:
634
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
635
+ except ValidationError as e:
636
+ raise ParsingError(
637
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
638
+ )
639
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
640
+
641
+ async def delete(
642
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
643
+ ) -> AsyncHttpResponse[SuccessResponse]:
644
+ """
645
+ Deletes the call recording identified by `id`. Deletion is permanent and removes the recording file.
646
+
647
+ Parameters
648
+ ----------
649
+ id : int
650
+ The unique ID of the call recording.
651
+
652
+ request_options : typing.Optional[RequestOptions]
653
+ Request-specific configuration.
654
+
655
+ Returns
656
+ -------
657
+ AsyncHttpResponse[SuccessResponse]
658
+ Returns a success confirmation. The recording is deleted.
659
+ """
660
+ _response = await self._client_wrapper.httpx_client.request(
661
+ f"v1/recordings/{encode_path_param(id)}",
662
+ method="DELETE",
663
+ request_options=request_options,
664
+ )
665
+ try:
666
+ if 200 <= _response.status_code < 300:
667
+ _data = typing.cast(
668
+ SuccessResponse,
669
+ parse_obj_as(
670
+ type_=SuccessResponse, # type: ignore
671
+ object_=_response.json(),
672
+ ),
673
+ )
674
+ return AsyncHttpResponse(response=_response, data=_data)
675
+ if _response.status_code == 400:
676
+ raise BadRequestError(
677
+ headers=dict(_response.headers),
678
+ body=typing.cast(
679
+ typing.Any,
680
+ parse_obj_as(
681
+ type_=typing.Any, # type: ignore
682
+ object_=_response.json(),
683
+ ),
684
+ ),
685
+ )
686
+ if _response.status_code == 401:
687
+ raise UnauthorizedError(
688
+ headers=dict(_response.headers),
689
+ body=typing.cast(
690
+ UnauthorizedErrorResponse,
691
+ parse_obj_as(
692
+ type_=UnauthorizedErrorResponse, # type: ignore
693
+ object_=_response.json(),
694
+ ),
695
+ ),
696
+ )
697
+ if _response.status_code == 403:
698
+ raise ForbiddenError(
699
+ headers=dict(_response.headers),
700
+ body=typing.cast(
701
+ typing.Any,
702
+ parse_obj_as(
703
+ type_=typing.Any, # type: ignore
704
+ object_=_response.json(),
705
+ ),
706
+ ),
707
+ )
708
+ if _response.status_code == 404:
709
+ raise NotFoundError(
710
+ headers=dict(_response.headers),
711
+ body=typing.cast(
712
+ typing.Any,
713
+ parse_obj_as(
714
+ type_=typing.Any, # type: ignore
715
+ object_=_response.json(),
716
+ ),
717
+ ),
718
+ )
719
+ _response_json = _response.json()
720
+ except JSONDecodeError:
721
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
722
+ except ValidationError as e:
723
+ raise ParsingError(
724
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
725
+ )
726
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)