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