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,194 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import datetime as dt
6
+ import typing
7
+
8
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ..core.request_options import RequestOptions
10
+ from ..types.short_link_response import ShortLinkResponse
11
+ from .raw_client import AsyncRawLinkShortenerClient, RawLinkShortenerClient
12
+
13
+ if typing.TYPE_CHECKING:
14
+ from .metrics.client import AsyncMetricsClient, MetricsClient
15
+ # this is used as the default value for optional parameters
16
+ OMIT = typing.cast(typing.Any, ...)
17
+
18
+
19
+ class LinkShortenerClient:
20
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
21
+ self._raw_client = RawLinkShortenerClient(client_wrapper=client_wrapper)
22
+ self._client_wrapper = client_wrapper
23
+ self._metrics: typing.Optional[MetricsClient] = None
24
+
25
+ @property
26
+ def with_raw_response(self) -> RawLinkShortenerClient:
27
+ """
28
+ Retrieves a raw implementation of this client that returns raw responses.
29
+
30
+ Returns
31
+ -------
32
+ RawLinkShortenerClient
33
+ """
34
+ return self._raw_client
35
+
36
+ def create(
37
+ self,
38
+ *,
39
+ link: str,
40
+ expiration_time: typing.Optional[dt.datetime] = OMIT,
41
+ fallback_url: typing.Optional[str] = OMIT,
42
+ phone: typing.Optional[str] = OMIT,
43
+ utm_campaign: typing.Optional[str] = OMIT,
44
+ request_options: typing.Optional[RequestOptions] = None,
45
+ ) -> ShortLinkResponse:
46
+ """
47
+ Creates a short link that redirects to the target URL and tracks click metrics.
48
+
49
+ Parameters
50
+ ----------
51
+ link : str
52
+ Target URL to shorten.
53
+
54
+ expiration_time : typing.Optional[dt.datetime]
55
+ Expiration date and time in ISO 8601 format.
56
+
57
+ fallback_url : typing.Optional[str]
58
+ Fallback URL for expired or invalid links.
59
+
60
+ phone : typing.Optional[str]
61
+ Phone number for the short link.
62
+
63
+ utm_campaign : typing.Optional[str]
64
+ UTM campaign name for tracking insights.
65
+
66
+ request_options : typing.Optional[RequestOptions]
67
+ Request-specific configuration.
68
+
69
+ Returns
70
+ -------
71
+ ShortLinkResponse
72
+ Returns the created short link.
73
+
74
+ Examples
75
+ --------
76
+ from wavix import Wavix
77
+
78
+ client = Wavix(
79
+ token="YOUR_TOKEN",
80
+ )
81
+ client.link_shortener.create(
82
+ link="https://your-site.com/long-url",
83
+ )
84
+ """
85
+ _response = self._raw_client.create(
86
+ link=link,
87
+ expiration_time=expiration_time,
88
+ fallback_url=fallback_url,
89
+ phone=phone,
90
+ utm_campaign=utm_campaign,
91
+ request_options=request_options,
92
+ )
93
+ return _response.data
94
+
95
+ @property
96
+ def metrics(self):
97
+ if self._metrics is None:
98
+ from .metrics.client import MetricsClient # noqa: E402
99
+
100
+ self._metrics = MetricsClient(client_wrapper=self._client_wrapper)
101
+ return self._metrics
102
+
103
+
104
+ class AsyncLinkShortenerClient:
105
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
106
+ self._raw_client = AsyncRawLinkShortenerClient(client_wrapper=client_wrapper)
107
+ self._client_wrapper = client_wrapper
108
+ self._metrics: typing.Optional[AsyncMetricsClient] = None
109
+
110
+ @property
111
+ def with_raw_response(self) -> AsyncRawLinkShortenerClient:
112
+ """
113
+ Retrieves a raw implementation of this client that returns raw responses.
114
+
115
+ Returns
116
+ -------
117
+ AsyncRawLinkShortenerClient
118
+ """
119
+ return self._raw_client
120
+
121
+ async def create(
122
+ self,
123
+ *,
124
+ link: str,
125
+ expiration_time: typing.Optional[dt.datetime] = OMIT,
126
+ fallback_url: typing.Optional[str] = OMIT,
127
+ phone: typing.Optional[str] = OMIT,
128
+ utm_campaign: typing.Optional[str] = OMIT,
129
+ request_options: typing.Optional[RequestOptions] = None,
130
+ ) -> ShortLinkResponse:
131
+ """
132
+ Creates a short link that redirects to the target URL and tracks click metrics.
133
+
134
+ Parameters
135
+ ----------
136
+ link : str
137
+ Target URL to shorten.
138
+
139
+ expiration_time : typing.Optional[dt.datetime]
140
+ Expiration date and time in ISO 8601 format.
141
+
142
+ fallback_url : typing.Optional[str]
143
+ Fallback URL for expired or invalid links.
144
+
145
+ phone : typing.Optional[str]
146
+ Phone number for the short link.
147
+
148
+ utm_campaign : typing.Optional[str]
149
+ UTM campaign name for tracking insights.
150
+
151
+ request_options : typing.Optional[RequestOptions]
152
+ Request-specific configuration.
153
+
154
+ Returns
155
+ -------
156
+ ShortLinkResponse
157
+ Returns the created short link.
158
+
159
+ Examples
160
+ --------
161
+ import asyncio
162
+
163
+ from wavix import AsyncWavix
164
+
165
+ client = AsyncWavix(
166
+ token="YOUR_TOKEN",
167
+ )
168
+
169
+
170
+ async def main() -> None:
171
+ await client.link_shortener.create(
172
+ link="https://your-site.com/long-url",
173
+ )
174
+
175
+
176
+ asyncio.run(main())
177
+ """
178
+ _response = await self._raw_client.create(
179
+ link=link,
180
+ expiration_time=expiration_time,
181
+ fallback_url=fallback_url,
182
+ phone=phone,
183
+ utm_campaign=utm_campaign,
184
+ request_options=request_options,
185
+ )
186
+ return _response.data
187
+
188
+ @property
189
+ def metrics(self):
190
+ if self._metrics is None:
191
+ from .metrics.client import AsyncMetricsClient # noqa: E402
192
+
193
+ self._metrics = AsyncMetricsClient(client_wrapper=self._client_wrapper)
194
+ return self._metrics
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
@@ -0,0 +1,198 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
7
+ from ...core.request_options import RequestOptions
8
+ from ...types.short_link_metrics_response import ShortLinkMetricsResponse
9
+ from .raw_client import AsyncRawMetricsClient, RawMetricsClient
10
+
11
+
12
+ class MetricsClient:
13
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
14
+ self._raw_client = RawMetricsClient(client_wrapper=client_wrapper)
15
+
16
+ @property
17
+ def with_raw_response(self) -> RawMetricsClient:
18
+ """
19
+ Retrieves a raw implementation of this client that returns raw responses.
20
+
21
+ Returns
22
+ -------
23
+ RawMetricsClient
24
+ """
25
+ return self._raw_client
26
+
27
+ def list(
28
+ self,
29
+ *,
30
+ from_: dt.date,
31
+ to: dt.date,
32
+ phone: typing.Optional[str] = None,
33
+ utm_campaign: typing.Optional[str] = None,
34
+ page: typing.Optional[int] = None,
35
+ per_page: typing.Optional[int] = None,
36
+ request_options: typing.Optional[RequestOptions] = None,
37
+ ) -> ShortLinkMetricsResponse:
38
+ """
39
+ Returns per-click metrics for short links, including device, location, and campaign attribution, within the requested date range.
40
+
41
+ Parameters
42
+ ----------
43
+ from_ : dt.date
44
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
45
+
46
+ to : dt.date
47
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
48
+
49
+ phone : typing.Optional[str]
50
+ Filters metrics by the phone number associated with the click, in E.164 format.
51
+
52
+ utm_campaign : typing.Optional[str]
53
+ Filters metrics by `utm_campaign` name.
54
+
55
+ page : typing.Optional[int]
56
+ Page number to retrieve. Default `1`.
57
+
58
+ per_page : typing.Optional[int]
59
+ Number of records to return per page. Default `25`.
60
+
61
+ request_options : typing.Optional[RequestOptions]
62
+ Request-specific configuration.
63
+
64
+ Returns
65
+ -------
66
+ ShortLinkMetricsResponse
67
+ Returns a paginated list of short link metrics.
68
+
69
+ Examples
70
+ --------
71
+ import datetime
72
+
73
+ from wavix import Wavix
74
+
75
+ client = Wavix(
76
+ token="YOUR_TOKEN",
77
+ )
78
+ client.link_shortener.metrics.list(
79
+ from_=datetime.date.fromisoformat(
80
+ "2023-05-01",
81
+ ),
82
+ to=datetime.date.fromisoformat(
83
+ "2023-05-31",
84
+ ),
85
+ phone="1872025555",
86
+ utm_campaign="summer",
87
+ page=1,
88
+ per_page=25,
89
+ )
90
+ """
91
+ _response = self._raw_client.list(
92
+ from_=from_,
93
+ to=to,
94
+ phone=phone,
95
+ utm_campaign=utm_campaign,
96
+ page=page,
97
+ per_page=per_page,
98
+ request_options=request_options,
99
+ )
100
+ return _response.data
101
+
102
+
103
+ class AsyncMetricsClient:
104
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
105
+ self._raw_client = AsyncRawMetricsClient(client_wrapper=client_wrapper)
106
+
107
+ @property
108
+ def with_raw_response(self) -> AsyncRawMetricsClient:
109
+ """
110
+ Retrieves a raw implementation of this client that returns raw responses.
111
+
112
+ Returns
113
+ -------
114
+ AsyncRawMetricsClient
115
+ """
116
+ return self._raw_client
117
+
118
+ async def list(
119
+ self,
120
+ *,
121
+ from_: dt.date,
122
+ to: dt.date,
123
+ phone: typing.Optional[str] = None,
124
+ utm_campaign: typing.Optional[str] = None,
125
+ page: typing.Optional[int] = None,
126
+ per_page: typing.Optional[int] = None,
127
+ request_options: typing.Optional[RequestOptions] = None,
128
+ ) -> ShortLinkMetricsResponse:
129
+ """
130
+ Returns per-click metrics for short links, including device, location, and campaign attribution, within the requested date range.
131
+
132
+ Parameters
133
+ ----------
134
+ from_ : dt.date
135
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
136
+
137
+ to : dt.date
138
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
139
+
140
+ phone : typing.Optional[str]
141
+ Filters metrics by the phone number associated with the click, in E.164 format.
142
+
143
+ utm_campaign : typing.Optional[str]
144
+ Filters metrics by `utm_campaign` name.
145
+
146
+ page : typing.Optional[int]
147
+ Page number to retrieve. Default `1`.
148
+
149
+ per_page : typing.Optional[int]
150
+ Number of records to return per page. Default `25`.
151
+
152
+ request_options : typing.Optional[RequestOptions]
153
+ Request-specific configuration.
154
+
155
+ Returns
156
+ -------
157
+ ShortLinkMetricsResponse
158
+ Returns a paginated list of short link metrics.
159
+
160
+ Examples
161
+ --------
162
+ import asyncio
163
+ import datetime
164
+
165
+ from wavix import AsyncWavix
166
+
167
+ client = AsyncWavix(
168
+ token="YOUR_TOKEN",
169
+ )
170
+
171
+
172
+ async def main() -> None:
173
+ await client.link_shortener.metrics.list(
174
+ from_=datetime.date.fromisoformat(
175
+ "2023-05-01",
176
+ ),
177
+ to=datetime.date.fromisoformat(
178
+ "2023-05-31",
179
+ ),
180
+ phone="1872025555",
181
+ utm_campaign="summer",
182
+ page=1,
183
+ per_page=25,
184
+ )
185
+
186
+
187
+ asyncio.run(main())
188
+ """
189
+ _response = await self._raw_client.list(
190
+ from_=from_,
191
+ to=to,
192
+ phone=phone,
193
+ utm_campaign=utm_campaign,
194
+ page=page,
195
+ per_page=per_page,
196
+ request_options=request_options,
197
+ )
198
+ return _response.data
@@ -0,0 +1,218 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+ from json.decoder import JSONDecodeError
6
+
7
+ from ...core.api_error import ApiError
8
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
10
+ from ...core.parse_error import ParsingError
11
+ from ...core.pydantic_utilities import parse_obj_as
12
+ from ...core.request_options import RequestOptions
13
+ from ...errors.bad_request_error import BadRequestError
14
+ from ...errors.forbidden_error import ForbiddenError
15
+ from ...types.short_link_metrics_response import ShortLinkMetricsResponse
16
+ from pydantic import ValidationError
17
+
18
+
19
+ class RawMetricsClient:
20
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
21
+ self._client_wrapper = client_wrapper
22
+
23
+ def list(
24
+ self,
25
+ *,
26
+ from_: dt.date,
27
+ to: dt.date,
28
+ phone: typing.Optional[str] = None,
29
+ utm_campaign: typing.Optional[str] = None,
30
+ page: typing.Optional[int] = None,
31
+ per_page: typing.Optional[int] = None,
32
+ request_options: typing.Optional[RequestOptions] = None,
33
+ ) -> HttpResponse[ShortLinkMetricsResponse]:
34
+ """
35
+ Returns per-click metrics for short links, including device, location, and campaign attribution, within the requested date range.
36
+
37
+ Parameters
38
+ ----------
39
+ from_ : dt.date
40
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
41
+
42
+ to : dt.date
43
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
44
+
45
+ phone : typing.Optional[str]
46
+ Filters metrics by the phone number associated with the click, in E.164 format.
47
+
48
+ utm_campaign : typing.Optional[str]
49
+ Filters metrics by `utm_campaign` name.
50
+
51
+ page : typing.Optional[int]
52
+ Page number to retrieve. Default `1`.
53
+
54
+ per_page : typing.Optional[int]
55
+ Number of records to return per page. Default `25`.
56
+
57
+ request_options : typing.Optional[RequestOptions]
58
+ Request-specific configuration.
59
+
60
+ Returns
61
+ -------
62
+ HttpResponse[ShortLinkMetricsResponse]
63
+ Returns a paginated list of short link metrics.
64
+ """
65
+ _response = self._client_wrapper.httpx_client.request(
66
+ "v1/short-links/metrics",
67
+ method="GET",
68
+ params={
69
+ "from": str(from_),
70
+ "to": str(to),
71
+ "phone": phone,
72
+ "utm_campaign": utm_campaign,
73
+ "page": page,
74
+ "per_page": per_page,
75
+ },
76
+ request_options=request_options,
77
+ )
78
+ try:
79
+ if 200 <= _response.status_code < 300:
80
+ _data = typing.cast(
81
+ ShortLinkMetricsResponse,
82
+ parse_obj_as(
83
+ type_=ShortLinkMetricsResponse, # type: ignore
84
+ object_=_response.json(),
85
+ ),
86
+ )
87
+ return HttpResponse(response=_response, data=_data)
88
+ if _response.status_code == 400:
89
+ raise BadRequestError(
90
+ headers=dict(_response.headers),
91
+ body=typing.cast(
92
+ typing.Any,
93
+ parse_obj_as(
94
+ type_=typing.Any, # type: ignore
95
+ object_=_response.json(),
96
+ ),
97
+ ),
98
+ )
99
+ if _response.status_code == 403:
100
+ raise ForbiddenError(
101
+ headers=dict(_response.headers),
102
+ body=typing.cast(
103
+ typing.Any,
104
+ parse_obj_as(
105
+ type_=typing.Any, # type: ignore
106
+ object_=_response.json(),
107
+ ),
108
+ ),
109
+ )
110
+ _response_json = _response.json()
111
+ except JSONDecodeError:
112
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
113
+ except ValidationError as e:
114
+ raise ParsingError(
115
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
116
+ )
117
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
118
+
119
+
120
+ class AsyncRawMetricsClient:
121
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
122
+ self._client_wrapper = client_wrapper
123
+
124
+ async def list(
125
+ self,
126
+ *,
127
+ from_: dt.date,
128
+ to: dt.date,
129
+ phone: typing.Optional[str] = None,
130
+ utm_campaign: typing.Optional[str] = None,
131
+ page: typing.Optional[int] = None,
132
+ per_page: typing.Optional[int] = None,
133
+ request_options: typing.Optional[RequestOptions] = None,
134
+ ) -> AsyncHttpResponse[ShortLinkMetricsResponse]:
135
+ """
136
+ Returns per-click metrics for short links, including device, location, and campaign attribution, within the requested date range.
137
+
138
+ Parameters
139
+ ----------
140
+ from_ : dt.date
141
+ Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
142
+
143
+ to : dt.date
144
+ End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
145
+
146
+ phone : typing.Optional[str]
147
+ Filters metrics by the phone number associated with the click, in E.164 format.
148
+
149
+ utm_campaign : typing.Optional[str]
150
+ Filters metrics by `utm_campaign` name.
151
+
152
+ page : typing.Optional[int]
153
+ Page number to retrieve. Default `1`.
154
+
155
+ per_page : typing.Optional[int]
156
+ Number of records to return per page. Default `25`.
157
+
158
+ request_options : typing.Optional[RequestOptions]
159
+ Request-specific configuration.
160
+
161
+ Returns
162
+ -------
163
+ AsyncHttpResponse[ShortLinkMetricsResponse]
164
+ Returns a paginated list of short link metrics.
165
+ """
166
+ _response = await self._client_wrapper.httpx_client.request(
167
+ "v1/short-links/metrics",
168
+ method="GET",
169
+ params={
170
+ "from": str(from_),
171
+ "to": str(to),
172
+ "phone": phone,
173
+ "utm_campaign": utm_campaign,
174
+ "page": page,
175
+ "per_page": per_page,
176
+ },
177
+ request_options=request_options,
178
+ )
179
+ try:
180
+ if 200 <= _response.status_code < 300:
181
+ _data = typing.cast(
182
+ ShortLinkMetricsResponse,
183
+ parse_obj_as(
184
+ type_=ShortLinkMetricsResponse, # type: ignore
185
+ object_=_response.json(),
186
+ ),
187
+ )
188
+ return AsyncHttpResponse(response=_response, data=_data)
189
+ if _response.status_code == 400:
190
+ raise BadRequestError(
191
+ headers=dict(_response.headers),
192
+ body=typing.cast(
193
+ typing.Any,
194
+ parse_obj_as(
195
+ type_=typing.Any, # type: ignore
196
+ object_=_response.json(),
197
+ ),
198
+ ),
199
+ )
200
+ if _response.status_code == 403:
201
+ raise ForbiddenError(
202
+ headers=dict(_response.headers),
203
+ body=typing.cast(
204
+ typing.Any,
205
+ parse_obj_as(
206
+ type_=typing.Any, # type: ignore
207
+ object_=_response.json(),
208
+ ),
209
+ ),
210
+ )
211
+ _response_json = _response.json()
212
+ except JSONDecodeError:
213
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
214
+ except ValidationError as e:
215
+ raise ParsingError(
216
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
217
+ )
218
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)