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,512 @@
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 Iterable, Optional
6
+
7
+ import httpx
8
+
9
+ from ..types import forum_post_list_params, forum_post_create_params
10
+ from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
11
+ from .._utils import maybe_transform, async_maybe_transform
12
+ from .._compat import cached_property
13
+ from .._resource import SyncAPIResource, AsyncAPIResource
14
+ from .._response import (
15
+ to_raw_response_wrapper,
16
+ to_streamed_response_wrapper,
17
+ async_to_raw_response_wrapper,
18
+ async_to_streamed_response_wrapper,
19
+ )
20
+ from ..pagination import SyncCursorPage, AsyncCursorPage
21
+ from .._base_client import AsyncPaginator, make_request_options
22
+ from ..types.shared.currency import Currency
23
+ from ..types.shared.forum_post import ForumPost
24
+ from ..types.forum_post_list_response import ForumPostListResponse
25
+
26
+ __all__ = ["ForumPostsResource", "AsyncForumPostsResource"]
27
+
28
+
29
+ class ForumPostsResource(SyncAPIResource):
30
+ @cached_property
31
+ def with_raw_response(self) -> ForumPostsResourceWithRawResponse:
32
+ """
33
+ This property can be used as a prefix for any HTTP method call to return
34
+ the raw response object instead of the parsed content.
35
+
36
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
37
+ """
38
+ return ForumPostsResourceWithRawResponse(self)
39
+
40
+ @cached_property
41
+ def with_streaming_response(self) -> ForumPostsResourceWithStreamingResponse:
42
+ """
43
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
44
+
45
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
46
+ """
47
+ return ForumPostsResourceWithStreamingResponse(self)
48
+
49
+ def create(
50
+ self,
51
+ *,
52
+ experience_id: str,
53
+ attachments: Optional[Iterable[forum_post_create_params.Attachment]] | Omit = omit,
54
+ content: Optional[str] | Omit = omit,
55
+ is_mention: Optional[bool] | Omit = omit,
56
+ parent_id: Optional[str] | Omit = omit,
57
+ paywall_amount: Optional[float] | Omit = omit,
58
+ paywall_currency: Optional[Currency] | Omit = omit,
59
+ pinned: Optional[bool] | Omit = omit,
60
+ poll: Optional[forum_post_create_params.Poll] | Omit = omit,
61
+ title: Optional[str] | Omit = omit,
62
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
63
+ # The extra values given here take precedence over values defined on the client or passed to this method.
64
+ extra_headers: Headers | None = None,
65
+ extra_query: Query | None = None,
66
+ extra_body: Body | None = None,
67
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
68
+ ) -> ForumPost:
69
+ """
70
+ Create a new forum post
71
+
72
+ Required permissions:
73
+
74
+ - `forum:post:create`
75
+
76
+ Args:
77
+ experience_id: The experience to create this post in
78
+
79
+ attachments: The attachments for this post
80
+
81
+ content: This is the main body of the post in Markdown format. Hidden if paywalled and
82
+ user hasn't purchased access to it.
83
+
84
+ is_mention: This is used to determine if the post should be sent as a 'mention' notification
85
+ to all of the users who are in the experience. This means that anyone with
86
+ 'mentions' enabled will receive a notification about this post.
87
+
88
+ parent_id: The ID of the parent post. Set it to the ID of the post you want to comment on
89
+ or don't include it if its a top level post.
90
+
91
+ paywall_amount: The amount to paywall this post by. A paywalled post requires the user to
92
+ purchase it in order to view its content.
93
+
94
+ paywall_currency: The available currencies on the platform
95
+
96
+ pinned: Whether the post should be pinned
97
+
98
+ poll: The poll for this post
99
+
100
+ title: The title of the post. Only visible if paywalled.
101
+
102
+ extra_headers: Send extra headers
103
+
104
+ extra_query: Add additional query parameters to the request
105
+
106
+ extra_body: Add additional JSON properties to the request
107
+
108
+ timeout: Override the client-level default timeout for this request, in seconds
109
+ """
110
+ return self._post(
111
+ "/forum_posts",
112
+ body=maybe_transform(
113
+ {
114
+ "experience_id": experience_id,
115
+ "attachments": attachments,
116
+ "content": content,
117
+ "is_mention": is_mention,
118
+ "parent_id": parent_id,
119
+ "paywall_amount": paywall_amount,
120
+ "paywall_currency": paywall_currency,
121
+ "pinned": pinned,
122
+ "poll": poll,
123
+ "title": title,
124
+ },
125
+ forum_post_create_params.ForumPostCreateParams,
126
+ ),
127
+ options=make_request_options(
128
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
129
+ ),
130
+ cast_to=ForumPost,
131
+ )
132
+
133
+ def retrieve(
134
+ self,
135
+ id: str,
136
+ *,
137
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
138
+ # The extra values given here take precedence over values defined on the client or passed to this method.
139
+ extra_headers: Headers | None = None,
140
+ extra_query: Query | None = None,
141
+ extra_body: Body | None = None,
142
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
143
+ ) -> ForumPost:
144
+ """
145
+ Retrieves a forum post by ID
146
+
147
+ Required permissions:
148
+
149
+ - `forum:read`
150
+
151
+ Args:
152
+ extra_headers: Send extra headers
153
+
154
+ extra_query: Add additional query parameters to the request
155
+
156
+ extra_body: Add additional JSON properties to the request
157
+
158
+ timeout: Override the client-level default timeout for this request, in seconds
159
+ """
160
+ if not id:
161
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
162
+ return self._get(
163
+ f"/forum_posts/{id}",
164
+ options=make_request_options(
165
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
166
+ ),
167
+ cast_to=ForumPost,
168
+ )
169
+
170
+ def list(
171
+ self,
172
+ *,
173
+ experience_id: str,
174
+ after: Optional[str] | Omit = omit,
175
+ before: Optional[str] | Omit = omit,
176
+ first: Optional[int] | Omit = omit,
177
+ last: Optional[int] | Omit = omit,
178
+ parent_id: Optional[str] | Omit = omit,
179
+ pinned: Optional[bool] | Omit = omit,
180
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
181
+ # The extra values given here take precedence over values defined on the client or passed to this method.
182
+ extra_headers: Headers | None = None,
183
+ extra_query: Query | None = None,
184
+ extra_body: Body | None = None,
185
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
186
+ ) -> SyncCursorPage[ForumPostListResponse]:
187
+ """
188
+ Lists forum posts
189
+
190
+ Required permissions:
191
+
192
+ - `forum:read`
193
+
194
+ Args:
195
+ experience_id: The ID of the experience to list forum posts for
196
+
197
+ after: Returns the elements in the list that come after the specified cursor.
198
+
199
+ before: Returns the elements in the list that come before the specified cursor.
200
+
201
+ first: Returns the first _n_ elements from the list.
202
+
203
+ last: Returns the last _n_ elements from the list.
204
+
205
+ parent_id: The ID of the parent post to list forum post comments for
206
+
207
+ pinned: Set to true to only return pinned posts
208
+
209
+ extra_headers: Send extra headers
210
+
211
+ extra_query: Add additional query parameters to the request
212
+
213
+ extra_body: Add additional JSON properties to the request
214
+
215
+ timeout: Override the client-level default timeout for this request, in seconds
216
+ """
217
+ return self._get_api_list(
218
+ "/forum_posts",
219
+ page=SyncCursorPage[ForumPostListResponse],
220
+ options=make_request_options(
221
+ extra_headers=extra_headers,
222
+ extra_query=extra_query,
223
+ extra_body=extra_body,
224
+ timeout=timeout,
225
+ query=maybe_transform(
226
+ {
227
+ "experience_id": experience_id,
228
+ "after": after,
229
+ "before": before,
230
+ "first": first,
231
+ "last": last,
232
+ "parent_id": parent_id,
233
+ "pinned": pinned,
234
+ },
235
+ forum_post_list_params.ForumPostListParams,
236
+ ),
237
+ ),
238
+ model=ForumPostListResponse,
239
+ )
240
+
241
+
242
+ class AsyncForumPostsResource(AsyncAPIResource):
243
+ @cached_property
244
+ def with_raw_response(self) -> AsyncForumPostsResourceWithRawResponse:
245
+ """
246
+ This property can be used as a prefix for any HTTP method call to return
247
+ the raw response object instead of the parsed content.
248
+
249
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
250
+ """
251
+ return AsyncForumPostsResourceWithRawResponse(self)
252
+
253
+ @cached_property
254
+ def with_streaming_response(self) -> AsyncForumPostsResourceWithStreamingResponse:
255
+ """
256
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
257
+
258
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
259
+ """
260
+ return AsyncForumPostsResourceWithStreamingResponse(self)
261
+
262
+ async def create(
263
+ self,
264
+ *,
265
+ experience_id: str,
266
+ attachments: Optional[Iterable[forum_post_create_params.Attachment]] | Omit = omit,
267
+ content: Optional[str] | Omit = omit,
268
+ is_mention: Optional[bool] | Omit = omit,
269
+ parent_id: Optional[str] | Omit = omit,
270
+ paywall_amount: Optional[float] | Omit = omit,
271
+ paywall_currency: Optional[Currency] | Omit = omit,
272
+ pinned: Optional[bool] | Omit = omit,
273
+ poll: Optional[forum_post_create_params.Poll] | Omit = omit,
274
+ title: Optional[str] | Omit = omit,
275
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
276
+ # The extra values given here take precedence over values defined on the client or passed to this method.
277
+ extra_headers: Headers | None = None,
278
+ extra_query: Query | None = None,
279
+ extra_body: Body | None = None,
280
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
281
+ ) -> ForumPost:
282
+ """
283
+ Create a new forum post
284
+
285
+ Required permissions:
286
+
287
+ - `forum:post:create`
288
+
289
+ Args:
290
+ experience_id: The experience to create this post in
291
+
292
+ attachments: The attachments for this post
293
+
294
+ content: This is the main body of the post in Markdown format. Hidden if paywalled and
295
+ user hasn't purchased access to it.
296
+
297
+ is_mention: This is used to determine if the post should be sent as a 'mention' notification
298
+ to all of the users who are in the experience. This means that anyone with
299
+ 'mentions' enabled will receive a notification about this post.
300
+
301
+ parent_id: The ID of the parent post. Set it to the ID of the post you want to comment on
302
+ or don't include it if its a top level post.
303
+
304
+ paywall_amount: The amount to paywall this post by. A paywalled post requires the user to
305
+ purchase it in order to view its content.
306
+
307
+ paywall_currency: The available currencies on the platform
308
+
309
+ pinned: Whether the post should be pinned
310
+
311
+ poll: The poll for this post
312
+
313
+ title: The title of the post. Only visible if paywalled.
314
+
315
+ extra_headers: Send extra headers
316
+
317
+ extra_query: Add additional query parameters to the request
318
+
319
+ extra_body: Add additional JSON properties to the request
320
+
321
+ timeout: Override the client-level default timeout for this request, in seconds
322
+ """
323
+ return await self._post(
324
+ "/forum_posts",
325
+ body=await async_maybe_transform(
326
+ {
327
+ "experience_id": experience_id,
328
+ "attachments": attachments,
329
+ "content": content,
330
+ "is_mention": is_mention,
331
+ "parent_id": parent_id,
332
+ "paywall_amount": paywall_amount,
333
+ "paywall_currency": paywall_currency,
334
+ "pinned": pinned,
335
+ "poll": poll,
336
+ "title": title,
337
+ },
338
+ forum_post_create_params.ForumPostCreateParams,
339
+ ),
340
+ options=make_request_options(
341
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
342
+ ),
343
+ cast_to=ForumPost,
344
+ )
345
+
346
+ async def retrieve(
347
+ self,
348
+ id: str,
349
+ *,
350
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
351
+ # The extra values given here take precedence over values defined on the client or passed to this method.
352
+ extra_headers: Headers | None = None,
353
+ extra_query: Query | None = None,
354
+ extra_body: Body | None = None,
355
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
356
+ ) -> ForumPost:
357
+ """
358
+ Retrieves a forum post by ID
359
+
360
+ Required permissions:
361
+
362
+ - `forum:read`
363
+
364
+ Args:
365
+ extra_headers: Send extra headers
366
+
367
+ extra_query: Add additional query parameters to the request
368
+
369
+ extra_body: Add additional JSON properties to the request
370
+
371
+ timeout: Override the client-level default timeout for this request, in seconds
372
+ """
373
+ if not id:
374
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
375
+ return await self._get(
376
+ f"/forum_posts/{id}",
377
+ options=make_request_options(
378
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
379
+ ),
380
+ cast_to=ForumPost,
381
+ )
382
+
383
+ def list(
384
+ self,
385
+ *,
386
+ experience_id: str,
387
+ after: Optional[str] | Omit = omit,
388
+ before: Optional[str] | Omit = omit,
389
+ first: Optional[int] | Omit = omit,
390
+ last: Optional[int] | Omit = omit,
391
+ parent_id: Optional[str] | Omit = omit,
392
+ pinned: Optional[bool] | Omit = omit,
393
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
394
+ # The extra values given here take precedence over values defined on the client or passed to this method.
395
+ extra_headers: Headers | None = None,
396
+ extra_query: Query | None = None,
397
+ extra_body: Body | None = None,
398
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
399
+ ) -> AsyncPaginator[ForumPostListResponse, AsyncCursorPage[ForumPostListResponse]]:
400
+ """
401
+ Lists forum posts
402
+
403
+ Required permissions:
404
+
405
+ - `forum:read`
406
+
407
+ Args:
408
+ experience_id: The ID of the experience to list forum posts for
409
+
410
+ after: Returns the elements in the list that come after the specified cursor.
411
+
412
+ before: Returns the elements in the list that come before the specified cursor.
413
+
414
+ first: Returns the first _n_ elements from the list.
415
+
416
+ last: Returns the last _n_ elements from the list.
417
+
418
+ parent_id: The ID of the parent post to list forum post comments for
419
+
420
+ pinned: Set to true to only return pinned posts
421
+
422
+ extra_headers: Send extra headers
423
+
424
+ extra_query: Add additional query parameters to the request
425
+
426
+ extra_body: Add additional JSON properties to the request
427
+
428
+ timeout: Override the client-level default timeout for this request, in seconds
429
+ """
430
+ return self._get_api_list(
431
+ "/forum_posts",
432
+ page=AsyncCursorPage[ForumPostListResponse],
433
+ options=make_request_options(
434
+ extra_headers=extra_headers,
435
+ extra_query=extra_query,
436
+ extra_body=extra_body,
437
+ timeout=timeout,
438
+ query=maybe_transform(
439
+ {
440
+ "experience_id": experience_id,
441
+ "after": after,
442
+ "before": before,
443
+ "first": first,
444
+ "last": last,
445
+ "parent_id": parent_id,
446
+ "pinned": pinned,
447
+ },
448
+ forum_post_list_params.ForumPostListParams,
449
+ ),
450
+ ),
451
+ model=ForumPostListResponse,
452
+ )
453
+
454
+
455
+ class ForumPostsResourceWithRawResponse:
456
+ def __init__(self, forum_posts: ForumPostsResource) -> None:
457
+ self._forum_posts = forum_posts
458
+
459
+ self.create = to_raw_response_wrapper(
460
+ forum_posts.create,
461
+ )
462
+ self.retrieve = to_raw_response_wrapper(
463
+ forum_posts.retrieve,
464
+ )
465
+ self.list = to_raw_response_wrapper(
466
+ forum_posts.list,
467
+ )
468
+
469
+
470
+ class AsyncForumPostsResourceWithRawResponse:
471
+ def __init__(self, forum_posts: AsyncForumPostsResource) -> None:
472
+ self._forum_posts = forum_posts
473
+
474
+ self.create = async_to_raw_response_wrapper(
475
+ forum_posts.create,
476
+ )
477
+ self.retrieve = async_to_raw_response_wrapper(
478
+ forum_posts.retrieve,
479
+ )
480
+ self.list = async_to_raw_response_wrapper(
481
+ forum_posts.list,
482
+ )
483
+
484
+
485
+ class ForumPostsResourceWithStreamingResponse:
486
+ def __init__(self, forum_posts: ForumPostsResource) -> None:
487
+ self._forum_posts = forum_posts
488
+
489
+ self.create = to_streamed_response_wrapper(
490
+ forum_posts.create,
491
+ )
492
+ self.retrieve = to_streamed_response_wrapper(
493
+ forum_posts.retrieve,
494
+ )
495
+ self.list = to_streamed_response_wrapper(
496
+ forum_posts.list,
497
+ )
498
+
499
+
500
+ class AsyncForumPostsResourceWithStreamingResponse:
501
+ def __init__(self, forum_posts: AsyncForumPostsResource) -> None:
502
+ self._forum_posts = forum_posts
503
+
504
+ self.create = async_to_streamed_response_wrapper(
505
+ forum_posts.create,
506
+ )
507
+ self.retrieve = async_to_streamed_response_wrapper(
508
+ forum_posts.retrieve,
509
+ )
510
+ self.list = async_to_streamed_response_wrapper(
511
+ forum_posts.list,
512
+ )