whop-sdk 0.0.10__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 (352) hide show
  1. whop_sdk/__init__.py +94 -0
  2. whop_sdk/_base_client.py +1995 -0
  3. whop_sdk/_client.py +800 -0
  4. whop_sdk/_compat.py +219 -0
  5. whop_sdk/_constants.py +14 -0
  6. whop_sdk/_exceptions.py +112 -0
  7. whop_sdk/_files.py +123 -0
  8. whop_sdk/_models.py +857 -0
  9. whop_sdk/_qs.py +150 -0
  10. whop_sdk/_resource.py +43 -0
  11. whop_sdk/_response.py +830 -0
  12. whop_sdk/_streaming.py +333 -0
  13. whop_sdk/_types.py +260 -0
  14. whop_sdk/_utils/__init__.py +64 -0
  15. whop_sdk/_utils/_compat.py +45 -0
  16. whop_sdk/_utils/_datetime_parse.py +136 -0
  17. whop_sdk/_utils/_logs.py +25 -0
  18. whop_sdk/_utils/_proxy.py +65 -0
  19. whop_sdk/_utils/_reflection.py +42 -0
  20. whop_sdk/_utils/_resources_proxy.py +24 -0
  21. whop_sdk/_utils/_streams.py +12 -0
  22. whop_sdk/_utils/_sync.py +58 -0
  23. whop_sdk/_utils/_transform.py +457 -0
  24. whop_sdk/_utils/_typing.py +156 -0
  25. whop_sdk/_utils/_utils.py +421 -0
  26. whop_sdk/_version.py +4 -0
  27. whop_sdk/lib/.keep +4 -0
  28. whop_sdk/pagination.py +61 -0
  29. whop_sdk/py.typed +0 -0
  30. whop_sdk/resources/__init__.py +540 -0
  31. whop_sdk/resources/access_tokens.py +341 -0
  32. whop_sdk/resources/account_links.py +211 -0
  33. whop_sdk/resources/app_builds.py +587 -0
  34. whop_sdk/resources/apps.py +684 -0
  35. whop_sdk/resources/authorized_users.py +353 -0
  36. whop_sdk/resources/chat_channels.py +469 -0
  37. whop_sdk/resources/checkout_configurations.py +776 -0
  38. whop_sdk/resources/companies.py +465 -0
  39. whop_sdk/resources/course_chapters.py +602 -0
  40. whop_sdk/resources/course_lesson_interactions.py +343 -0
  41. whop_sdk/resources/course_lessons.py +1040 -0
  42. whop_sdk/resources/course_students.py +327 -0
  43. whop_sdk/resources/courses.py +776 -0
  44. whop_sdk/resources/disputes.py +693 -0
  45. whop_sdk/resources/entries.py +556 -0
  46. whop_sdk/resources/experiences.py +983 -0
  47. whop_sdk/resources/forum_posts.py +656 -0
  48. whop_sdk/resources/forums.py +446 -0
  49. whop_sdk/resources/invoices.py +1099 -0
  50. whop_sdk/resources/ledger_accounts.py +171 -0
  51. whop_sdk/resources/members.py +429 -0
  52. whop_sdk/resources/memberships.py +818 -0
  53. whop_sdk/resources/messages.py +558 -0
  54. whop_sdk/resources/notifications.py +388 -0
  55. whop_sdk/resources/payment_tokens.py +359 -0
  56. whop_sdk/resources/payments.py +1040 -0
  57. whop_sdk/resources/plans.py +1001 -0
  58. whop_sdk/resources/products.py +970 -0
  59. whop_sdk/resources/promo_codes.py +668 -0
  60. whop_sdk/resources/reactions.py +423 -0
  61. whop_sdk/resources/refunds.py +347 -0
  62. whop_sdk/resources/reviews.py +332 -0
  63. whop_sdk/resources/setup_intents.py +349 -0
  64. whop_sdk/resources/shipments.py +451 -0
  65. whop_sdk/resources/support_channels.py +455 -0
  66. whop_sdk/resources/transfers.py +513 -0
  67. whop_sdk/resources/users.py +248 -0
  68. whop_sdk/resources/webhooks.py +69 -0
  69. whop_sdk/resources/withdrawals.py +341 -0
  70. whop_sdk/types/__init__.py +262 -0
  71. whop_sdk/types/access_token_create_params.py +64 -0
  72. whop_sdk/types/access_token_create_response.py +15 -0
  73. whop_sdk/types/account_link_create_params.py +27 -0
  74. whop_sdk/types/account_link_create_response.py +15 -0
  75. whop_sdk/types/app_build_create_params.py +72 -0
  76. whop_sdk/types/app_build_list_params.py +42 -0
  77. whop_sdk/types/app_build_list_response.py +50 -0
  78. whop_sdk/types/app_create_params.py +19 -0
  79. whop_sdk/types/app_list_params.py +59 -0
  80. whop_sdk/types/app_list_response.py +110 -0
  81. whop_sdk/types/app_type.py +7 -0
  82. whop_sdk/types/app_update_params.py +67 -0
  83. whop_sdk/types/assessment_question_types.py +7 -0
  84. whop_sdk/types/authorized_user_list_params.py +41 -0
  85. whop_sdk/types/authorized_user_list_response.py +33 -0
  86. whop_sdk/types/authorized_user_retrieve_response.py +33 -0
  87. whop_sdk/types/billing_reasons.py +9 -0
  88. whop_sdk/types/card_brands.py +25 -0
  89. whop_sdk/types/chat_channel_list_params.py +28 -0
  90. whop_sdk/types/chat_channel_list_response.py +43 -0
  91. whop_sdk/types/chat_channel_update_params.py +32 -0
  92. whop_sdk/types/checkout_configuration_create_params.py +373 -0
  93. whop_sdk/types/checkout_configuration_list_params.py +41 -0
  94. whop_sdk/types/checkout_configuration_list_response.py +104 -0
  95. whop_sdk/types/checkout_modes.py +7 -0
  96. whop_sdk/types/company_create_params.py +22 -0
  97. whop_sdk/types/company_list_params.py +38 -0
  98. whop_sdk/types/company_list_response.py +76 -0
  99. whop_sdk/types/course.py +122 -0
  100. whop_sdk/types/course_chapter.py +32 -0
  101. whop_sdk/types/course_chapter_create_params.py +16 -0
  102. whop_sdk/types/course_chapter_delete_response.py +7 -0
  103. whop_sdk/types/course_chapter_list_params.py +25 -0
  104. whop_sdk/types/course_chapter_list_response.py +16 -0
  105. whop_sdk/types/course_chapter_update_params.py +12 -0
  106. whop_sdk/types/course_create_params.py +78 -0
  107. whop_sdk/types/course_delete_response.py +7 -0
  108. whop_sdk/types/course_lesson_create_params.py +63 -0
  109. whop_sdk/types/course_lesson_delete_response.py +7 -0
  110. whop_sdk/types/course_lesson_interaction_completed_webhook_event.py +26 -0
  111. whop_sdk/types/course_lesson_interaction_list_params.py +34 -0
  112. whop_sdk/types/course_lesson_list_params.py +28 -0
  113. whop_sdk/types/course_lesson_list_response.py +57 -0
  114. whop_sdk/types/course_lesson_mark_as_completed_response.py +7 -0
  115. whop_sdk/types/course_lesson_start_response.py +7 -0
  116. whop_sdk/types/course_lesson_submit_assessment_params.py +26 -0
  117. whop_sdk/types/course_lesson_submit_assessment_response.py +62 -0
  118. whop_sdk/types/course_lesson_update_params.py +222 -0
  119. whop_sdk/types/course_list_params.py +28 -0
  120. whop_sdk/types/course_list_response.py +90 -0
  121. whop_sdk/types/course_student_list_params.py +28 -0
  122. whop_sdk/types/course_student_list_response.py +42 -0
  123. whop_sdk/types/course_student_retrieve_response.py +61 -0
  124. whop_sdk/types/course_update_params.py +114 -0
  125. whop_sdk/types/course_visibilities.py +7 -0
  126. whop_sdk/types/dispute.py +284 -0
  127. whop_sdk/types/dispute_created_webhook_event.py +26 -0
  128. whop_sdk/types/dispute_list_params.py +38 -0
  129. whop_sdk/types/dispute_list_response.py +77 -0
  130. whop_sdk/types/dispute_statuses.py +17 -0
  131. whop_sdk/types/dispute_update_evidence_params.py +159 -0
  132. whop_sdk/types/dispute_updated_webhook_event.py +26 -0
  133. whop_sdk/types/embed_type.py +7 -0
  134. whop_sdk/types/entry_approve_response.py +10 -0
  135. whop_sdk/types/entry_approved_webhook_event.py +26 -0
  136. whop_sdk/types/entry_created_webhook_event.py +26 -0
  137. whop_sdk/types/entry_deleted_webhook_event.py +26 -0
  138. whop_sdk/types/entry_denied_webhook_event.py +26 -0
  139. whop_sdk/types/entry_list_params.py +52 -0
  140. whop_sdk/types/entry_list_response.py +56 -0
  141. whop_sdk/types/experience_attach_params.py +12 -0
  142. whop_sdk/types/experience_create_params.py +22 -0
  143. whop_sdk/types/experience_delete_response.py +7 -0
  144. whop_sdk/types/experience_detach_params.py +12 -0
  145. whop_sdk/types/experience_duplicate_params.py +13 -0
  146. whop_sdk/types/experience_list_params.py +40 -0
  147. whop_sdk/types/experience_list_response.py +73 -0
  148. whop_sdk/types/experience_update_params.py +46 -0
  149. whop_sdk/types/forum_list_params.py +28 -0
  150. whop_sdk/types/forum_list_response.py +33 -0
  151. whop_sdk/types/forum_post_create_params.py +101 -0
  152. whop_sdk/types/forum_post_list_params.py +31 -0
  153. whop_sdk/types/forum_post_list_response.py +60 -0
  154. whop_sdk/types/forum_post_update_params.py +56 -0
  155. whop_sdk/types/forum_post_visibility_type.py +7 -0
  156. whop_sdk/types/forum_update_params.py +23 -0
  157. whop_sdk/types/invoice_create_params.py +515 -0
  158. whop_sdk/types/invoice_created_webhook_event.py +26 -0
  159. whop_sdk/types/invoice_list_params.py +53 -0
  160. whop_sdk/types/invoice_paid_webhook_event.py +26 -0
  161. whop_sdk/types/invoice_past_due_webhook_event.py +26 -0
  162. whop_sdk/types/invoice_void_response.py +7 -0
  163. whop_sdk/types/invoice_voided_webhook_event.py +26 -0
  164. whop_sdk/types/languages.py +30 -0
  165. whop_sdk/types/ledger_account_retrieve_response.py +93 -0
  166. whop_sdk/types/lesson.py +219 -0
  167. whop_sdk/types/lesson_types.py +7 -0
  168. whop_sdk/types/lesson_visibilities.py +7 -0
  169. whop_sdk/types/member_list_params.py +73 -0
  170. whop_sdk/types/member_list_response.py +65 -0
  171. whop_sdk/types/member_retrieve_response.py +79 -0
  172. whop_sdk/types/membership_activated_webhook_event.py +29 -0
  173. whop_sdk/types/membership_cancel_params.py +13 -0
  174. whop_sdk/types/membership_deactivated_webhook_event.py +29 -0
  175. whop_sdk/types/membership_list_params.py +73 -0
  176. whop_sdk/types/membership_list_response.py +128 -0
  177. whop_sdk/types/membership_pause_params.py +16 -0
  178. whop_sdk/types/membership_update_params.py +13 -0
  179. whop_sdk/types/message_create_params.py +63 -0
  180. whop_sdk/types/message_list_params.py +30 -0
  181. whop_sdk/types/message_list_response.py +90 -0
  182. whop_sdk/types/message_update_params.py +45 -0
  183. whop_sdk/types/notification_create_params.py +93 -0
  184. whop_sdk/types/notification_create_response.py +10 -0
  185. whop_sdk/types/payment_create_params.py +162 -0
  186. whop_sdk/types/payment_failed_webhook_event.py +26 -0
  187. whop_sdk/types/payment_list_params.py +67 -0
  188. whop_sdk/types/payment_list_response.py +273 -0
  189. whop_sdk/types/payment_method_types.py +94 -0
  190. whop_sdk/types/payment_pending_webhook_event.py +26 -0
  191. whop_sdk/types/payment_provider.py +9 -0
  192. whop_sdk/types/payment_refund_params.py +13 -0
  193. whop_sdk/types/payment_succeeded_webhook_event.py +26 -0
  194. whop_sdk/types/payment_token_list_params.py +38 -0
  195. whop_sdk/types/payment_token_list_response.py +41 -0
  196. whop_sdk/types/payment_token_retrieve_params.py +12 -0
  197. whop_sdk/types/payment_token_retrieve_response.py +41 -0
  198. whop_sdk/types/plan_create_params.py +162 -0
  199. whop_sdk/types/plan_delete_response.py +7 -0
  200. whop_sdk/types/plan_list_params.py +57 -0
  201. whop_sdk/types/plan_list_response.py +128 -0
  202. whop_sdk/types/plan_update_params.py +155 -0
  203. whop_sdk/types/product_create_params.py +147 -0
  204. whop_sdk/types/product_delete_response.py +7 -0
  205. whop_sdk/types/product_list_params.py +49 -0
  206. whop_sdk/types/product_update_params.py +82 -0
  207. whop_sdk/types/promo_code.py +90 -0
  208. whop_sdk/types/promo_code_create_params.py +70 -0
  209. whop_sdk/types/promo_code_delete_response.py +7 -0
  210. whop_sdk/types/promo_code_list_params.py +45 -0
  211. whop_sdk/types/promo_code_list_response.py +79 -0
  212. whop_sdk/types/promo_code_status.py +7 -0
  213. whop_sdk/types/promo_duration.py +7 -0
  214. whop_sdk/types/reaction_create_params.py +19 -0
  215. whop_sdk/types/reaction_list_params.py +25 -0
  216. whop_sdk/types/reaction_list_response.py +32 -0
  217. whop_sdk/types/refund_created_webhook_event.py +154 -0
  218. whop_sdk/types/refund_list_params.py +38 -0
  219. whop_sdk/types/refund_list_response.py +53 -0
  220. whop_sdk/types/refund_reference_status.py +7 -0
  221. whop_sdk/types/refund_reference_type.py +9 -0
  222. whop_sdk/types/refund_retrieve_response.py +129 -0
  223. whop_sdk/types/refund_status.py +7 -0
  224. whop_sdk/types/refund_updated_webhook_event.py +154 -0
  225. whop_sdk/types/review_list_params.py +40 -0
  226. whop_sdk/types/review_list_response.py +78 -0
  227. whop_sdk/types/review_retrieve_response.py +103 -0
  228. whop_sdk/types/review_status.py +7 -0
  229. whop_sdk/types/setup_intent.py +111 -0
  230. whop_sdk/types/setup_intent_canceled_webhook_event.py +29 -0
  231. whop_sdk/types/setup_intent_list_params.py +38 -0
  232. whop_sdk/types/setup_intent_list_response.py +111 -0
  233. whop_sdk/types/setup_intent_requires_action_webhook_event.py +29 -0
  234. whop_sdk/types/setup_intent_status.py +7 -0
  235. whop_sdk/types/setup_intent_succeeded_webhook_event.py +29 -0
  236. whop_sdk/types/shared/__init__.py +62 -0
  237. whop_sdk/types/shared/access_level.py +7 -0
  238. whop_sdk/types/shared/access_pass_type.py +7 -0
  239. whop_sdk/types/shared/app.py +187 -0
  240. whop_sdk/types/shared/app_build.py +50 -0
  241. whop_sdk/types/shared/app_build_platforms.py +7 -0
  242. whop_sdk/types/shared/app_build_statuses.py +7 -0
  243. whop_sdk/types/shared/app_statuses.py +7 -0
  244. whop_sdk/types/shared/app_view_type.py +7 -0
  245. whop_sdk/types/shared/authorized_user_roles.py +9 -0
  246. whop_sdk/types/shared/business_types.py +22 -0
  247. whop_sdk/types/shared/chat_channel.py +43 -0
  248. whop_sdk/types/shared/checkout_configuration.py +104 -0
  249. whop_sdk/types/shared/collection_method.py +7 -0
  250. whop_sdk/types/shared/company.py +91 -0
  251. whop_sdk/types/shared/course_lesson_interaction.py +63 -0
  252. whop_sdk/types/shared/course_lesson_interaction_list_item.py +44 -0
  253. whop_sdk/types/shared/currency.py +93 -0
  254. whop_sdk/types/shared/custom_cta.py +21 -0
  255. whop_sdk/types/shared/direction.py +7 -0
  256. whop_sdk/types/shared/dms_post_types.py +7 -0
  257. whop_sdk/types/shared/email_notification_preferences.py +7 -0
  258. whop_sdk/types/shared/entry.py +70 -0
  259. whop_sdk/types/shared/entry_status.py +7 -0
  260. whop_sdk/types/shared/experience.py +91 -0
  261. whop_sdk/types/shared/forum.py +33 -0
  262. whop_sdk/types/shared/forum_post.py +60 -0
  263. whop_sdk/types/shared/friendly_receipt_status.py +24 -0
  264. whop_sdk/types/shared/global_affiliate_status.py +7 -0
  265. whop_sdk/types/shared/industry_types.py +67 -0
  266. whop_sdk/types/shared/invoice.py +64 -0
  267. whop_sdk/types/shared/invoice_list_item.py +64 -0
  268. whop_sdk/types/shared/invoice_status.py +7 -0
  269. whop_sdk/types/shared/member_most_recent_actions.py +22 -0
  270. whop_sdk/types/shared/member_statuses.py +7 -0
  271. whop_sdk/types/shared/membership.py +128 -0
  272. whop_sdk/types/shared/membership_status.py +9 -0
  273. whop_sdk/types/shared/message.py +90 -0
  274. whop_sdk/types/shared/page_info.py +21 -0
  275. whop_sdk/types/shared/payment.py +273 -0
  276. whop_sdk/types/shared/plan.py +159 -0
  277. whop_sdk/types/shared/plan_type.py +7 -0
  278. whop_sdk/types/shared/product.py +132 -0
  279. whop_sdk/types/shared/product_list_item.py +57 -0
  280. whop_sdk/types/shared/promo_type.py +7 -0
  281. whop_sdk/types/shared/reaction.py +32 -0
  282. whop_sdk/types/shared/receipt_status.py +7 -0
  283. whop_sdk/types/shared/release_method.py +7 -0
  284. whop_sdk/types/shared/shipment.py +48 -0
  285. whop_sdk/types/shared/shipment_carrier.py +84 -0
  286. whop_sdk/types/shared/shipment_status.py +18 -0
  287. whop_sdk/types/shared/shipment_substatus.py +36 -0
  288. whop_sdk/types/shared/support_channel.py +39 -0
  289. whop_sdk/types/shared/tax_type.py +7 -0
  290. whop_sdk/types/shared/transfer.py +112 -0
  291. whop_sdk/types/shared/visibility.py +7 -0
  292. whop_sdk/types/shared/visibility_filter.py +9 -0
  293. whop_sdk/types/shared/who_can_comment_types.py +7 -0
  294. whop_sdk/types/shared/who_can_post.py +7 -0
  295. whop_sdk/types/shared/who_can_post_types.py +7 -0
  296. whop_sdk/types/shared/who_can_react.py +7 -0
  297. whop_sdk/types/shared_params/__init__.py +34 -0
  298. whop_sdk/types/shared_params/access_level.py +9 -0
  299. whop_sdk/types/shared_params/access_pass_type.py +9 -0
  300. whop_sdk/types/shared_params/app_build_platforms.py +9 -0
  301. whop_sdk/types/shared_params/app_build_statuses.py +9 -0
  302. whop_sdk/types/shared_params/app_statuses.py +9 -0
  303. whop_sdk/types/shared_params/app_view_type.py +9 -0
  304. whop_sdk/types/shared_params/authorized_user_roles.py +11 -0
  305. whop_sdk/types/shared_params/business_types.py +24 -0
  306. whop_sdk/types/shared_params/collection_method.py +9 -0
  307. whop_sdk/types/shared_params/currency.py +95 -0
  308. whop_sdk/types/shared_params/custom_cta.py +23 -0
  309. whop_sdk/types/shared_params/direction.py +9 -0
  310. whop_sdk/types/shared_params/email_notification_preferences.py +9 -0
  311. whop_sdk/types/shared_params/entry_status.py +9 -0
  312. whop_sdk/types/shared_params/friendly_receipt_status.py +26 -0
  313. whop_sdk/types/shared_params/global_affiliate_status.py +9 -0
  314. whop_sdk/types/shared_params/industry_types.py +69 -0
  315. whop_sdk/types/shared_params/invoice_status.py +9 -0
  316. whop_sdk/types/shared_params/member_most_recent_actions.py +24 -0
  317. whop_sdk/types/shared_params/member_statuses.py +9 -0
  318. whop_sdk/types/shared_params/membership_status.py +11 -0
  319. whop_sdk/types/shared_params/plan_type.py +9 -0
  320. whop_sdk/types/shared_params/promo_type.py +9 -0
  321. whop_sdk/types/shared_params/receipt_status.py +9 -0
  322. whop_sdk/types/shared_params/release_method.py +9 -0
  323. whop_sdk/types/shared_params/tax_type.py +9 -0
  324. whop_sdk/types/shared_params/visibility.py +9 -0
  325. whop_sdk/types/shared_params/visibility_filter.py +11 -0
  326. whop_sdk/types/shared_params/who_can_comment_types.py +9 -0
  327. whop_sdk/types/shared_params/who_can_post.py +9 -0
  328. whop_sdk/types/shared_params/who_can_post_types.py +9 -0
  329. whop_sdk/types/shared_params/who_can_react.py +9 -0
  330. whop_sdk/types/shipment_create_params.py +18 -0
  331. whop_sdk/types/shipment_list_params.py +31 -0
  332. whop_sdk/types/shipment_list_response.py +48 -0
  333. whop_sdk/types/support_channel_create_params.py +15 -0
  334. whop_sdk/types/support_channel_list_params.py +40 -0
  335. whop_sdk/types/support_channel_list_response.py +39 -0
  336. whop_sdk/types/transfer_create_params.py +39 -0
  337. whop_sdk/types/transfer_list_params.py +50 -0
  338. whop_sdk/types/transfer_list_response.py +38 -0
  339. whop_sdk/types/unwrap_webhook_event.py +52 -0
  340. whop_sdk/types/user_check_access_response.py +14 -0
  341. whop_sdk/types/user_retrieve_response.py +36 -0
  342. whop_sdk/types/withdrawal_fee_types.py +7 -0
  343. whop_sdk/types/withdrawal_list_params.py +38 -0
  344. whop_sdk/types/withdrawal_list_response.py +45 -0
  345. whop_sdk/types/withdrawal_retrieve_response.py +154 -0
  346. whop_sdk/types/withdrawal_speeds.py +7 -0
  347. whop_sdk/types/withdrawal_status.py +9 -0
  348. whop_sdk/types/withdrawal_types.py +7 -0
  349. whop_sdk-0.0.10.dist-info/METADATA +509 -0
  350. whop_sdk-0.0.10.dist-info/RECORD +352 -0
  351. whop_sdk-0.0.10.dist-info/WHEEL +4 -0
  352. whop_sdk-0.0.10.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,970 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List, Union, Iterable, Optional
