whop-sdk 0.0.1__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.

Potentially problematic release.


This version of whop-sdk might be problematic. Click here for more details.

Files changed (212) hide show
  1. whop_sdk/__init__.py +94 -0
  2. whop_sdk/_base_client.py +1995 -0
  3. whop_sdk/_client.py +664 -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 +835 -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 +86 -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 +316 -0
  31. whop_sdk/resources/app_builds.py +562 -0
  32. whop_sdk/resources/apps.py +665 -0
  33. whop_sdk/resources/authorized_users.py +336 -0
  34. whop_sdk/resources/chat_channels.py +469 -0
  35. whop_sdk/resources/checkout_configurations.py +464 -0
  36. whop_sdk/resources/companies.py +171 -0
  37. whop_sdk/resources/course_lesson_interactions.py +343 -0
  38. whop_sdk/resources/entries.py +539 -0
  39. whop_sdk/resources/experiences.py +859 -0
  40. whop_sdk/resources/forum_posts.py +512 -0
  41. whop_sdk/resources/invoices.py +633 -0
  42. whop_sdk/resources/ledger_accounts.py +171 -0
  43. whop_sdk/resources/memberships.py +810 -0
  44. whop_sdk/resources/messages.py +446 -0
  45. whop_sdk/resources/payments.py +761 -0
  46. whop_sdk/resources/plans.py +906 -0
  47. whop_sdk/resources/products.py +969 -0
  48. whop_sdk/resources/reactions.py +423 -0
  49. whop_sdk/resources/shipments.py +451 -0
  50. whop_sdk/resources/support_channels.py +455 -0
  51. whop_sdk/resources/transfers.py +488 -0
  52. whop_sdk/resources/users.py +248 -0
  53. whop_sdk/resources/webhooks.py +69 -0
  54. whop_sdk/types/__init__.py +135 -0
  55. whop_sdk/types/app_build_create_params.py +59 -0
  56. whop_sdk/types/app_build_list_params.py +34 -0
  57. whop_sdk/types/app_build_list_response.py +50 -0
  58. whop_sdk/types/app_create_params.py +19 -0
  59. whop_sdk/types/app_list_params.py +54 -0
  60. whop_sdk/types/app_list_response.py +91 -0
  61. whop_sdk/types/app_update_params.py +58 -0
  62. whop_sdk/types/authorized_user_list_params.py +33 -0
  63. whop_sdk/types/authorized_user_list_response.py +33 -0
  64. whop_sdk/types/authorized_user_retrieve_response.py +33 -0
  65. whop_sdk/types/chat_channel_list_params.py +28 -0
  66. whop_sdk/types/chat_channel_list_response.py +43 -0
  67. whop_sdk/types/chat_channel_update_params.py +32 -0
  68. whop_sdk/types/checkout_configuration_create_params.py +129 -0
  69. whop_sdk/types/checkout_configuration_list_params.py +33 -0
  70. whop_sdk/types/checkout_configuration_list_response.py +66 -0
  71. whop_sdk/types/course_lesson_interaction_list_params.py +34 -0
  72. whop_sdk/types/entry_approve_response.py +10 -0
  73. whop_sdk/types/entry_list_params.py +44 -0
  74. whop_sdk/types/entry_list_response.py +56 -0
  75. whop_sdk/types/experience_attach_params.py +12 -0
  76. whop_sdk/types/experience_create_params.py +22 -0
  77. whop_sdk/types/experience_delete_response.py +7 -0
  78. whop_sdk/types/experience_detach_params.py +12 -0
  79. whop_sdk/types/experience_list_params.py +31 -0
  80. whop_sdk/types/experience_list_response.py +47 -0
  81. whop_sdk/types/experience_update_params.py +41 -0
  82. whop_sdk/types/forum_post_create_params.py +85 -0
  83. whop_sdk/types/forum_post_list_params.py +31 -0
  84. whop_sdk/types/forum_post_list_response.py +53 -0
  85. whop_sdk/types/invoice_create_params.py +137 -0
  86. whop_sdk/types/invoice_create_response.py +16 -0
  87. whop_sdk/types/invoice_created_webhook_event.py +26 -0
  88. whop_sdk/types/invoice_list_params.py +50 -0
  89. whop_sdk/types/invoice_paid_webhook_event.py +26 -0
  90. whop_sdk/types/invoice_past_due_webhook_event.py +26 -0
  91. whop_sdk/types/invoice_void_response.py +7 -0
  92. whop_sdk/types/invoice_voided_webhook_event.py +26 -0
  93. whop_sdk/types/ledger_account_retrieve_response.py +78 -0
  94. whop_sdk/types/membership_cancel_params.py +13 -0
  95. whop_sdk/types/membership_list_params.py +70 -0
  96. whop_sdk/types/membership_list_response.py +117 -0
  97. whop_sdk/types/membership_pause_params.py +16 -0
  98. whop_sdk/types/membership_update_params.py +13 -0
  99. whop_sdk/types/message_create_params.py +51 -0
  100. whop_sdk/types/message_list_params.py +30 -0
  101. whop_sdk/types/message_list_response.py +90 -0
  102. whop_sdk/types/payment_list_params.py +72 -0
  103. whop_sdk/types/payment_list_response.py +221 -0
  104. whop_sdk/types/payment_refund_params.py +13 -0
  105. whop_sdk/types/plan_create_params.py +106 -0
  106. whop_sdk/types/plan_delete_response.py +7 -0
  107. whop_sdk/types/plan_list_params.py +49 -0
  108. whop_sdk/types/plan_list_response.py +92 -0
  109. whop_sdk/types/plan_update_params.py +95 -0
  110. whop_sdk/types/product_create_params.py +170 -0
  111. whop_sdk/types/product_delete_response.py +7 -0
  112. whop_sdk/types/product_list_params.py +41 -0
  113. whop_sdk/types/product_update_params.py +90 -0
  114. whop_sdk/types/reaction_create_params.py +19 -0
  115. whop_sdk/types/reaction_list_params.py +25 -0
  116. whop_sdk/types/reaction_list_response.py +32 -0
  117. whop_sdk/types/shared/__init__.py +55 -0
  118. whop_sdk/types/shared/access_pass_type.py +7 -0
  119. whop_sdk/types/shared/app.py +159 -0
  120. whop_sdk/types/shared/app_build.py +50 -0
  121. whop_sdk/types/shared/app_build_platforms.py +7 -0
  122. whop_sdk/types/shared/app_build_statuses.py +7 -0
  123. whop_sdk/types/shared/app_statuses.py +7 -0
  124. whop_sdk/types/shared/app_view_type.py +7 -0
  125. whop_sdk/types/shared/authorized_user_roles.py +9 -0
  126. whop_sdk/types/shared/business_types.py +22 -0
  127. whop_sdk/types/shared/chat_channel.py +43 -0
  128. whop_sdk/types/shared/checkout_configuration.py +66 -0
  129. whop_sdk/types/shared/collection_method.py +7 -0
  130. whop_sdk/types/shared/company.py +71 -0
  131. whop_sdk/types/shared/course_lesson_interaction.py +44 -0
  132. whop_sdk/types/shared/course_lesson_interaction_list_item.py +44 -0
  133. whop_sdk/types/shared/currency.py +92 -0
  134. whop_sdk/types/shared/custom_cta.py +21 -0
  135. whop_sdk/types/shared/direction.py +7 -0
  136. whop_sdk/types/shared/dms_post_types.py +7 -0
  137. whop_sdk/types/shared/entry.py +70 -0
  138. whop_sdk/types/shared/entry_status.py +7 -0
  139. whop_sdk/types/shared/experience.py +66 -0
  140. whop_sdk/types/shared/forum_post.py +53 -0
  141. whop_sdk/types/shared/friendly_receipt_status.py +24 -0
  142. whop_sdk/types/shared/global_affiliate_status.py +7 -0
  143. whop_sdk/types/shared/industry_types.py +67 -0
  144. whop_sdk/types/shared/invoice.py +61 -0
  145. whop_sdk/types/shared/invoice_list_item.py +61 -0
  146. whop_sdk/types/shared/invoice_status.py +7 -0
  147. whop_sdk/types/shared/membership.py +117 -0
  148. whop_sdk/types/shared/membership_status.py +9 -0
  149. whop_sdk/types/shared/message.py +90 -0
  150. whop_sdk/types/shared/page_info.py +21 -0
  151. whop_sdk/types/shared/payment.py +211 -0
  152. whop_sdk/types/shared/plan.py +123 -0
  153. whop_sdk/types/shared/plan_type.py +7 -0
  154. whop_sdk/types/shared/product.py +124 -0
  155. whop_sdk/types/shared/product_list_item.py +49 -0
  156. whop_sdk/types/shared/promo_type.py +7 -0
  157. whop_sdk/types/shared/reaction.py +32 -0
  158. whop_sdk/types/shared/receipt_status.py +7 -0
  159. whop_sdk/types/shared/release_method.py +7 -0
  160. whop_sdk/types/shared/shipment.py +48 -0
  161. whop_sdk/types/shared/shipment_carrier.py +84 -0
  162. whop_sdk/types/shared/shipment_status.py +18 -0
  163. whop_sdk/types/shared/shipment_substatus.py +36 -0
  164. whop_sdk/types/shared/support_channel.py +39 -0
  165. whop_sdk/types/shared/tax_type.py +7 -0
  166. whop_sdk/types/shared/transfer.py +109 -0
  167. whop_sdk/types/shared/visibility.py +7 -0
  168. whop_sdk/types/shared/visibility_filter.py +9 -0
  169. whop_sdk/types/shared/who_can_post.py +7 -0
  170. whop_sdk/types/shared/who_can_react.py +7 -0
  171. whop_sdk/types/shared_params/__init__.py +27 -0
  172. whop_sdk/types/shared_params/access_pass_type.py +9 -0
  173. whop_sdk/types/shared_params/app_build_platforms.py +9 -0
  174. whop_sdk/types/shared_params/app_build_statuses.py +9 -0
  175. whop_sdk/types/shared_params/app_statuses.py +9 -0
  176. whop_sdk/types/shared_params/app_view_type.py +9 -0
  177. whop_sdk/types/shared_params/authorized_user_roles.py +11 -0
  178. whop_sdk/types/shared_params/business_types.py +24 -0
  179. whop_sdk/types/shared_params/collection_method.py +9 -0
  180. whop_sdk/types/shared_params/currency.py +94 -0
  181. whop_sdk/types/shared_params/custom_cta.py +23 -0
  182. whop_sdk/types/shared_params/direction.py +9 -0
  183. whop_sdk/types/shared_params/entry_status.py +9 -0
  184. whop_sdk/types/shared_params/friendly_receipt_status.py +26 -0
  185. whop_sdk/types/shared_params/global_affiliate_status.py +9 -0
  186. whop_sdk/types/shared_params/industry_types.py +69 -0
  187. whop_sdk/types/shared_params/invoice_status.py +9 -0
  188. whop_sdk/types/shared_params/membership_status.py +11 -0
  189. whop_sdk/types/shared_params/plan_type.py +9 -0
  190. whop_sdk/types/shared_params/receipt_status.py +9 -0
  191. whop_sdk/types/shared_params/release_method.py +9 -0
  192. whop_sdk/types/shared_params/tax_type.py +9 -0
  193. whop_sdk/types/shared_params/visibility.py +9 -0
  194. whop_sdk/types/shared_params/visibility_filter.py +11 -0
  195. whop_sdk/types/shared_params/who_can_post.py +9 -0
  196. whop_sdk/types/shared_params/who_can_react.py +9 -0
  197. whop_sdk/types/shipment_create_params.py +18 -0
  198. whop_sdk/types/shipment_list_params.py +31 -0
  199. whop_sdk/types/shipment_list_response.py +48 -0
  200. whop_sdk/types/support_channel_create_params.py +15 -0
  201. whop_sdk/types/support_channel_list_params.py +40 -0
  202. whop_sdk/types/support_channel_list_response.py +39 -0
  203. whop_sdk/types/transfer_create_params.py +36 -0
  204. whop_sdk/types/transfer_list_params.py +42 -0
  205. whop_sdk/types/transfer_list_response.py +35 -0
  206. whop_sdk/types/unwrap_webhook_event.py +15 -0
  207. whop_sdk/types/user_check_access_response.py +15 -0
  208. whop_sdk/types/user_retrieve_response.py +25 -0
  209. whop_sdk-0.0.1.dist-info/METADATA +522 -0
  210. whop_sdk-0.0.1.dist-info/RECORD +212 -0
  211. whop_sdk-0.0.1.dist-info/WHEEL +4 -0
  212. whop_sdk-0.0.1.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,906 @@
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, Iterable, Optional
6
+ from typing_extensions import Literal
7
+
8
+ import httpx
9
+
10
+ from ..types import plan_list_params, plan_create_params, plan_update_params
11
+ from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
12
+ from .._utils import maybe_transform, async_maybe_transform
13
+ from .._compat import cached_property
14
+ from .._resource import SyncAPIResource, AsyncAPIResource
15
+ from .._response import (
16
+ to_raw_response_wrapper,
17
+ to_streamed_response_wrapper,
18
+ async_to_raw_response_wrapper,
19
+ async_to_streamed_response_wrapper,
20
+ )
21
+ from ..pagination import SyncCursorPage, AsyncCursorPage
22
+ from .._base_client import AsyncPaginator, make_request_options
23
+ from ..types.shared.plan import Plan
24
+ from ..types.shared.currency import Currency
25
+ from ..types.shared.tax_type import TaxType
26
+ from ..types.shared.direction import Direction
27
+ from ..types.shared.plan_type import PlanType
28
+ from ..types.shared.visibility import Visibility
29
+ from ..types.plan_list_response import PlanListResponse
30
+ from ..types.plan_delete_response import PlanDeleteResponse
31
+ from ..types.shared.release_method import ReleaseMethod
32
+ from ..types.shared.visibility_filter import VisibilityFilter
33
+
34
+ __all__ = ["PlansResource", "AsyncPlansResource"]
35
+
36
+
37
+ class PlansResource(SyncAPIResource):
38
+ @cached_property
39
+ def with_raw_response(self) -> PlansResourceWithRawResponse:
40
+ """
41
+ This property can be used as a prefix for any HTTP method call to return
42
+ the raw response object instead of the parsed content.
43
+
44
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
45
+ """
46
+ return PlansResourceWithRawResponse(self)
47
+
48
+ @cached_property
49
+ def with_streaming_response(self) -> PlansResourceWithStreamingResponse:
50
+ """
51
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
52
+
53
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
54
+ """
55
+ return PlansResourceWithStreamingResponse(self)
56
+
57
+ def create(
58
+ self,
59
+ *,
60
+ company_id: str,
61
+ product_id: str,
62
+ billing_period: Optional[int] | Omit = omit,
63
+ currency: Optional[Currency] | Omit = omit,
64
+ custom_fields: Optional[Iterable[plan_create_params.CustomField]] | Omit = omit,
65
+ description: Optional[str] | Omit = omit,
66
+ expiration_days: Optional[int] | Omit = omit,
67
+ image: Optional[plan_create_params.Image] | Omit = omit,
68
+ initial_price: Optional[float] | Omit = omit,
69
+ internal_notes: Optional[str] | Omit = omit,
70
+ override_tax_type: Optional[TaxType] | Omit = omit,
71
+ plan_type: Optional[PlanType] | Omit = omit,
72
+ release_method: Optional[ReleaseMethod] | Omit = omit,
73
+ renewal_price: Optional[float] | Omit = omit,
74
+ title: Optional[str] | Omit = omit,
75
+ trial_period_days: Optional[int] | Omit = omit,
76
+ visibility: Optional[Visibility] | Omit = omit,
77
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
78
+ # The extra values given here take precedence over values defined on the client or passed to this method.
79
+ extra_headers: Headers | None = None,
80
+ extra_query: Query | None = None,
81
+ extra_body: Body | None = None,
82
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
83
+ ) -> Plan:
84
+ """
85
+ Create a new Plan
86
+
87
+ Required permissions:
88
+
89
+ - `plan:create`
90
+ - `access_pass:basic:read`
91
+ - `plan:basic:read`
92
+
93
+ Args:
94
+ company_id: The company the plan should be created for.
95
+
96
+ product_id: The product the plan is related to.
97
+
98
+ billing_period: The interval at which the plan charges (renewal plans).
99
+
100
+ currency: The available currencies on the platform
101
+
102
+ custom_fields: An array of custom field objects.
103
+
104
+ description: The description of the plan.
105
+
106
+ expiration_days: The interval at which the plan charges (expiration plans).
107
+
108
+ image: An image for the plan. This will be visible on the product page to customers.
109
+
110
+ initial_price: An additional amount charged upon first purchase.
111
+
112
+ internal_notes: A personal description or notes section for the business.
113
+
114
+ override_tax_type: Whether or not the tax is included in a plan's price (or if it hasn't been set
115
+ up)
116
+
117
+ plan_type: The type of plan that can be attached to an access pass
118
+
119
+ release_method: The methods of how a plan can be released.
120
+
121
+ renewal_price: The amount the customer is charged every billing period.
122
+
123
+ title: The title of the plan. This will be visible on the product page to customers.
124
+
125
+ trial_period_days: The number of free trial days added before a renewal plan.
126
+
127
+ visibility: Visibility of a resource
128
+
129
+ extra_headers: Send extra headers
130
+
131
+ extra_query: Add additional query parameters to the request
132
+
133
+ extra_body: Add additional JSON properties to the request
134
+
135
+ timeout: Override the client-level default timeout for this request, in seconds
136
+ """
137
+ return self._post(
138
+ "/plans",
139
+ body=maybe_transform(
140
+ {
141
+ "company_id": company_id,
142
+ "product_id": product_id,
143
+ "billing_period": billing_period,
144
+ "currency": currency,
145
+ "custom_fields": custom_fields,
146
+ "description": description,
147
+ "expiration_days": expiration_days,
148
+ "image": image,
149
+ "initial_price": initial_price,
150
+ "internal_notes": internal_notes,
151
+ "override_tax_type": override_tax_type,
152
+ "plan_type": plan_type,
153
+ "release_method": release_method,
154
+ "renewal_price": renewal_price,
155
+ "title": title,
156
+ "trial_period_days": trial_period_days,
157
+ "visibility": visibility,
158
+ },
159
+ plan_create_params.PlanCreateParams,
160
+ ),
161
+ options=make_request_options(
162
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
163
+ ),
164
+ cast_to=Plan,
165
+ )
166
+
167
+ def retrieve(
168
+ self,
169
+ id: str,
170
+ *,
171
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
172
+ # The extra values given here take precedence over values defined on the client or passed to this method.
173
+ extra_headers: Headers | None = None,
174
+ extra_query: Query | None = None,
175
+ extra_body: Body | None = None,
176
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
177
+ ) -> Plan:
178
+ """
179
+ Retrieves a plan by ID
180
+
181
+ Required permissions:
182
+
183
+ - `plan:basic:read`
184
+
185
+ Args:
186
+ extra_headers: Send extra headers
187
+
188
+ extra_query: Add additional query parameters to the request
189
+
190
+ extra_body: Add additional JSON properties to the request
191
+
192
+ timeout: Override the client-level default timeout for this request, in seconds
193
+ """
194
+ if not id:
195
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
196
+ return self._get(
197
+ f"/plans/{id}",
198
+ options=make_request_options(
199
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
200
+ ),
201
+ cast_to=Plan,
202
+ )
203
+
204
+ def update(
205
+ self,
206
+ id: str,
207
+ *,
208
+ billing_period: Optional[int] | Omit = omit,
209
+ currency: Optional[Currency] | Omit = omit,
210
+ custom_fields: Optional[Iterable[plan_update_params.CustomField]] | Omit = omit,
211
+ description: Optional[str] | Omit = omit,
212
+ expiration_days: Optional[int] | Omit = omit,
213
+ image: Optional[plan_update_params.Image] | Omit = omit,
214
+ initial_price: Optional[float] | Omit = omit,
215
+ internal_notes: Optional[str] | Omit = omit,
216
+ offer_cancel_discount: Optional[bool] | Omit = omit,
217
+ override_tax_type: Optional[TaxType] | Omit = omit,
218
+ renewal_price: Optional[float] | Omit = omit,
219
+ title: Optional[str] | Omit = omit,
220
+ trial_period_days: Optional[int] | Omit = omit,
221
+ visibility: Optional[Visibility] | Omit = omit,
222
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
223
+ # The extra values given here take precedence over values defined on the client or passed to this method.
224
+ extra_headers: Headers | None = None,
225
+ extra_query: Query | None = None,
226
+ extra_body: Body | None = None,
227
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
228
+ ) -> Plan:
229
+ """
230
+ Update an existing Plan
231
+
232
+ Required permissions:
233
+
234
+ - `plan:update`
235
+ - `access_pass:basic:read`
236
+ - `plan:basic:read`
237
+
238
+ Args:
239
+ billing_period: The interval at which the plan charges (renewal plans).
240
+
241
+ currency: The available currencies on the platform
242
+
243
+ custom_fields: An array of custom field objects.
244
+
245
+ description: The description of the plan.
246
+
247
+ expiration_days: The interval at which the plan charges (expiration plans).
248
+
249
+ image: An image for the plan. This will be visible on the product page to customers.
250
+
251
+ initial_price: An additional amount charged upon first purchase.
252
+
253
+ internal_notes: A personal description or notes section for the business.
254
+
255
+ offer_cancel_discount: Whether or not to offer a discount to cancel a subscription.
256
+
257
+ override_tax_type: Whether or not the tax is included in a plan's price (or if it hasn't been set
258
+ up)
259
+
260
+ renewal_price: The amount the customer is charged every billing period.
261
+
262
+ title: The title of the plan. This will be visible on the product page to customers.
263
+
264
+ trial_period_days: The number of free trial days added before a renewal plan.
265
+
266
+ visibility: Visibility of a resource
267
+
268
+ extra_headers: Send extra headers
269
+
270
+ extra_query: Add additional query parameters to the request
271
+
272
+ extra_body: Add additional JSON properties to the request
273
+
274
+ timeout: Override the client-level default timeout for this request, in seconds
275
+ """
276
+ if not id:
277
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
278
+ return self._patch(
279
+ f"/plans/{id}",
280
+ body=maybe_transform(
281
+ {
282
+ "billing_period": billing_period,
283
+ "currency": currency,
284
+ "custom_fields": custom_fields,
285
+ "description": description,
286
+ "expiration_days": expiration_days,
287
+ "image": image,
288
+ "initial_price": initial_price,
289
+ "internal_notes": internal_notes,
290
+ "offer_cancel_discount": offer_cancel_discount,
291
+ "override_tax_type": override_tax_type,
292
+ "renewal_price": renewal_price,
293
+ "title": title,
294
+ "trial_period_days": trial_period_days,
295
+ "visibility": visibility,
296
+ },
297
+ plan_update_params.PlanUpdateParams,
298
+ ),
299
+ options=make_request_options(
300
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
301
+ ),
302
+ cast_to=Plan,
303
+ )
304
+
305
+ def list(
306
+ self,
307
+ *,
308
+ company_id: str,
309
+ after: Optional[str] | Omit = omit,
310
+ before: Optional[str] | Omit = omit,
311
+ direction: Optional[Direction] | Omit = omit,
312
+ first: Optional[int] | Omit = omit,
313
+ last: Optional[int] | Omit = omit,
314
+ order: Optional[Literal["id", "active_members_count", "created_at", "internal_notes", "expires_at"]]
315
+ | Omit = omit,
316
+ plan_types: Optional[List[PlanType]] | Omit = omit,
317
+ product_ids: Optional[SequenceNotStr[str]] | Omit = omit,
318
+ release_methods: Optional[List[ReleaseMethod]] | Omit = omit,
319
+ visibilities: Optional[List[VisibilityFilter]] | Omit = omit,
320
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
321
+ # The extra values given here take precedence over values defined on the client or passed to this method.
322
+ extra_headers: Headers | None = None,
323
+ extra_query: Query | None = None,
324
+ extra_body: Body | None = None,
325
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
326
+ ) -> SyncCursorPage[PlanListResponse]:
327
+ """
328
+ Lists plans for a company
329
+
330
+ Required permissions:
331
+
332
+ - `plan:basic:read`
333
+
334
+ Args:
335
+ company_id: The ID of the company
336
+
337
+ after: Returns the elements in the list that come after the specified cursor.
338
+
339
+ before: Returns the elements in the list that come before the specified cursor.
340
+
341
+ direction: The direction of the sort.
342
+
343
+ first: Returns the first _n_ elements from the list.
344
+
345
+ last: Returns the last _n_ elements from the list.
346
+
347
+ order: The ways a relation of Plans can be ordered
348
+
349
+ plan_types: The plan type to filter the plans by
350
+
351
+ product_ids: The product IDs to filter the plans by
352
+
353
+ release_methods: The release method to filter the plans by
354
+
355
+ visibilities: The visibility to filter the plans by
356
+
357
+ extra_headers: Send extra headers
358
+
359
+ extra_query: Add additional query parameters to the request
360
+
361
+ extra_body: Add additional JSON properties to the request
362
+
363
+ timeout: Override the client-level default timeout for this request, in seconds
364
+ """
365
+ return self._get_api_list(
366
+ "/plans",
367
+ page=SyncCursorPage[PlanListResponse],
368
+ options=make_request_options(
369
+ extra_headers=extra_headers,
370
+ extra_query=extra_query,
371
+ extra_body=extra_body,
372
+ timeout=timeout,
373
+ query=maybe_transform(
374
+ {
375
+ "company_id": company_id,
376
+ "after": after,
377
+ "before": before,
378
+ "direction": direction,
379
+ "first": first,
380
+ "last": last,
381
+ "order": order,
382
+ "plan_types": plan_types,
383
+ "product_ids": product_ids,
384
+ "release_methods": release_methods,
385
+ "visibilities": visibilities,
386
+ },
387
+ plan_list_params.PlanListParams,
388
+ ),
389
+ ),
390
+ model=PlanListResponse,
391
+ )
392
+
393
+ def delete(
394
+ self,
395
+ id: str,
396
+ *,
397
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
398
+ # The extra values given here take precedence over values defined on the client or passed to this method.
399
+ extra_headers: Headers | None = None,
400
+ extra_query: Query | None = None,
401
+ extra_body: Body | None = None,
402
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
403
+ ) -> PlanDeleteResponse:
404
+ """
405
+ Delete an existing Plan
406
+
407
+ Required permissions:
408
+
409
+ - `plan:delete`
410
+
411
+ Args:
412
+ extra_headers: Send extra headers
413
+
414
+ extra_query: Add additional query parameters to the request
415
+
416
+ extra_body: Add additional JSON properties to the request
417
+
418
+ timeout: Override the client-level default timeout for this request, in seconds
419
+ """
420
+ if not id:
421
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
422
+ return self._delete(
423
+ f"/plans/{id}",
424
+ options=make_request_options(
425
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
426
+ ),
427
+ cast_to=PlanDeleteResponse,
428
+ )
429
+
430
+
431
+ class AsyncPlansResource(AsyncAPIResource):
432
+ @cached_property
433
+ def with_raw_response(self) -> AsyncPlansResourceWithRawResponse:
434
+ """
435
+ This property can be used as a prefix for any HTTP method call to return
436
+ the raw response object instead of the parsed content.
437
+
438
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
439
+ """
440
+ return AsyncPlansResourceWithRawResponse(self)
441
+
442
+ @cached_property
443
+ def with_streaming_response(self) -> AsyncPlansResourceWithStreamingResponse:
444
+ """
445
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
446
+
447
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
448
+ """
449
+ return AsyncPlansResourceWithStreamingResponse(self)
450
+
451
+ async def create(
452
+ self,
453
+ *,
454
+ company_id: str,
455
+ product_id: str,
456
+ billing_period: Optional[int] | Omit = omit,
457
+ currency: Optional[Currency] | Omit = omit,
458
+ custom_fields: Optional[Iterable[plan_create_params.CustomField]] | Omit = omit,
459
+ description: Optional[str] | Omit = omit,
460
+ expiration_days: Optional[int] | Omit = omit,
461
+ image: Optional[plan_create_params.Image] | Omit = omit,
462
+ initial_price: Optional[float] | Omit = omit,
463
+ internal_notes: Optional[str] | Omit = omit,
464
+ override_tax_type: Optional[TaxType] | Omit = omit,
465
+ plan_type: Optional[PlanType] | Omit = omit,
466
+ release_method: Optional[ReleaseMethod] | Omit = omit,
467
+ renewal_price: Optional[float] | Omit = omit,
468
+ title: Optional[str] | Omit = omit,
469
+ trial_period_days: Optional[int] | Omit = omit,
470
+ visibility: Optional[Visibility] | Omit = omit,
471
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
472
+ # The extra values given here take precedence over values defined on the client or passed to this method.
473
+ extra_headers: Headers | None = None,
474
+ extra_query: Query | None = None,
475
+ extra_body: Body | None = None,
476
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
477
+ ) -> Plan:
478
+ """
479
+ Create a new Plan
480
+
481
+ Required permissions:
482
+
483
+ - `plan:create`
484
+ - `access_pass:basic:read`
485
+ - `plan:basic:read`
486
+
487
+ Args:
488
+ company_id: The company the plan should be created for.
489
+
490
+ product_id: The product the plan is related to.
491
+
492
+ billing_period: The interval at which the plan charges (renewal plans).
493
+
494
+ currency: The available currencies on the platform
495
+
496
+ custom_fields: An array of custom field objects.
497
+
498
+ description: The description of the plan.
499
+
500
+ expiration_days: The interval at which the plan charges (expiration plans).
501
+
502
+ image: An image for the plan. This will be visible on the product page to customers.
503
+
504
+ initial_price: An additional amount charged upon first purchase.
505
+
506
+ internal_notes: A personal description or notes section for the business.
507
+
508
+ override_tax_type: Whether or not the tax is included in a plan's price (or if it hasn't been set
509
+ up)
510
+
511
+ plan_type: The type of plan that can be attached to an access pass
512
+
513
+ release_method: The methods of how a plan can be released.
514
+
515
+ renewal_price: The amount the customer is charged every billing period.
516
+
517
+ title: The title of the plan. This will be visible on the product page to customers.
518
+
519
+ trial_period_days: The number of free trial days added before a renewal plan.
520
+
521
+ visibility: Visibility of a resource
522
+
523
+ extra_headers: Send extra headers
524
+
525
+ extra_query: Add additional query parameters to the request
526
+
527
+ extra_body: Add additional JSON properties to the request
528
+
529
+ timeout: Override the client-level default timeout for this request, in seconds
530
+ """
531
+ return await self._post(
532
+ "/plans",
533
+ body=await async_maybe_transform(
534
+ {
535
+ "company_id": company_id,
536
+ "product_id": product_id,
537
+ "billing_period": billing_period,
538
+ "currency": currency,
539
+ "custom_fields": custom_fields,
540
+ "description": description,
541
+ "expiration_days": expiration_days,
542
+ "image": image,
543
+ "initial_price": initial_price,
544
+ "internal_notes": internal_notes,
545
+ "override_tax_type": override_tax_type,
546
+ "plan_type": plan_type,
547
+ "release_method": release_method,
548
+ "renewal_price": renewal_price,
549
+ "title": title,
550
+ "trial_period_days": trial_period_days,
551
+ "visibility": visibility,
552
+ },
553
+ plan_create_params.PlanCreateParams,
554
+ ),
555
+ options=make_request_options(
556
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
557
+ ),
558
+ cast_to=Plan,
559
+ )
560
+
561
+ async def retrieve(
562
+ self,
563
+ id: str,
564
+ *,
565
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
566
+ # The extra values given here take precedence over values defined on the client or passed to this method.
567
+ extra_headers: Headers | None = None,
568
+ extra_query: Query | None = None,
569
+ extra_body: Body | None = None,
570
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
571
+ ) -> Plan:
572
+ """
573
+ Retrieves a plan by ID
574
+
575
+ Required permissions:
576
+
577
+ - `plan:basic:read`
578
+
579
+ Args:
580
+ extra_headers: Send extra headers
581
+
582
+ extra_query: Add additional query parameters to the request
583
+
584
+ extra_body: Add additional JSON properties to the request
585
+
586
+ timeout: Override the client-level default timeout for this request, in seconds
587
+ """
588
+ if not id:
589
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
590
+ return await self._get(
591
+ f"/plans/{id}",
592
+ options=make_request_options(
593
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
594
+ ),
595
+ cast_to=Plan,
596
+ )
597
+
598
+ async def update(
599
+ self,
600
+ id: str,
601
+ *,
602
+ billing_period: Optional[int] | Omit = omit,
603
+ currency: Optional[Currency] | Omit = omit,
604
+ custom_fields: Optional[Iterable[plan_update_params.CustomField]] | Omit = omit,
605
+ description: Optional[str] | Omit = omit,
606
+ expiration_days: Optional[int] | Omit = omit,
607
+ image: Optional[plan_update_params.Image] | Omit = omit,
608
+ initial_price: Optional[float] | Omit = omit,
609
+ internal_notes: Optional[str] | Omit = omit,
610
+ offer_cancel_discount: Optional[bool] | Omit = omit,
611
+ override_tax_type: Optional[TaxType] | Omit = omit,
612
+ renewal_price: Optional[float] | Omit = omit,
613
+ title: Optional[str] | Omit = omit,
614
+ trial_period_days: Optional[int] | Omit = omit,
615
+ visibility: Optional[Visibility] | Omit = omit,
616
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
617
+ # The extra values given here take precedence over values defined on the client or passed to this method.
618
+ extra_headers: Headers | None = None,
619
+ extra_query: Query | None = None,
620
+ extra_body: Body | None = None,
621
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
622
+ ) -> Plan:
623
+ """
624
+ Update an existing Plan
625
+
626
+ Required permissions:
627
+
628
+ - `plan:update`
629
+ - `access_pass:basic:read`
630
+ - `plan:basic:read`
631
+
632
+ Args:
633
+ billing_period: The interval at which the plan charges (renewal plans).
634
+
635
+ currency: The available currencies on the platform
636
+
637
+ custom_fields: An array of custom field objects.
638
+
639
+ description: The description of the plan.
640
+
641
+ expiration_days: The interval at which the plan charges (expiration plans).
642
+
643
+ image: An image for the plan. This will be visible on the product page to customers.
644
+
645
+ initial_price: An additional amount charged upon first purchase.
646
+
647
+ internal_notes: A personal description or notes section for the business.
648
+
649
+ offer_cancel_discount: Whether or not to offer a discount to cancel a subscription.
650
+
651
+ override_tax_type: Whether or not the tax is included in a plan's price (or if it hasn't been set
652
+ up)
653
+
654
+ renewal_price: The amount the customer is charged every billing period.
655
+
656
+ title: The title of the plan. This will be visible on the product page to customers.
657
+
658
+ trial_period_days: The number of free trial days added before a renewal plan.
659
+
660
+ visibility: Visibility of a resource
661
+
662
+ extra_headers: Send extra headers
663
+
664
+ extra_query: Add additional query parameters to the request
665
+
666
+ extra_body: Add additional JSON properties to the request
667
+
668
+ timeout: Override the client-level default timeout for this request, in seconds
669
+ """
670
+ if not id:
671
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
672
+ return await self._patch(
673
+ f"/plans/{id}",
674
+ body=await async_maybe_transform(
675
+ {
676
+ "billing_period": billing_period,
677
+ "currency": currency,
678
+ "custom_fields": custom_fields,
679
+ "description": description,
680
+ "expiration_days": expiration_days,
681
+ "image": image,
682
+ "initial_price": initial_price,
683
+ "internal_notes": internal_notes,
684
+ "offer_cancel_discount": offer_cancel_discount,
685
+ "override_tax_type": override_tax_type,
686
+ "renewal_price": renewal_price,
687
+ "title": title,
688
+ "trial_period_days": trial_period_days,
689
+ "visibility": visibility,
690
+ },
691
+ plan_update_params.PlanUpdateParams,
692
+ ),
693
+ options=make_request_options(
694
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
695
+ ),
696
+ cast_to=Plan,
697
+ )
698
+
699
+ def list(
700
+ self,
701
+ *,
702
+ company_id: str,
703
+ after: Optional[str] | Omit = omit,
704
+ before: Optional[str] | Omit = omit,
705
+ direction: Optional[Direction] | Omit = omit,
706
+ first: Optional[int] | Omit = omit,
707
+ last: Optional[int] | Omit = omit,
708
+ order: Optional[Literal["id", "active_members_count", "created_at", "internal_notes", "expires_at"]]
709
+ | Omit = omit,
710
+ plan_types: Optional[List[PlanType]] | Omit = omit,
711
+ product_ids: Optional[SequenceNotStr[str]] | Omit = omit,
712
+ release_methods: Optional[List[ReleaseMethod]] | Omit = omit,
713
+ visibilities: Optional[List[VisibilityFilter]] | Omit = omit,
714
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
715
+ # The extra values given here take precedence over values defined on the client or passed to this method.
716
+ extra_headers: Headers | None = None,
717
+ extra_query: Query | None = None,
718
+ extra_body: Body | None = None,
719
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
720
+ ) -> AsyncPaginator[PlanListResponse, AsyncCursorPage[PlanListResponse]]:
721
+ """
722
+ Lists plans for a company
723
+
724
+ Required permissions:
725
+
726
+ - `plan:basic:read`
727
+
728
+ Args:
729
+ company_id: The ID of the company
730
+
731
+ after: Returns the elements in the list that come after the specified cursor.
732
+
733
+ before: Returns the elements in the list that come before the specified cursor.
734
+
735
+ direction: The direction of the sort.
736
+
737
+ first: Returns the first _n_ elements from the list.
738
+
739
+ last: Returns the last _n_ elements from the list.
740
+
741
+ order: The ways a relation of Plans can be ordered
742
+
743
+ plan_types: The plan type to filter the plans by
744
+
745
+ product_ids: The product IDs to filter the plans by
746
+
747
+ release_methods: The release method to filter the plans by
748
+
749
+ visibilities: The visibility to filter the plans by
750
+
751
+ extra_headers: Send extra headers
752
+
753
+ extra_query: Add additional query parameters to the request
754
+
755
+ extra_body: Add additional JSON properties to the request
756
+
757
+ timeout: Override the client-level default timeout for this request, in seconds
758
+ """
759
+ return self._get_api_list(
760
+ "/plans",
761
+ page=AsyncCursorPage[PlanListResponse],
762
+ options=make_request_options(
763
+ extra_headers=extra_headers,
764
+ extra_query=extra_query,
765
+ extra_body=extra_body,
766
+ timeout=timeout,
767
+ query=maybe_transform(
768
+ {
769
+ "company_id": company_id,
770
+ "after": after,
771
+ "before": before,
772
+ "direction": direction,
773
+ "first": first,
774
+ "last": last,
775
+ "order": order,
776
+ "plan_types": plan_types,
777
+ "product_ids": product_ids,
778
+ "release_methods": release_methods,
779
+ "visibilities": visibilities,
780
+ },
781
+ plan_list_params.PlanListParams,
782
+ ),
783
+ ),
784
+ model=PlanListResponse,
785
+ )
786
+
787
+ async def delete(
788
+ self,
789
+ id: str,
790
+ *,
791
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
792
+ # The extra values given here take precedence over values defined on the client or passed to this method.
793
+ extra_headers: Headers | None = None,
794
+ extra_query: Query | None = None,
795
+ extra_body: Body | None = None,
796
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
797
+ ) -> PlanDeleteResponse:
798
+ """
799
+ Delete an existing Plan
800
+
801
+ Required permissions:
802
+
803
+ - `plan:delete`
804
+
805
+ Args:
806
+ extra_headers: Send extra headers
807
+
808
+ extra_query: Add additional query parameters to the request
809
+
810
+ extra_body: Add additional JSON properties to the request
811
+
812
+ timeout: Override the client-level default timeout for this request, in seconds
813
+ """
814
+ if not id:
815
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
816
+ return await self._delete(
817
+ f"/plans/{id}",
818
+ options=make_request_options(
819
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
820
+ ),
821
+ cast_to=PlanDeleteResponse,
822
+ )
823
+
824
+
825
+ class PlansResourceWithRawResponse:
826
+ def __init__(self, plans: PlansResource) -> None:
827
+ self._plans = plans
828
+
829
+ self.create = to_raw_response_wrapper(
830
+ plans.create,
831
+ )
832
+ self.retrieve = to_raw_response_wrapper(
833
+ plans.retrieve,
834
+ )
835
+ self.update = to_raw_response_wrapper(
836
+ plans.update,
837
+ )
838
+ self.list = to_raw_response_wrapper(
839
+ plans.list,
840
+ )
841
+ self.delete = to_raw_response_wrapper(
842
+ plans.delete,
843
+ )
844
+
845
+
846
+ class AsyncPlansResourceWithRawResponse:
847
+ def __init__(self, plans: AsyncPlansResource) -> None:
848
+ self._plans = plans
849
+
850
+ self.create = async_to_raw_response_wrapper(
851
+ plans.create,
852
+ )
853
+ self.retrieve = async_to_raw_response_wrapper(
854
+ plans.retrieve,
855
+ )
856
+ self.update = async_to_raw_response_wrapper(
857
+ plans.update,
858
+ )
859
+ self.list = async_to_raw_response_wrapper(
860
+ plans.list,
861
+ )
862
+ self.delete = async_to_raw_response_wrapper(
863
+ plans.delete,
864
+ )
865
+
866
+
867
+ class PlansResourceWithStreamingResponse:
868
+ def __init__(self, plans: PlansResource) -> None:
869
+ self._plans = plans
870
+
871
+ self.create = to_streamed_response_wrapper(
872
+ plans.create,
873
+ )
874
+ self.retrieve = to_streamed_response_wrapper(
875
+ plans.retrieve,
876
+ )
877
+ self.update = to_streamed_response_wrapper(
878
+ plans.update,
879
+ )
880
+ self.list = to_streamed_response_wrapper(
881
+ plans.list,
882
+ )
883
+ self.delete = to_streamed_response_wrapper(
884
+ plans.delete,
885
+ )
886
+
887
+
888
+ class AsyncPlansResourceWithStreamingResponse:
889
+ def __init__(self, plans: AsyncPlansResource) -> None:
890
+ self._plans = plans
891
+
892
+ self.create = async_to_streamed_response_wrapper(
893
+ plans.create,
894
+ )
895
+ self.retrieve = async_to_streamed_response_wrapper(
896
+ plans.retrieve,
897
+ )
898
+ self.update = async_to_streamed_response_wrapper(
899
+ plans.update,
900
+ )
901
+ self.list = async_to_streamed_response_wrapper(
902
+ plans.list,
903
+ )
904
+ self.delete = async_to_streamed_response_wrapper(
905
+ plans.delete,
906
+ )