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,775 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import encode_path_param
10
+ from ..core.parse_error import ParsingError
11
+ from ..core.pydantic_utilities import parse_obj_as
12
+ from ..core.request_options import RequestOptions
13
+ from ..core.serialization import convert_and_respect_annotation_metadata
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 ..errors.unprocessable_entity_error import UnprocessableEntityError
19
+ from ..types.sub_accounts_list_response import SubAccountsListResponse
20
+ from ..types.sub_organization_response import SubOrganizationResponse
21
+ from ..types.unauthorized_error_response import UnauthorizedErrorResponse
22
+ from .types.list_sub_accounts_request_status import ListSubAccountsRequestStatus
23
+ from .types.sub_accounts_create_request_default_destinations import SubAccountsCreateRequestDefaultDestinations
24
+ from .types.sub_accounts_update_request_default_destinations import SubAccountsUpdateRequestDefaultDestinations
25
+ from .types.sub_accounts_update_request_status import SubAccountsUpdateRequestStatus
26
+ from pydantic import ValidationError
27
+
28
+ # this is used as the default value for optional parameters
29
+ OMIT = typing.cast(typing.Any, ...)
30
+
31
+
32
+ class RawSubAccountsClient:
33
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
34
+ self._client_wrapper = client_wrapper
35
+
36
+ def list(
37
+ self,
38
+ *,
39
+ status: typing.Optional[ListSubAccountsRequestStatus] = None,
40
+ request_options: typing.Optional[RequestOptions] = None,
41
+ ) -> HttpResponse[SubAccountsListResponse]:
42
+ """
43
+ Returns a paginated list of sub-accounts under the authenticated master account.
44
+
45
+ Parameters
46
+ ----------
47
+ status : typing.Optional[ListSubAccountsRequestStatus]
48
+ Filters sub-accounts by status. One of `enabled` (the sub-account is active) or `disabled` (the sub-account is suspended).
49
+
50
+ request_options : typing.Optional[RequestOptions]
51
+ Request-specific configuration.
52
+
53
+ Returns
54
+ -------
55
+ HttpResponse[SubAccountsListResponse]
56
+ Returns a paginated list of sub-accounts.
57
+ """
58
+ _response = self._client_wrapper.httpx_client.request(
59
+ "v1/sub-organizations",
60
+ method="GET",
61
+ params={
62
+ "status": status,
63
+ },
64
+ request_options=request_options,
65
+ )
66
+ try:
67
+ if 200 <= _response.status_code < 300:
68
+ _data = typing.cast(
69
+ SubAccountsListResponse,
70
+ parse_obj_as(
71
+ type_=SubAccountsListResponse, # type: ignore
72
+ object_=_response.json(),
73
+ ),
74
+ )
75
+ return HttpResponse(response=_response, data=_data)
76
+ if _response.status_code == 401:
77
+ raise UnauthorizedError(
78
+ headers=dict(_response.headers),
79
+ body=typing.cast(
80
+ UnauthorizedErrorResponse,
81
+ parse_obj_as(
82
+ type_=UnauthorizedErrorResponse, # type: ignore
83
+ object_=_response.json(),
84
+ ),
85
+ ),
86
+ )
87
+ if _response.status_code == 403:
88
+ raise ForbiddenError(
89
+ headers=dict(_response.headers),
90
+ body=typing.cast(
91
+ typing.Any,
92
+ parse_obj_as(
93
+ type_=typing.Any, # type: ignore
94
+ object_=_response.json(),
95
+ ),
96
+ ),
97
+ )
98
+ _response_json = _response.json()
99
+ except JSONDecodeError:
100
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
101
+ except ValidationError as e:
102
+ raise ParsingError(
103
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
104
+ )
105
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
106
+
107
+ def create(
108
+ self,
109
+ *,
110
+ name: str,
111
+ default_destinations: typing.Optional[SubAccountsCreateRequestDefaultDestinations] = OMIT,
112
+ request_options: typing.Optional[RequestOptions] = None,
113
+ ) -> HttpResponse[SubOrganizationResponse]:
114
+ """
115
+ Creates a sub-account under the authenticated master account. Returns the sub-account with its generated `api_key`.
116
+
117
+ Parameters
118
+ ----------
119
+ name : str
120
+ Sub-account name.
121
+
122
+ default_destinations : typing.Optional[SubAccountsCreateRequestDefaultDestinations]
123
+ Default webhook URLs for inbound messages and delivery reports.
124
+
125
+ request_options : typing.Optional[RequestOptions]
126
+ Request-specific configuration.
127
+
128
+ Returns
129
+ -------
130
+ HttpResponse[SubOrganizationResponse]
131
+ Returns the created sub-account.
132
+ """
133
+ _response = self._client_wrapper.httpx_client.request(
134
+ "v1/sub-organizations",
135
+ method="POST",
136
+ json={
137
+ "name": name,
138
+ "default_destinations": convert_and_respect_annotation_metadata(
139
+ object_=default_destinations,
140
+ annotation=SubAccountsCreateRequestDefaultDestinations,
141
+ direction="write",
142
+ ),
143
+ },
144
+ headers={
145
+ "content-type": "application/json",
146
+ },
147
+ request_options=request_options,
148
+ omit=OMIT,
149
+ )
150
+ try:
151
+ if 200 <= _response.status_code < 300:
152
+ _data = typing.cast(
153
+ SubOrganizationResponse,
154
+ parse_obj_as(
155
+ type_=SubOrganizationResponse, # type: ignore
156
+ object_=_response.json(),
157
+ ),
158
+ )
159
+ return HttpResponse(response=_response, data=_data)
160
+ if _response.status_code == 400:
161
+ raise BadRequestError(
162
+ headers=dict(_response.headers),
163
+ body=typing.cast(
164
+ typing.Any,
165
+ parse_obj_as(
166
+ type_=typing.Any, # type: ignore
167
+ object_=_response.json(),
168
+ ),
169
+ ),
170
+ )
171
+ if _response.status_code == 403:
172
+ raise ForbiddenError(
173
+ headers=dict(_response.headers),
174
+ body=typing.cast(
175
+ typing.Any,
176
+ parse_obj_as(
177
+ type_=typing.Any, # type: ignore
178
+ object_=_response.json(),
179
+ ),
180
+ ),
181
+ )
182
+ if _response.status_code == 422:
183
+ raise UnprocessableEntityError(
184
+ headers=dict(_response.headers),
185
+ body=typing.cast(
186
+ typing.Any,
187
+ parse_obj_as(
188
+ type_=typing.Any, # type: ignore
189
+ object_=_response.json(),
190
+ ),
191
+ ),
192
+ )
193
+ _response_json = _response.json()
194
+ except JSONDecodeError:
195
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
196
+ except ValidationError as e:
197
+ raise ParsingError(
198
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
199
+ )
200
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
201
+
202
+ def get(
203
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
204
+ ) -> HttpResponse[SubOrganizationResponse]:
205
+ """
206
+ Returns the sub-account identified by `id`.
207
+
208
+ Parameters
209
+ ----------
210
+ id : int
211
+ The unique ID of the sub-account.
212
+
213
+ request_options : typing.Optional[RequestOptions]
214
+ Request-specific configuration.
215
+
216
+ Returns
217
+ -------
218
+ HttpResponse[SubOrganizationResponse]
219
+ Returns the sub-account.
220
+ """
221
+ _response = self._client_wrapper.httpx_client.request(
222
+ f"v1/sub-organizations/{encode_path_param(id)}",
223
+ method="GET",
224
+ request_options=request_options,
225
+ )
226
+ try:
227
+ if 200 <= _response.status_code < 300:
228
+ _data = typing.cast(
229
+ SubOrganizationResponse,
230
+ parse_obj_as(
231
+ type_=SubOrganizationResponse, # type: ignore
232
+ object_=_response.json(),
233
+ ),
234
+ )
235
+ return HttpResponse(response=_response, data=_data)
236
+ if _response.status_code == 401:
237
+ raise UnauthorizedError(
238
+ headers=dict(_response.headers),
239
+ body=typing.cast(
240
+ UnauthorizedErrorResponse,
241
+ parse_obj_as(
242
+ type_=UnauthorizedErrorResponse, # type: ignore
243
+ object_=_response.json(),
244
+ ),
245
+ ),
246
+ )
247
+ if _response.status_code == 403:
248
+ raise ForbiddenError(
249
+ headers=dict(_response.headers),
250
+ body=typing.cast(
251
+ typing.Any,
252
+ parse_obj_as(
253
+ type_=typing.Any, # type: ignore
254
+ object_=_response.json(),
255
+ ),
256
+ ),
257
+ )
258
+ if _response.status_code == 404:
259
+ raise NotFoundError(
260
+ headers=dict(_response.headers),
261
+ body=typing.cast(
262
+ typing.Any,
263
+ parse_obj_as(
264
+ type_=typing.Any, # type: ignore
265
+ object_=_response.json(),
266
+ ),
267
+ ),
268
+ )
269
+ _response_json = _response.json()
270
+ except JSONDecodeError:
271
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
272
+ except ValidationError as e:
273
+ raise ParsingError(
274
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
275
+ )
276
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
277
+
278
+ def update(
279
+ self,
280
+ id: int,
281
+ *,
282
+ name: str,
283
+ status: typing.Optional[SubAccountsUpdateRequestStatus] = OMIT,
284
+ default_destinations: typing.Optional[SubAccountsUpdateRequestDefaultDestinations] = OMIT,
285
+ request_options: typing.Optional[RequestOptions] = None,
286
+ ) -> HttpResponse[SubOrganizationResponse]:
287
+ """
288
+ Replaces the configuration of the sub-account identified by `id`. Omitted fields revert to their defaults.
289
+
290
+ Parameters
291
+ ----------
292
+ id : int
293
+ The unique ID of the sub-account.
294
+
295
+ name : str
296
+ Sub-account name.
297
+
298
+ status : typing.Optional[SubAccountsUpdateRequestStatus]
299
+ Status of the subaccount. One of `enabled` (the subaccount is active and can be used) or `disabled` (the subaccount is suspended).
300
+
301
+ default_destinations : typing.Optional[SubAccountsUpdateRequestDefaultDestinations]
302
+ Default webhook URLs for inbound messages and delivery reports.
303
+
304
+ request_options : typing.Optional[RequestOptions]
305
+ Request-specific configuration.
306
+
307
+ Returns
308
+ -------
309
+ HttpResponse[SubOrganizationResponse]
310
+ Returns the updated sub-account.
311
+ """
312
+ _response = self._client_wrapper.httpx_client.request(
313
+ f"v1/sub-organizations/{encode_path_param(id)}",
314
+ method="PUT",
315
+ json={
316
+ "name": name,
317
+ "status": status,
318
+ "default_destinations": convert_and_respect_annotation_metadata(
319
+ object_=default_destinations,
320
+ annotation=SubAccountsUpdateRequestDefaultDestinations,
321
+ direction="write",
322
+ ),
323
+ },
324
+ headers={
325
+ "content-type": "application/json",
326
+ },
327
+ request_options=request_options,
328
+ omit=OMIT,
329
+ )
330
+ try:
331
+ if 200 <= _response.status_code < 300:
332
+ _data = typing.cast(
333
+ SubOrganizationResponse,
334
+ parse_obj_as(
335
+ type_=SubOrganizationResponse, # type: ignore
336
+ object_=_response.json(),
337
+ ),
338
+ )
339
+ return HttpResponse(response=_response, data=_data)
340
+ if _response.status_code == 400:
341
+ raise BadRequestError(
342
+ headers=dict(_response.headers),
343
+ body=typing.cast(
344
+ typing.Any,
345
+ parse_obj_as(
346
+ type_=typing.Any, # type: ignore
347
+ object_=_response.json(),
348
+ ),
349
+ ),
350
+ )
351
+ if _response.status_code == 401:
352
+ raise UnauthorizedError(
353
+ headers=dict(_response.headers),
354
+ body=typing.cast(
355
+ UnauthorizedErrorResponse,
356
+ parse_obj_as(
357
+ type_=UnauthorizedErrorResponse, # type: ignore
358
+ object_=_response.json(),
359
+ ),
360
+ ),
361
+ )
362
+ if _response.status_code == 403:
363
+ raise ForbiddenError(
364
+ headers=dict(_response.headers),
365
+ body=typing.cast(
366
+ typing.Any,
367
+ parse_obj_as(
368
+ type_=typing.Any, # type: ignore
369
+ object_=_response.json(),
370
+ ),
371
+ ),
372
+ )
373
+ if _response.status_code == 404:
374
+ raise NotFoundError(
375
+ headers=dict(_response.headers),
376
+ body=typing.cast(
377
+ typing.Any,
378
+ parse_obj_as(
379
+ type_=typing.Any, # type: ignore
380
+ object_=_response.json(),
381
+ ),
382
+ ),
383
+ )
384
+ if _response.status_code == 422:
385
+ raise UnprocessableEntityError(
386
+ headers=dict(_response.headers),
387
+ body=typing.cast(
388
+ typing.Any,
389
+ parse_obj_as(
390
+ type_=typing.Any, # type: ignore
391
+ object_=_response.json(),
392
+ ),
393
+ ),
394
+ )
395
+ _response_json = _response.json()
396
+ except JSONDecodeError:
397
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
398
+ except ValidationError as e:
399
+ raise ParsingError(
400
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
401
+ )
402
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
403
+
404
+
405
+ class AsyncRawSubAccountsClient:
406
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
407
+ self._client_wrapper = client_wrapper
408
+
409
+ async def list(
410
+ self,
411
+ *,
412
+ status: typing.Optional[ListSubAccountsRequestStatus] = None,
413
+ request_options: typing.Optional[RequestOptions] = None,
414
+ ) -> AsyncHttpResponse[SubAccountsListResponse]:
415
+ """
416
+ Returns a paginated list of sub-accounts under the authenticated master account.
417
+
418
+ Parameters
419
+ ----------
420
+ status : typing.Optional[ListSubAccountsRequestStatus]
421
+ Filters sub-accounts by status. One of `enabled` (the sub-account is active) or `disabled` (the sub-account is suspended).
422
+
423
+ request_options : typing.Optional[RequestOptions]
424
+ Request-specific configuration.
425
+
426
+ Returns
427
+ -------
428
+ AsyncHttpResponse[SubAccountsListResponse]
429
+ Returns a paginated list of sub-accounts.
430
+ """
431
+ _response = await self._client_wrapper.httpx_client.request(
432
+ "v1/sub-organizations",
433
+ method="GET",
434
+ params={
435
+ "status": status,
436
+ },
437
+ request_options=request_options,
438
+ )
439
+ try:
440
+ if 200 <= _response.status_code < 300:
441
+ _data = typing.cast(
442
+ SubAccountsListResponse,
443
+ parse_obj_as(
444
+ type_=SubAccountsListResponse, # type: ignore
445
+ object_=_response.json(),
446
+ ),
447
+ )
448
+ return AsyncHttpResponse(response=_response, data=_data)
449
+ if _response.status_code == 401:
450
+ raise UnauthorizedError(
451
+ headers=dict(_response.headers),
452
+ body=typing.cast(
453
+ UnauthorizedErrorResponse,
454
+ parse_obj_as(
455
+ type_=UnauthorizedErrorResponse, # type: ignore
456
+ object_=_response.json(),
457
+ ),
458
+ ),
459
+ )
460
+ if _response.status_code == 403:
461
+ raise ForbiddenError(
462
+ headers=dict(_response.headers),
463
+ body=typing.cast(
464
+ typing.Any,
465
+ parse_obj_as(
466
+ type_=typing.Any, # type: ignore
467
+ object_=_response.json(),
468
+ ),
469
+ ),
470
+ )
471
+ _response_json = _response.json()
472
+ except JSONDecodeError:
473
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
474
+ except ValidationError as e:
475
+ raise ParsingError(
476
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
477
+ )
478
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
479
+
480
+ async def create(
481
+ self,
482
+ *,
483
+ name: str,
484
+ default_destinations: typing.Optional[SubAccountsCreateRequestDefaultDestinations] = OMIT,
485
+ request_options: typing.Optional[RequestOptions] = None,
486
+ ) -> AsyncHttpResponse[SubOrganizationResponse]:
487
+ """
488
+ Creates a sub-account under the authenticated master account. Returns the sub-account with its generated `api_key`.
489
+
490
+ Parameters
491
+ ----------
492
+ name : str
493
+ Sub-account name.
494
+
495
+ default_destinations : typing.Optional[SubAccountsCreateRequestDefaultDestinations]
496
+ Default webhook URLs for inbound messages and delivery reports.
497
+
498
+ request_options : typing.Optional[RequestOptions]
499
+ Request-specific configuration.
500
+
501
+ Returns
502
+ -------
503
+ AsyncHttpResponse[SubOrganizationResponse]
504
+ Returns the created sub-account.
505
+ """
506
+ _response = await self._client_wrapper.httpx_client.request(
507
+ "v1/sub-organizations",
508
+ method="POST",
509
+ json={
510
+ "name": name,
511
+ "default_destinations": convert_and_respect_annotation_metadata(
512
+ object_=default_destinations,
513
+ annotation=SubAccountsCreateRequestDefaultDestinations,
514
+ direction="write",
515
+ ),
516
+ },
517
+ headers={
518
+ "content-type": "application/json",
519
+ },
520
+ request_options=request_options,
521
+ omit=OMIT,
522
+ )
523
+ try:
524
+ if 200 <= _response.status_code < 300:
525
+ _data = typing.cast(
526
+ SubOrganizationResponse,
527
+ parse_obj_as(
528
+ type_=SubOrganizationResponse, # type: ignore
529
+ object_=_response.json(),
530
+ ),
531
+ )
532
+ return AsyncHttpResponse(response=_response, data=_data)
533
+ if _response.status_code == 400:
534
+ raise BadRequestError(
535
+ headers=dict(_response.headers),
536
+ body=typing.cast(
537
+ typing.Any,
538
+ parse_obj_as(
539
+ type_=typing.Any, # type: ignore
540
+ object_=_response.json(),
541
+ ),
542
+ ),
543
+ )
544
+ if _response.status_code == 403:
545
+ raise ForbiddenError(
546
+ headers=dict(_response.headers),
547
+ body=typing.cast(
548
+ typing.Any,
549
+ parse_obj_as(
550
+ type_=typing.Any, # type: ignore
551
+ object_=_response.json(),
552
+ ),
553
+ ),
554
+ )
555
+ if _response.status_code == 422:
556
+ raise UnprocessableEntityError(
557
+ headers=dict(_response.headers),
558
+ body=typing.cast(
559
+ typing.Any,
560
+ parse_obj_as(
561
+ type_=typing.Any, # type: ignore
562
+ object_=_response.json(),
563
+ ),
564
+ ),
565
+ )
566
+ _response_json = _response.json()
567
+ except JSONDecodeError:
568
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
569
+ except ValidationError as e:
570
+ raise ParsingError(
571
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
572
+ )
573
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
574
+
575
+ async def get(
576
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
577
+ ) -> AsyncHttpResponse[SubOrganizationResponse]:
578
+ """
579
+ Returns the sub-account identified by `id`.
580
+
581
+ Parameters
582
+ ----------
583
+ id : int
584
+ The unique ID of the sub-account.
585
+
586
+ request_options : typing.Optional[RequestOptions]
587
+ Request-specific configuration.
588
+
589
+ Returns
590
+ -------
591
+ AsyncHttpResponse[SubOrganizationResponse]
592
+ Returns the sub-account.
593
+ """
594
+ _response = await self._client_wrapper.httpx_client.request(
595
+ f"v1/sub-organizations/{encode_path_param(id)}",
596
+ method="GET",
597
+ request_options=request_options,
598
+ )
599
+ try:
600
+ if 200 <= _response.status_code < 300:
601
+ _data = typing.cast(
602
+ SubOrganizationResponse,
603
+ parse_obj_as(
604
+ type_=SubOrganizationResponse, # type: ignore
605
+ object_=_response.json(),
606
+ ),
607
+ )
608
+ return AsyncHttpResponse(response=_response, data=_data)
609
+ if _response.status_code == 401:
610
+ raise UnauthorizedError(
611
+ headers=dict(_response.headers),
612
+ body=typing.cast(
613
+ UnauthorizedErrorResponse,
614
+ parse_obj_as(
615
+ type_=UnauthorizedErrorResponse, # type: ignore
616
+ object_=_response.json(),
617
+ ),
618
+ ),
619
+ )
620
+ if _response.status_code == 403:
621
+ raise ForbiddenError(
622
+ headers=dict(_response.headers),
623
+ body=typing.cast(
624
+ typing.Any,
625
+ parse_obj_as(
626
+ type_=typing.Any, # type: ignore
627
+ object_=_response.json(),
628
+ ),
629
+ ),
630
+ )
631
+ if _response.status_code == 404:
632
+ raise NotFoundError(
633
+ headers=dict(_response.headers),
634
+ body=typing.cast(
635
+ typing.Any,
636
+ parse_obj_as(
637
+ type_=typing.Any, # type: ignore
638
+ object_=_response.json(),
639
+ ),
640
+ ),
641
+ )
642
+ _response_json = _response.json()
643
+ except JSONDecodeError:
644
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
645
+ except ValidationError as e:
646
+ raise ParsingError(
647
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
648
+ )
649
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
650
+
651
+ async def update(
652
+ self,
653
+ id: int,
654
+ *,
655
+ name: str,
656
+ status: typing.Optional[SubAccountsUpdateRequestStatus] = OMIT,
657
+ default_destinations: typing.Optional[SubAccountsUpdateRequestDefaultDestinations] = OMIT,
658
+ request_options: typing.Optional[RequestOptions] = None,
659
+ ) -> AsyncHttpResponse[SubOrganizationResponse]:
660
+ """
661
+ Replaces the configuration of the sub-account identified by `id`. Omitted fields revert to their defaults.
662
+
663
+ Parameters
664
+ ----------
665
+ id : int
666
+ The unique ID of the sub-account.
667
+
668
+ name : str
669
+ Sub-account name.
670
+
671
+ status : typing.Optional[SubAccountsUpdateRequestStatus]
672
+ Status of the subaccount. One of `enabled` (the subaccount is active and can be used) or `disabled` (the subaccount is suspended).
673
+
674
+ default_destinations : typing.Optional[SubAccountsUpdateRequestDefaultDestinations]
675
+ Default webhook URLs for inbound messages and delivery reports.
676
+
677
+ request_options : typing.Optional[RequestOptions]
678
+ Request-specific configuration.
679
+
680
+ Returns
681
+ -------
682
+ AsyncHttpResponse[SubOrganizationResponse]
683
+ Returns the updated sub-account.
684
+ """
685
+ _response = await self._client_wrapper.httpx_client.request(
686
+ f"v1/sub-organizations/{encode_path_param(id)}",
687
+ method="PUT",
688
+ json={
689
+ "name": name,
690
+ "status": status,
691
+ "default_destinations": convert_and_respect_annotation_metadata(
692
+ object_=default_destinations,
693
+ annotation=SubAccountsUpdateRequestDefaultDestinations,
694
+ direction="write",
695
+ ),
696
+ },
697
+ headers={
698
+ "content-type": "application/json",
699
+ },
700
+ request_options=request_options,
701
+ omit=OMIT,
702
+ )
703
+ try:
704
+ if 200 <= _response.status_code < 300:
705
+ _data = typing.cast(
706
+ SubOrganizationResponse,
707
+ parse_obj_as(
708
+ type_=SubOrganizationResponse, # type: ignore
709
+ object_=_response.json(),
710
+ ),
711
+ )
712
+ return AsyncHttpResponse(response=_response, data=_data)
713
+ if _response.status_code == 400:
714
+ raise BadRequestError(
715
+ headers=dict(_response.headers),
716
+ body=typing.cast(
717
+ typing.Any,
718
+ parse_obj_as(
719
+ type_=typing.Any, # type: ignore
720
+ object_=_response.json(),
721
+ ),
722
+ ),
723
+ )
724
+ if _response.status_code == 401:
725
+ raise UnauthorizedError(
726
+ headers=dict(_response.headers),
727
+ body=typing.cast(
728
+ UnauthorizedErrorResponse,
729
+ parse_obj_as(
730
+ type_=UnauthorizedErrorResponse, # type: ignore
731
+ object_=_response.json(),
732
+ ),
733
+ ),
734
+ )
735
+ if _response.status_code == 403:
736
+ raise ForbiddenError(
737
+ headers=dict(_response.headers),
738
+ body=typing.cast(
739
+ typing.Any,
740
+ parse_obj_as(
741
+ type_=typing.Any, # type: ignore
742
+ object_=_response.json(),
743
+ ),
744
+ ),
745
+ )
746
+ if _response.status_code == 404:
747
+ raise NotFoundError(
748
+ headers=dict(_response.headers),
749
+ body=typing.cast(
750
+ typing.Any,
751
+ parse_obj_as(
752
+ type_=typing.Any, # type: ignore
753
+ object_=_response.json(),
754
+ ),
755
+ ),
756
+ )
757
+ if _response.status_code == 422:
758
+ raise UnprocessableEntityError(
759
+ headers=dict(_response.headers),
760
+ body=typing.cast(
761
+ typing.Any,
762
+ parse_obj_as(
763
+ type_=typing.Any, # type: ignore
764
+ object_=_response.json(),
765
+ ),
766
+ ),
767
+ )
768
+ _response_json = _response.json()
769
+ except JSONDecodeError:
770
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
771
+ except ValidationError as e:
772
+ raise ParsingError(
773
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
774
+ )
775
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)