6
+ from datetime import datetime
7
+ from typing_extensions import Literal
8
+
9
+ import httpx
10
+
11
+ from ..types import product_list_params, product_create_params, product_update_params
12
+ from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
13
+ from .._utils import maybe_transform, async_maybe_transform
14
+ from .._compat import cached_property
15
+ from .._resource import SyncAPIResource, AsyncAPIResource
16
+ from .._response import (
17
+ to_raw_response_wrapper,
18
+ to_streamed_response_wrapper,
19
+ async_to_raw_response_wrapper,
20
+ async_to_streamed_response_wrapper,
21
+ )
22
+ from ..pagination import SyncCursorPage, AsyncCursorPage
23
+ from .._base_client import AsyncPaginator, make_request_options
24
+ from ..types.shared.product import Product
25
+ from ..types.shared.direction import Direction
26
+ from ..types.shared.custom_cta import CustomCta
27
+ from ..types.shared.visibility import Visibility
28
+ from ..types.shared.business_types import BusinessTypes
29
+ from ..types.shared.industry_types import IndustryTypes
30
+ from ..types.product_delete_response import ProductDeleteResponse
31
+ from ..types.shared.access_pass_type import AccessPassType
32
+ from ..types.shared.product_list_item import ProductListItem
33
+ from ..types.shared.visibility_filter import VisibilityFilter
34
+ from ..types.shared.global_affiliate_status import GlobalAffiliateStatus
35
+
36
+ __all__ = ["ProductsResource", "AsyncProductsResource"]
37
+
38
+
39
+ class ProductsResource(SyncAPIResource):
40
+ @cached_property
41
+ def with_raw_response(self) -> ProductsResourceWithRawResponse:
42
+ """
43
+ This property can be used as a prefix for any HTTP method call to return
44
+ the raw response object instead of the parsed content.
45
+
46
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
47
+ """
48
+ return ProductsResourceWithRawResponse(self)
49
+
50
+ @cached_property
51
+ def with_streaming_response(self) -> ProductsResourceWithStreamingResponse:
52
+ """
53
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
54
+
55
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
56
+ """
57
+ return ProductsResourceWithStreamingResponse(self)
58
+
59
+ def create(
60
+ self,
61
+ *,
62
+ company_id: str,
63
+ title: str,
64
+ business_type: Optional[BusinessTypes] | Omit = omit,
65
+ collect_shipping_address: Optional[bool] | Omit = omit,
66
+ custom_cta: Optional[CustomCta] | Omit = omit,
67
+ custom_cta_url: Optional[str] | Omit = omit,
68
+ custom_statement_descriptor: Optional[str] | Omit = omit,
69
+ description: Optional[str] | Omit = omit,
70
+ experience_ids: Optional[SequenceNotStr[str]] | Omit = omit,
71
+ global_affiliate_percentage: Optional[float] | Omit = omit,
72
+ global_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
73
+ headline: Optional[str] | Omit = omit,
74
+ industry_type: Optional[IndustryTypes] | Omit = omit,
75
+ member_affiliate_percentage: Optional[float] | Omit = omit,
76
+ member_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
77
+ plan_options: Optional[product_create_params.PlanOptions] | Omit = omit,
78
+ product_highlights: Optional[Iterable[product_create_params.ProductHighlight]] | Omit = omit,
79
+ product_tax_code_id: Optional[str] | Omit = omit,
80
+ redirect_purchase_url: Optional[str] | Omit = omit,
81
+ route: Optional[str] | Omit = omit,
82
+ visibility: Optional[Visibility] | Omit = omit,
83
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
84
+ # The extra values given here take precedence over values defined on the client or passed to this method.
85
+ extra_headers: Headers | None = None,
86
+ extra_query: Query | None = None,
87
+ extra_body: Body | None = None,
88
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
89
+ ) -> Product:
90
+ """
91
+ Creates a new Product
92
+
93
+ Required permissions:
94
+
95
+ - `access_pass:create`
96
+ - `access_pass:basic:read`
97
+
98
+ Args:
99
+ company_id: The ID of the company to create the product for.
100
+
101
+ title: The title of the product.
102
+
103
+ business_type: The different business types a company can be.
104
+
105
+ collect_shipping_address: Whether or not to collect shipping information at checkout from the customer.
106
+
107
+ custom_cta: The different types of custom CTAs that can be selected.
108
+
109
+ custom_cta_url: The custom call to action URL for the product.
110
+
111
+ custom_statement_descriptor: The custom statement descriptor for the product i.e. WHOP\\**SPORTS, must be
112
+ between 5 and 22 characters, contain at least one letter, and not contain any of
113
+ the following characters: <, >, \\,, ', "
114
+
115
+ description: A written description of the product.
116
+
117
+ experience_ids: An array of experience IDs that this pass has
118
+
119
+ global_affiliate_percentage: The percentage of the revenue that goes to the global affiliate program.
120
+
121
+ global_affiliate_status: The different statuses of the global affiliate program for a product.
122
+
123
+ headline: The headline of the product.
124
+
125
+ industry_type: The different industry types a company can be in.
126
+
127
+ member_affiliate_percentage: The percentage of the revenue that goes to the member affiliate program.
128
+
129
+ member_affiliate_status: The different statuses of the global affiliate program for a product.
130
+
131
+ plan_options: The details to assign an autogenerated plan.
132
+
133
+ product_highlights: The product highlights for the product.
134
+
135
+ product_tax_code_id: The ID of the product tax code to apply to this product.
136
+
137
+ redirect_purchase_url: The URL to redirect the customer to after a purchase.
138
+
139
+ route: The route of the product.
140
+
141
+ visibility: Visibility of a resource
142
+
143
+ extra_headers: Send extra headers
144
+
145
+ extra_query: Add additional query parameters to the request
146
+
147
+ extra_body: Add additional JSON properties to the request
148
+
149
+ timeout: Override the client-level default timeout for this request, in seconds
150
+ """
151
+ return self._post(
152
+ "/products",
153
+ body=maybe_transform(
154
+ {
155
+ "company_id": company_id,
156
+ "title": title,
157
+ "business_type": business_type,
158
+ "collect_shipping_address": collect_shipping_address,
159
+ "custom_cta": custom_cta,
160
+ "custom_cta_url": custom_cta_url,
161
+ "custom_statement_descriptor": custom_statement_descriptor,
162
+ "description": description,
163
+ "experience_ids": experience_ids,
164
+ "global_affiliate_percentage": global_affiliate_percentage,
165
+ "global_affiliate_status": global_affiliate_status,
166
+ "headline": headline,
167
+ "industry_type": industry_type,
168
+ "member_affiliate_percentage": member_affiliate_percentage,
169
+ "member_affiliate_status": member_affiliate_status,
170
+ "plan_options": plan_options,
171
+ "product_highlights": product_highlights,
172
+ "product_tax_code_id": product_tax_code_id,
173
+ "redirect_purchase_url": redirect_purchase_url,
174
+ "route": route,
175
+ "visibility": visibility,
176
+ },
177
+ product_create_params.ProductCreateParams,
178
+ ),
179
+ options=make_request_options(
180
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
181
+ ),
182
+ cast_to=Product,
183
+ )
184
+
185
+ def retrieve(
186
+ self,
187
+ id: str,
188
+ *,
189
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
190
+ # The extra values given here take precedence over values defined on the client or passed to this method.
191
+ extra_headers: Headers | None = None,
192
+ extra_query: Query | None = None,
193
+ extra_body: Body | None = None,
194
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
195
+ ) -> Product:
196
+ """
197
+ Retrieves a product by ID or route
198
+
199
+ Required permissions:
200
+
201
+ - `access_pass:basic:read`
202
+
203
+ Args:
204
+ extra_headers: Send extra headers
205
+
206
+ extra_query: Add additional query parameters to the request
207
+
208
+ extra_body: Add additional JSON properties to the request
209
+
210
+ timeout: Override the client-level default timeout for this request, in seconds
211
+ """
212
+ if not id:
213
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
214
+ return self._get(
215
+ f"/products/{id}",
216
+ options=make_request_options(
217
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
218
+ ),
219
+ cast_to=Product,
220
+ )
221
+
222
+ def update(
223
+ self,
224
+ id: str,
225
+ *,
226
+ business_type: Optional[BusinessTypes] | Omit = omit,
227
+ collect_shipping_address: Optional[bool] | Omit = omit,
228
+ custom_cta: Optional[CustomCta] | Omit = omit,
229
+ custom_cta_url: Optional[str] | Omit = omit,
230
+ custom_statement_descriptor: Optional[str] | Omit = omit,
231
+ description: Optional[str] | Omit = omit,
232
+ global_affiliate_percentage: Optional[float] | Omit = omit,
233
+ global_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
234
+ headline: Optional[str] | Omit = omit,
235
+ industry_type: Optional[IndustryTypes] | Omit = omit,
236
+ member_affiliate_percentage: Optional[float] | Omit = omit,
237
+ member_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
238
+ product_tax_code_id: Optional[str] | Omit = omit,
239
+ redirect_purchase_url: Optional[str] | Omit = omit,
240
+ route: Optional[str] | Omit = omit,
241
+ store_page_config: Optional[product_update_params.StorePageConfig] | Omit = omit,
242
+ title: Optional[str] | Omit = omit,
243
+ visibility: Optional[Visibility] | Omit = omit,
244
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
245
+ # The extra values given here take precedence over values defined on the client or passed to this method.
246
+ extra_headers: Headers | None = None,
247
+ extra_query: Query | None = None,
248
+ extra_body: Body | None = None,
249
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
250
+ ) -> Product:
251
+ """
252
+ Updates an existing Product
253
+
254
+ Required permissions:
255
+
256
+ - `access_pass:update`
257
+ - `access_pass:basic:read`
258
+
259
+ Args:
260
+ business_type: The different business types a company can be.
261
+
262
+ collect_shipping_address: Whether or not to collect shipping information at checkout from the customer.
263
+
264
+ custom_cta: The different types of custom CTAs that can be selected.
265
+
266
+ custom_cta_url: The custom call to action URL for the product.
267
+
268
+ custom_statement_descriptor: The custom statement descriptor for the product i.e. WHOP\\**SPORTS, must be
269
+ between 5 and 22 characters, contain at least one letter, and not contain any of
270
+ the following characters: <, >, \\,, ', "
271
+
272
+ description: A written description of the product.
273
+
274
+ global_affiliate_percentage: The percentage of the revenue that goes to the global affiliate program.
275
+
276
+ global_affiliate_status: The different statuses of the global affiliate program for a product.
277
+
278
+ headline: The headline of the product.
279
+
280
+ industry_type: The different industry types a company can be in.
281
+
282
+ member_affiliate_percentage: The percentage of the revenue that goes to the member affiliate program.
283
+
284
+ member_affiliate_status: The different statuses of the global affiliate program for a product.
285
+
286
+ product_tax_code_id: The ID of the product tax code to apply to this product.
287
+
288
+ redirect_purchase_url: The URL to redirect the customer to after a purchase.
289
+
290
+ route: The route of the product.
291
+
292
+ store_page_config: Configuration for a product on the company's store page.
293
+
294
+ title: The title of the product.
295
+
296
+ visibility: Visibility of a resource
297
+
298
+ extra_headers: Send extra headers
299
+
300
+ extra_query: Add additional query parameters to the request
301
+
302
+ extra_body: Add additional JSON properties to the request
303
+
304
+ timeout: Override the client-level default timeout for this request, in seconds
305
+ """
306
+ if not id:
307
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
308
+ return self._patch(
309
+ f"/products/{id}",
310
+ body=maybe_transform(
311
+ {
312
+ "business_type": business_type,
313
+ "collect_shipping_address": collect_shipping_address,
314
+ "custom_cta": custom_cta,
315
+ "custom_cta_url": custom_cta_url,
316
+ "custom_statement_descriptor": custom_statement_descriptor,
317
+ "description": description,
318
+ "global_affiliate_percentage": global_affiliate_percentage,
319
+ "global_affiliate_status": global_affiliate_status,
320
+ "headline": headline,
321
+ "industry_type": industry_type,
322
+ "member_affiliate_percentage": member_affiliate_percentage,
323
+ "member_affiliate_status": member_affiliate_status,
324
+ "product_tax_code_id": product_tax_code_id,
325
+ "redirect_purchase_url": redirect_purchase_url,
326
+ "route": route,
327
+ "store_page_config": store_page_config,
328
+ "title": title,
329
+ "visibility": visibility,
330
+ },
331
+ product_update_params.ProductUpdateParams,
332
+ ),
333
+ options=make_request_options(
334
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
335
+ ),
336
+ cast_to=Product,
337
+ )
338
+
339
+ def list(
340
+ self,
341
+ *,
342
+ company_id: str,
343
+ after: Optional[str] | Omit = omit,
344
+ before: Optional[str] | Omit = omit,
345
+ created_after: Union[str, datetime, None] | Omit = omit,
346
+ created_before: Union[str, datetime, None] | Omit = omit,
347
+ direction: Optional[Direction] | Omit = omit,
348
+ first: Optional[int] | Omit = omit,
349
+ last: Optional[int] | Omit = omit,
350
+ order: Optional[Literal["active_memberships_count", "created_at", "usd_gmv", "usd_gmv_30_days"]] | Omit = omit,
351
+ product_types: Optional[List[AccessPassType]] | Omit = omit,
352
+ visibilities: Optional[List[VisibilityFilter]] | Omit = omit,
353
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
354
+ # The extra values given here take precedence over values defined on the client or passed to this method.
355
+ extra_headers: Headers | None = None,
356
+ extra_query: Query | None = None,
357
+ extra_body: Body | None = None,
358
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
359
+ ) -> SyncCursorPage[ProductListItem]:
360
+ """
361
+ Lists products for a company
362
+
363
+ Required permissions:
364
+
365
+ - `access_pass:basic:read`
366
+
367
+ Args:
368
+ company_id: The ID of the company to filter products by
369
+
370
+ after: Returns the elements in the list that come after the specified cursor.
371
+
372
+ before: Returns the elements in the list that come before the specified cursor.
373
+
374
+ created_after: The minimum creation date to filter by
375
+
376
+ created_before: The maximum creation date to filter by
377
+
378
+ direction: The direction of the sort.
379
+
380
+ first: Returns the first _n_ elements from the list.
381
+
382
+ last: Returns the last _n_ elements from the list.
383
+
384
+ order: The ways a relation of AccessPasses can be ordered
385
+
386
+ product_types: The type of products to filter by
387
+
388
+ visibilities: The visibility of the products to filter by
389
+
390
+ extra_headers: Send extra headers
391
+
392
+ extra_query: Add additional query parameters to the request
393
+
394
+ extra_body: Add additional JSON properties to the request
395
+
396
+ timeout: Override the client-level default timeout for this request, in seconds
397
+ """
398
+ return self._get_api_list(
399
+ "/products",
400
+ page=SyncCursorPage[ProductListItem],
401
+ options=make_request_options(
402
+ extra_headers=extra_headers,
403
+ extra_query=extra_query,
404
+ extra_body=extra_body,
405
+ timeout=timeout,
406
+ query=maybe_transform(
407
+ {
408
+ "company_id": company_id,
409
+ "after": after,
410
+ "before": before,
411
+ "created_after": created_after,
412
+ "created_before": created_before,
413
+ "direction": direction,
414
+ "first": first,
415
+ "last": last,
416
+ "order": order,
417
+ "product_types": product_types,
418
+ "visibilities": visibilities,
419
+ },
420
+ product_list_params.ProductListParams,
421
+ ),
422
+ ),
423
+ model=ProductListItem,
424
+ )
425
+
426
+ def delete(
427
+ self,
428
+ id: str,
429
+ *,
430
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
431
+ # The extra values given here take precedence over values defined on the client or passed to this method.
432
+ extra_headers: Headers | None = None,
433
+ extra_query: Query | None = None,
434
+ extra_body: Body | None = None,
435
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
436
+ ) -> ProductDeleteResponse:
437
+ """
438
+ Deletes an existing Product
439
+
440
+ Required permissions:
441
+
442
+ - `access_pass:delete`
443
+
444
+ Args:
445
+ extra_headers: Send extra headers
446
+
447
+ extra_query: Add additional query parameters to the request
448
+
449
+ extra_body: Add additional JSON properties to the request
450
+
451
+ timeout: Override the client-level default timeout for this request, in seconds
452
+ """
453
+ if not id:
454
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
455
+ return self._delete(
456
+ f"/products/{id}",
457
+ options=make_request_options(
458
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
459
+ ),
460
+ cast_to=ProductDeleteResponse,
461
+ )
462
+
463
+
464
+ class AsyncProductsResource(AsyncAPIResource):
465
+ @cached_property
466
+ def with_raw_response(self) -> AsyncProductsResourceWithRawResponse:
467
+ """
468
+ This property can be used as a prefix for any HTTP method call to return
469
+ the raw response object instead of the parsed content.
470
+
471
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
472
+ """
473
+ return AsyncProductsResourceWithRawResponse(self)
474
+
475
+ @cached_property
476
+ def with_streaming_response(self) -> AsyncProductsResourceWithStreamingResponse:
477
+ """
478
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
479
+
480
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
481
+ """
482
+ return AsyncProductsResourceWithStreamingResponse(self)
483
+
484
+ async def create(
485
+ self,
486
+ *,
487
+ company_id: str,
488
+ title: str,
489
+ business_type: Optional[BusinessTypes] | Omit = omit,
490
+ collect_shipping_address: Optional[bool] | Omit = omit,
491
+ custom_cta: Optional[CustomCta] | Omit = omit,
492
+ custom_cta_url: Optional[str] | Omit = omit,
493
+ custom_statement_descriptor: Optional[str] | Omit = omit,
494
+ description: Optional[str] | Omit = omit,
495
+ experience_ids: Optional[SequenceNotStr[str]] | Omit = omit,
496
+ global_affiliate_percentage: Optional[float] | Omit = omit,
497
+ global_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
498
+ headline: Optional[str] | Omit = omit,
499
+ industry_type: Optional[IndustryTypes] | Omit = omit,
500
+ member_affiliate_percentage: Optional[float] | Omit = omit,
501
+ member_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
502
+ plan_options: Optional[product_create_params.PlanOptions] | Omit = omit,
503
+ product_highlights: Optional[Iterable[product_create_params.ProductHighlight]] | Omit = omit,
504
+ product_tax_code_id: Optional[str] | Omit = omit,
505
+ redirect_purchase_url: Optional[str] | Omit = omit,
506
+ route: Optional[str] | Omit = omit,
507
+ visibility: Optional[Visibility] | Omit = omit,
508
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
509
+ # The extra values given here take precedence over values defined on the client or passed to this method.
510
+ extra_headers: Headers | None = None,
511
+ extra_query: Query | None = None,
512
+ extra_body: Body | None = None,
513
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
514
+ ) -> Product:
515
+ """
516
+ Creates a new Product
517
+
518
+ Required permissions:
519
+
520
+ - `access_pass:create`
521
+ - `access_pass:basic:read`
522
+
523
+ Args:
524
+ company_id: The ID of the company to create the product for.
525
+
526
+ title: The title of the product.
527
+
528
+ business_type: The different business types a company can be.
529
+
530
+ collect_shipping_address: Whether or not to collect shipping information at checkout from the customer.
531
+
532
+ custom_cta: The different types of custom CTAs that can be selected.
533
+
534
+ custom_cta_url: The custom call to action URL for the product.
535
+
536
+ custom_statement_descriptor: The custom statement descriptor for the product i.e. WHOP\\**SPORTS, must be
537
+ between 5 and 22 characters, contain at least one letter, and not contain any of
538
+ the following characters: <, >, \\,, ', "
539
+
540
+ description: A written description of the product.
541
+
542
+ experience_ids: An array of experience IDs that this pass has
543
+
544
+ global_affiliate_percentage: The percentage of the revenue that goes to the global affiliate program.
545
+
546
+ global_affiliate_status: The different statuses of the global affiliate program for a product.
547
+
548
+ headline: The headline of the product.
549
+
550
+ industry_type: The different industry types a company can be in.
551
+
552
+ member_affiliate_percentage: The percentage of the revenue that goes to the member affiliate program.
553
+
554
+ member_affiliate_status: The different statuses of the global affiliate program for a product.
555
+
556
+ plan_options: The details to assign an autogenerated plan.
557
+
558
+ product_highlights: The product highlights for the product.
559
+
560
+ product_tax_code_id: The ID of the product tax code to apply to this product.
561
+
562
+ redirect_purchase_url: The URL to redirect the customer to after a purchase.
563
+
564
+ route: The route of the product.
565
+
566
+ visibility: Visibility of a resource
567
+
568
+ extra_headers: Send extra headers
569
+
570
+ extra_query: Add additional query parameters to the request
571
+
572
+ extra_body: Add additional JSON properties to the request
573
+
574
+ timeout: Override the client-level default timeout for this request, in seconds
575
+ """
576
+ return await self._post(
577
+ "/products",
578
+ body=await async_maybe_transform(
579
+ {
580
+ "company_id": company_id,
581
+ "title": title,
582
+ "business_type": business_type,
583
+ "collect_shipping_address": collect_shipping_address,
584
+ "custom_cta": custom_cta,
585
+ "custom_cta_url": custom_cta_url,
586
+ "custom_statement_descriptor": custom_statement_descriptor,
587
+ "description": description,
588
+ "experience_ids": experience_ids,
589
+ "global_affiliate_percentage": global_affiliate_percentage,
590
+ "global_affiliate_status": global_affiliate_status,
591
+ "headline": headline,
592
+ "industry_type": industry_type,
593
+ "member_affiliate_percentage": member_affiliate_percentage,
594
+ "member_affiliate_status": member_affiliate_status,
595
+ "plan_options": plan_options,
596
+ "product_highlights": product_highlights,
597
+ "product_tax_code_id": product_tax_code_id,
598
+ "redirect_purchase_url": redirect_purchase_url,
599
+ "route": route,
600
+ "visibility": visibility,
601
+ },
602
+ product_create_params.ProductCreateParams,
603
+ ),
604
+ options=make_request_options(
605
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
606
+ ),
607
+ cast_to=Product,
608
+ )
609
+
610
+ async def retrieve(
611
+ self,
612
+ id: str,
613
+ *,
614
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
615
+ # The extra values given here take precedence over values defined on the client or passed to this method.
616
+ extra_headers: Headers | None = None,
617
+ extra_query: Query | None = None,
618
+ extra_body: Body | None = None,
619
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
620
+ ) -> Product:
621
+ """
622
+ Retrieves a product by ID or route
623
+
624
+ Required permissions:
625
+
626
+ - `access_pass:basic:read`
627
+
628
+ Args:
629
+ extra_headers: Send extra headers
630
+
631
+ extra_query: Add additional query parameters to the request
632
+
633
+ extra_body: Add additional JSON properties to the request
634
+
635
+ timeout: Override the client-level default timeout for this request, in seconds
636
+ """
637
+ if not id:
638
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
639
+ return await self._get(
640
+ f"/products/{id}",
641
+ options=make_request_options(
642
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
643
+ ),
644
+ cast_to=Product,
645
+ )
646
+
647
+ async def update(
648
+ self,
649
+ id: str,
650
+ *,
651
+ business_type: Optional[BusinessTypes] | Omit = omit,
652
+ collect_shipping_address: Optional[bool] | Omit = omit,
653
+ custom_cta: Optional[CustomCta] | Omit = omit,
654
+ custom_cta_url: Optional[str] | Omit = omit,
655
+ custom_statement_descriptor: Optional[str] | Omit = omit,
656
+ description: Optional[str] | Omit = omit,
657
+ global_affiliate_percentage: Optional[float] | Omit = omit,
658
+ global_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
659
+ headline: Optional[str] | Omit = omit,
660
+ industry_type: Optional[IndustryTypes] | Omit = omit,
661
+ member_affiliate_percentage: Optional[float] | Omit = omit,
662
+ member_affiliate_status: Optional[GlobalAffiliateStatus] | Omit = omit,
663
+ product_tax_code_id: Optional[str] | Omit = omit,
664
+ redirect_purchase_url: Optional[str] | Omit = omit,
665
+ route: Optional[str] | Omit = omit,
666
+ store_page_config: Optional[product_update_params.StorePageConfig] | Omit = omit,
667
+ title: Optional[str] | Omit = omit,
668
+ visibility: Optional[Visibility] | Omit = omit,
669
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
670
+ # The extra values given here take precedence over values defined on the client or passed to this method.
671
+ extra_headers: Headers | None = None,
672
+ extra_query: Query | None = None,
673
+ extra_body: Body | None = None,
674
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
675
+ ) -> Product:
676
+ """
677
+ Updates an existing Product
678
+
679
+ Required permissions:
680
+
681
+ - `access_pass:update`
682
+ - `access_pass:basic:read`
683
+
684
+ Args:
685
+ business_type: The different business types a company can be.
686
+
687
+ collect_shipping_address: Whether or not to collect shipping information at checkout from the customer.
688
+
689
+ custom_cta: The different types of custom CTAs that can be selected.
690
+
691
+ custom_cta_url: The custom call to action URL for the product.
692
+
693
+ custom_statement_descriptor: The custom statement descriptor for the product i.e. WHOP\\**SPORTS, must be
694
+ between 5 and 22 characters, contain at least one letter, and not contain any of
695
+ the following characters: <, >, \\,, ', "
696
+
697
+ description: A written description of the product.
698
+
699
+ global_affiliate_percentage: The percentage of the revenue that goes to the global affiliate program.
700
+
701
+ global_affiliate_status: The different statuses of the global affiliate program for a product.
702
+
703
+ headline: The headline of the product.
704
+
705
+ industry_type: The different industry types a company can be in.
706
+
707
+ member_affiliate_percentage: The percentage of the revenue that goes to the member affiliate program.
708
+
709
+ member_affiliate_status: The different statuses of the global affiliate program for a product.
710
+
711
+ product_tax_code_id: The ID of the product tax code to apply to this product.
712
+
713
+ redirect_purchase_url: The URL to redirect the customer to after a purchase.
714
+
715
+ route: The route of the product.
716
+
717
+ store_page_config: Configuration for a product on the company's store page.
718
+
719
+ title: The title of the product.
720
+
721
+ visibility: Visibility of a resource
722
+
723
+ extra_headers: Send extra headers
724
+
725
+ extra_query: Add additional query parameters to the request
726
+
727
+ extra_body: Add additional JSON properties to the request
728
+
729
+ timeout: Override the client-level default timeout for this request, in seconds
730
+ """
731
+ if not id:
732
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
733
+ return await self._patch(
734
+ f"/products/{id}",
735
+ body=await async_maybe_transform(
736
+ {
737
+ "business_type": business_type,
738
+ "collect_shipping_address": collect_shipping_address,
739
+ "custom_cta": custom_cta,
740
+ "custom_cta_url": custom_cta_url,
741
+ "custom_statement_descriptor": custom_statement_descriptor,
742
+ "description": description,
743
+ "global_affiliate_percentage": global_affiliate_percentage,
744
+ "global_affiliate_status": global_affiliate_status,
745
+ "headline": headline,
746
+ "industry_type": industry_type,
747
+ "member_affiliate_percentage": member_affiliate_percentage,
748
+ "member_affiliate_status": member_affiliate_status,
749
+ "product_tax_code_id": product_tax_code_id,
750
+ "redirect_purchase_url": redirect_purchase_url,
751
+ "route": route,
752
+ "store_page_config": store_page_config,
753
+ "title": title,
754
+ "visibility": visibility,
755
+ },
756
+ product_update_params.ProductUpdateParams,
757
+ ),
758
+ options=make_request_options(
759
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
760
+ ),
761
+ cast_to=Product,
762
+ )
763
+
764
+ def list(
765
+ self,
766
+ *,
767
+ company_id: str,
768
+ after: Optional[str] | Omit = omit,
769
+ before: Optional[str] | Omit = omit,
770
+ created_after: Union[str, datetime, None] | Omit = omit,
771
+ created_before: Union[str, datetime, None] | Omit = omit,
772
+ direction: Optional[Direction] | Omit = omit,
773
+ first: Optional[int] | Omit = omit,
774
+ last: Optional[int] | Omit = omit,
775
+ order: Optional[Literal["active_memberships_count", "created_at", "usd_gmv", "usd_gmv_30_days"]] | Omit = omit,
776
+ product_types: Optional[List[AccessPassType]] | Omit = omit,
777
+ visibilities: Optional[List[VisibilityFilter]] | Omit = omit,
778
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
779
+ # The extra values given here take precedence over values defined on the client or passed to this method.
780
+ extra_headers: Headers | None = None,
781
+ extra_query: Query | None = None,
782
+ extra_body: Body | None = None,
783
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
784
+ ) -> AsyncPaginator[ProductListItem, AsyncCursorPage[ProductListItem]]:
785
+ """
786
+ Lists products for a company
787
+
788
+ Required permissions:
789
+
790
+ - `access_pass:basic:read`
791
+
792
+ Args:
793
+ company_id: The ID of the company to filter products by
794
+
795
+ after: Returns the elements in the list that come after the specified cursor.
796
+
797
+ before: Returns the elements in the list that come before the specified cursor.
798
+
799
+ created_after: The minimum creation date to filter by
800
+
801
+ created_before: The maximum creation date to filter by
802
+
803
+ direction: The direction of the sort.
804
+
805
+ first: Returns the first _n_ elements from the list.
806
+
807
+ last: Returns the last _n_ elements from the list.
808
+
809
+ order: The ways a relation of AccessPasses can be ordered
810
+
811
+ product_types: The type of products to filter by
812
+
813
+ visibilities: The visibility of the products to filter by
814
+
815
+ extra_headers: Send extra headers
816
+
817
+ extra_query: Add additional query parameters to the request
818
+
819
+ extra_body: Add additional JSON properties to the request
820
+
821
+ timeout: Override the client-level default timeout for this request, in seconds
822
+ """
823
+ return self._get_api_list(
824
+ "/products",
825
+ page=AsyncCursorPage[ProductListItem],
826
+ options=make_request_options(
827
+ extra_headers=extra_headers,
828
+ extra_query=extra_query,
829
+ extra_body=extra_body,
830
+ timeout=timeout,
831
+ query=maybe_transform(
832
+ {
833
+ "company_id": company_id,
834
+ "after": after,
835
+ "before": before,
836
+ "created_after": created_after,
837
+ "created_before": created_before,
838
+ "direction": direction,
839
+ "first": first,
840
+ "last": last,
841
+ "order": order,
842
+ "product_types": product_types,
843
+ "visibilities": visibilities,
844
+ },
845
+ product_list_params.ProductListParams,
846
+ ),
847
+ ),
848
+ model=ProductListItem,
849
+ )
850
+
851
+ async def delete(
852
+ self,
853
+ id: str,
854
+ *,
855
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
856
+ # The extra values given here take precedence over values defined on the client or passed to this method.
857
+ extra_headers: Headers | None = None,
858
+ extra_query: Query | None = None,
859
+ extra_body: Body | None = None,
860
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
861
+ ) -> ProductDeleteResponse:
862
+ """
863
+ Deletes an existing Product
864
+
865
+ Required permissions:
866
+
867
+ - `access_pass:delete`
868
+
869
+ Args:
870
+ extra_headers: Send extra headers
871
+
872
+ extra_query: Add additional query parameters to the request
873
+
874
+ extra_body: Add additional JSON properties to the request
875
+
876
+ timeout: Override the client-level default timeout for this request, in seconds
877
+ """
878
+ if not id:
879
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
880
+ return await self._delete(
881
+ f"/products/{id}",
882
+ options=make_request_options(
883
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
884
+ ),
885
+ cast_to=ProductDeleteResponse,
886
+ )
887
+
888
+
889
+ class ProductsResourceWithRawResponse:
890
+ def __init__(self, products: ProductsResource) -> None:
891
+ self._products = products
892
+
893
+ self.create = to_raw_response_wrapper(
894
+ products.create,
895
+ )
896
+ self.retrieve = to_raw_response_wrapper(
897
+ products.retrieve,
898
+ )
899
+ self.update = to_raw_response_wrapper(
900
+ products.update,
901
+ )
902
+ self.list = to_raw_response_wrapper(
903
+ products.list,
904
+ )
905
+ self.delete = to_raw_response_wrapper(
906
+ products.delete,
907
+ )
908
+
909
+
910
+ class AsyncProductsResourceWithRawResponse:
911
+ def __init__(self, products: AsyncProductsResource) -> None:
912
+ self._products = products
913
+
914
+ self.create = async_to_raw_response_wrapper(
915
+ products.create,
916
+ )
917
+ self.retrieve = async_to_raw_response_wrapper(
918
+ products.retrieve,
919
+ )
920
+ self.update = async_to_raw_response_wrapper(
921
+ products.update,
922
+ )
923
+ self.list = async_to_raw_response_wrapper(
924
+ products.list,
925
+ )
926
+ self.delete = async_to_raw_response_wrapper(
927
+ products.delete,
928
+ )
929
+
930
+
931
+ class ProductsResourceWithStreamingResponse:
932
+ def __init__(self, products: ProductsResource) -> None:
933
+ self._products = products
934
+
935
+ self.create = to_streamed_response_wrapper(
936
+ products.create,
937
+ )
938
+ self.retrieve = to_streamed_response_wrapper(
939
+ products.retrieve,
940
+ )
941
+ self.update = to_streamed_response_wrapper(
942
+ products.update,
943
+ )
944
+ self.list = to_streamed_response_wrapper(
945
+ products.list,
946
+ )
947
+ self.delete = to_streamed_response_wrapper(
948
+ products.delete,
949
+ )
950
+
951
+
952
+ class AsyncProductsResourceWithStreamingResponse:
953
+ def __init__(self, products: AsyncProductsResource) -> None:
954
+ self._products = products
955
+
956
+ self.create = async_to_streamed_response_wrapper(
957
+ products.create,
958
+ )
959
+ self.retrieve = async_to_streamed_response_wrapper(
960
+ products.retrieve,
961
+ )
962
+ self.update = async_to_streamed_response_wrapper(
963
+ products.update,
964
+ )
965
+ self.list = async_to_streamed_response_wrapper(
966
+ products.list,
967
+ )
968
+ self.delete = async_to_streamed_response_wrapper(
969
+ products.delete,
970
+ )