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,56 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+ from datetime import datetime
5
+
6
+ from .._models import BaseModel
7
+ from .shared.entry_status import EntryStatus
8
+
9
+ __all__ = ["EntryListResponse", "Plan", "Product", "User"]
10
+
11
+
12
+ class Plan(BaseModel):
13
+ id: str
14
+ """The internal ID of the plan."""
15
+
16
+
17
+ class Product(BaseModel):
18
+ id: str
19
+ """The internal ID of the public product."""
20
+
21
+ title: str
22
+ """The title of the product. Use for Whop 4.0."""
23
+
24
+
25
+ class User(BaseModel):
26
+ id: str
27
+ """The internal ID of the user."""
28
+
29
+ email: Optional[str] = None
30
+ """The email of the user"""
31
+
32
+ name: Optional[str] = None
33
+ """The name of the user from their Whop account."""
34
+
35
+ username: str
36
+ """The username of the user from their Whop account."""
37
+
38
+
39
+ class EntryListResponse(BaseModel):
40
+ id: str
41
+ """The internal ID of the entry."""
42
+
43
+ created_at: Optional[datetime] = None
44
+ """When the entry was created."""
45
+
46
+ plan: Optional[Plan] = None
47
+ """The waitlist plan the entry if for."""
48
+
49
+ product: Optional[Product] = None
50
+ """The access pass tied to this entry, if there is one."""
51
+
52
+ status: EntryStatus
53
+ """The status of the entry."""
54
+
55
+ user: User
56
+ """The user who created the entry."""
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, TypedDict
6
+
7
+ __all__ = ["ExperienceAttachParams"]
8
+
9
+
10
+ class ExperienceAttachParams(TypedDict, total=False):
11
+ product_id: Required[str]
12
+ """The ID of the Access Pass to add the Experience to."""
@@ -0,0 +1,22 @@
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 Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["ExperienceCreateParams"]
9
+
10
+
11
+ class ExperienceCreateParams(TypedDict, total=False):
12
+ app_id: Required[str]
13
+ """The ID of the app to create the experience for"""
14
+
15
+ company_id: Required[str]
16
+ """The ID of the company to create the experience for"""
17
+
18
+ name: Optional[str]
19
+ """The name of the experience"""
20
+
21
+ section_id: Optional[str]
22
+ """The ID of the section to create the experience in"""
@@ -0,0 +1,7 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing_extensions import TypeAlias
4
+
5
+ __all__ = ["ExperienceDeleteResponse"]
6
+
7
+ ExperienceDeleteResponse: TypeAlias = bool
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, TypedDict
6
+
7
+ __all__ = ["ExperienceDetachParams"]
8
+
9
+
10
+ class ExperienceDetachParams(TypedDict, total=False):
11
+ product_id: Required[str]
12
+ """The ID of the Access Pass to add the Experience to."""
@@ -0,0 +1,31 @@
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 Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["ExperienceListParams"]
9
+
10
+
11
+ class ExperienceListParams(TypedDict, total=False):
12
+ company_id: Required[str]
13
+ """The ID of the company to filter experiences by"""
14
+
15
+ after: Optional[str]
16
+ """Returns the elements in the list that come after the specified cursor."""
17
+
18
+ app_id: Optional[str]
19
+ """The ID of the app to filter experiences by"""
20
+
21
+ before: Optional[str]
22
+ """Returns the elements in the list that come before the specified cursor."""
23
+
24
+ first: Optional[int]
25
+ """Returns the first _n_ elements from the list."""
26
+
27
+ last: Optional[int]
28
+ """Returns the last _n_ elements from the list."""
29
+
30
+ product_id: Optional[str]
31
+ """The ID of the product to filter experiences by"""
@@ -0,0 +1,47 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+ from datetime import datetime
5
+
6
+ from .._models import BaseModel
7
+
8
+ __all__ = ["ExperienceListResponse", "App", "Company"]
9
+
10
+
11
+ class App(BaseModel):
12
+ id: str
13
+ """The ID of the app"""
14
+
15
+ name: str
16
+ """The name of the app"""
17
+
18
+
19
+ class Company(BaseModel):
20
+ id: str
21
+ """The ID (tag) of the company."""
22
+
23
+ route: str
24
+ """The slug/route of the company on the Whop site."""
25
+
26
+ title: str
27
+ """The title of the company."""
28
+
29
+
30
+ class ExperienceListResponse(BaseModel):
31
+ id: str
32
+ """The unique ID representing this experience"""
33
+
34
+ app: App
35
+ """The experience interface for this experience."""
36
+
37
+ company: Company
38
+ """The company that owns this experience."""
39
+
40
+ created_at: datetime
41
+ """The timestamp of when this experience was created."""
42
+
43
+ name: str
44
+ """The written name of the description."""
45
+
46
+ order: Optional[str] = None
47
+ """The order of the experience in the section"""
@@ -0,0 +1,41 @@
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 Optional
6
+ from typing_extensions import Literal, TypedDict
7
+
8
+ __all__ = ["ExperienceUpdateParams", "Logo"]
9
+
10
+
11
+ class ExperienceUpdateParams(TypedDict, total=False):
12
+ access_level: Optional[Literal["public", "private"]]
13
+ """The different access levels for experiences (PUBLIC IS NEVER USED ANYMORE)."""
14
+
15
+ logo: Optional[Logo]
16
+ """The logo for the experience"""
17
+
18
+ name: Optional[str]
19
+ """The name of the experience."""
20
+
21
+ order: Optional[str]
22
+ """The order of the experience in the section."""
23
+
24
+ section_id: Optional[str]
25
+ """The ID of the section to update."""
26
+
27
+
28
+ class Logo(TypedDict, total=False):
29
+ id: Optional[str]
30
+ """The ID of an existing attachment object.
31
+
32
+ Use this when updating a resource and keeping a subset of the attachments. Don't
33
+ use this unless you know what you're doing.
34
+ """
35
+
36
+ direct_upload_id: Optional[str]
37
+ """This ID should be used the first time you upload an attachment.
38
+
39
+ It is the ID of the direct upload that was created when uploading the file to S3
40
+ via the mediaDirectUpload mutation.
41
+ """
@@ -0,0 +1,85 @@
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
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .shared.currency import Currency
9
+
10
+ __all__ = ["ForumPostCreateParams", "Attachment", "Poll", "PollOption"]
11
+
12
+
13
+ class ForumPostCreateParams(TypedDict, total=False):
14
+ experience_id: Required[str]
15
+ """The experience to create this post in"""
16
+
17
+ attachments: Optional[Iterable[Attachment]]
18
+ """The attachments for this post"""
19
+
20
+ content: Optional[str]
21
+ """This is the main body of the post in Markdown format.
22
+
23
+ Hidden if paywalled and user hasn't purchased access to it.
24
+ """
25
+
26
+ is_mention: Optional[bool]
27
+ """
28
+ This is used to determine if the post should be sent as a 'mention' notification
29
+ to all of the users who are in the experience. This means that anyone with
30
+ 'mentions' enabled will receive a notification about this post.
31
+ """
32
+
33
+ parent_id: Optional[str]
34
+ """The ID of the parent post.
35
+
36
+ Set it to the ID of the post you want to comment on or don't include it if its a
37
+ top level post.
38
+ """
39
+
40
+ paywall_amount: Optional[float]
41
+ """The amount to paywall this post by.
42
+
43
+ A paywalled post requires the user to purchase it in order to view its content.
44
+ """
45
+
46
+ paywall_currency: Optional[Currency]
47
+ """The available currencies on the platform"""
48
+
49
+ pinned: Optional[bool]
50
+ """Whether the post should be pinned"""
51
+
52
+ poll: Optional[Poll]
53
+ """The poll for this post"""
54
+
55
+ title: Optional[str]
56
+ """The title of the post. Only visible if paywalled."""
57
+
58
+
59
+ class Attachment(TypedDict, total=False):
60
+ id: Optional[str]
61
+ """The ID of an existing attachment object.
62
+
63
+ Use this when updating a resource and keeping a subset of the attachments. Don't
64
+ use this unless you know what you're doing.
65
+ """
66
+
67
+ direct_upload_id: Optional[str]
68
+ """This ID should be used the first time you upload an attachment.
69
+
70
+ It is the ID of the direct upload that was created when uploading the file to S3
71
+ via the mediaDirectUpload mutation.
72
+ """
73
+
74
+
75
+ class PollOption(TypedDict, total=False):
76
+ id: Required[str]
77
+ """Sequential ID for the poll option (starting from '1')"""
78
+
79
+ text: Required[str]
80
+ """The text of the poll option"""
81
+
82
+
83
+ class Poll(TypedDict, total=False):
84
+ options: Required[Iterable[PollOption]]
85
+ """The options for the poll. Must have sequential IDs starting from 1"""
@@ -0,0 +1,31 @@
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 Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["ForumPostListParams"]
9
+
10
+
11
+ class ForumPostListParams(TypedDict, total=False):
12
+ experience_id: Required[str]
13
+ """The ID of the experience to list forum posts for"""
14
+
15
+ after: Optional[str]
16
+ """Returns the elements in the list that come after the specified cursor."""
17
+
18
+ before: Optional[str]
19
+ """Returns the elements in the list that come before the specified cursor."""
20
+
21
+ first: Optional[int]
22
+ """Returns the first _n_ elements from the list."""
23
+
24
+ last: Optional[int]
25
+ """Returns the last _n_ elements from the list."""
26
+
27
+ parent_id: Optional[str]
28
+ """The ID of the parent post to list forum post comments for"""
29
+
30
+ pinned: Optional[bool]
31
+ """Set to true to only return pinned posts"""
@@ -0,0 +1,53 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from .._models import BaseModel
6
+
7
+ __all__ = ["ForumPostListResponse", "User"]
8
+
9
+
10
+ class User(BaseModel):
11
+ id: str
12
+ """The internal ID of the user."""
13
+
14
+ name: Optional[str] = None
15
+ """The name of the user from their Whop account."""
16
+
17
+ username: str
18
+ """The username of the user from their Whop account."""
19
+
20
+
21
+ class ForumPostListResponse(BaseModel):
22
+ id: str
23
+ """The unique identifier for the entity"""
24
+
25
+ comment_count: int
26
+ """The amount of comments on this post"""
27
+
28
+ content: Optional[str] = None
29
+ """The content of the forum post in Markdown format"""
30
+
31
+ is_edited: bool
32
+ """Whether the forum post has been edited"""
33
+
34
+ is_pinned: bool
35
+ """Whether this forum post is pinned"""
36
+
37
+ is_poster_admin: bool
38
+ """Whether the user that sent the post is an admin of the company"""
39
+
40
+ like_count: Optional[int] = None
41
+ """The number of likes this post has received"""
42
+
43
+ parent_id: Optional[str] = None
44
+ """The ID of the parent forum post, if applicable"""
45
+
46
+ title: Optional[str] = None
47
+ """The title of the forum post"""
48
+
49
+ user: User
50
+ """The user who created this forum post"""
51
+
52
+ view_count: Optional[int] = None
53
+ """The number of times this message has been viewed"""
@@ -0,0 +1,137 @@
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 Union, Iterable, Optional
6
+ from datetime import datetime
7
+ from typing_extensions import Literal, Required, Annotated, TypedDict
8
+
9
+ from .._utils import PropertyInfo
10
+ from .shared.plan_type import PlanType
11
+ from .shared.visibility import Visibility
12
+ from .shared.release_method import ReleaseMethod
13
+ from .shared.collection_method import CollectionMethod
14
+
15
+ __all__ = ["InvoiceCreateParams", "Plan", "PlanCustomField", "Product"]
16
+
17
+
18
+ class InvoiceCreateParams(TypedDict, total=False):
19
+ collection_method: Required[CollectionMethod]
20
+ """The method of collection for this invoice.
21
+
22
+ If using charge_automatically, you must provide a payment_token.
23
+ """
24
+
25
+ company_id: Required[str]
26
+ """The company ID to create this invoice for."""
27
+
28
+ due_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]]
29
+ """The date the invoice is due, if applicable."""
30
+
31
+ plan: Required[Plan]
32
+ """The properties of the plan to create for this invoice."""
33
+
34
+ charge_buyer_fee: Optional[bool]
35
+ """Whether or not to charge the customer a buyer fee."""
36
+
37
+ customer_name: Optional[str]
38
+ """The name of the customer to create this invoice for.
39
+
40
+ This is required if you want to create an invoice for a customer who does not
41
+ have a member of your company yet.
42
+ """
43
+
44
+ email_address: Optional[str]
45
+ """The email address to create this invoice for.
46
+
47
+ This is required if you want to create an invoice for a user who does not have a
48
+ member of your company yet.
49
+ """
50
+
51
+ member_id: Optional[str]
52
+ """The member ID to create this invoice for.
53
+
54
+ Include this if you want to create an invoice for an existing member. If you do
55
+ not have a member ID, you must provide an email_address and customer_name.
56
+ """
57
+
58
+ payment_token_id: Optional[str]
59
+ """The payment token ID to use for this invoice.
60
+
61
+ If using charge_automatically, you must provide a payment_token.
62
+ """
63
+
64
+ product: Optional[Product]
65
+ """The properties of the product to create for this invoice.
66
+
67
+ Include this if you want to create an invoice for a new product.
68
+ """
69
+
70
+ product_id: Optional[str]
71
+ """The product ID to create this invoice for.
72
+
73
+ Include this if you want to create an invoice for an existing product.
74
+ """
75
+
76
+
77
+ class PlanCustomField(TypedDict, total=False):
78
+ field_type: Required[Literal["text"]]
79
+ """The type of the custom field."""
80
+
81
+ name: Required[str]
82
+ """The name of the custom field."""
83
+
84
+ id: Optional[str]
85
+ """The ID of the custom field (if being updated)"""
86
+
87
+ order: Optional[int]
88
+ """The order of the field."""
89
+
90
+ placeholder: Optional[str]
91
+ """The placeholder value of the field."""
92
+
93
+ required: Optional[bool]
94
+ """Whether or not the field is required."""
95
+
96
+
97
+ class Plan(TypedDict, total=False):
98
+ billing_period: Optional[int]
99
+ """The interval at which the plan charges (renewal plans)."""
100
+
101
+ custom_fields: Optional[Iterable[PlanCustomField]]
102
+ """An array of custom field objects."""
103
+
104
+ description: Optional[str]
105
+ """The description of the plan."""
106
+
107
+ expiration_days: Optional[int]
108
+ """The interval at which the plan charges (expiration plans)."""
109
+
110
+ initial_price: Optional[float]
111
+ """An additional amount charged upon first purchase."""
112
+
113
+ internal_notes: Optional[str]
114
+ """A personal description or notes section for the business."""
115
+
116
+ plan_type: Optional[PlanType]
117
+ """The type of plan that can be attached to an access pass"""
118
+
119
+ release_method: Optional[ReleaseMethod]
120
+ """The methods of how a plan can be released."""
121
+
122
+ renewal_price: Optional[float]
123
+ """The amount the customer is charged every billing period."""
124
+
125
+ trial_period_days: Optional[int]
126
+ """The number of free trial days added before a renewal plan."""
127
+
128
+ visibility: Optional[Visibility]
129
+ """Visibility of a resource"""
130
+
131
+
132
+ class Product(TypedDict, total=False):
133
+ title: Required[str]
134
+ """The title of the product."""
135
+
136
+ product_tax_code_id: Optional[str]
137
+ """The ID of the product tax code to apply to this product."""
@@ -0,0 +1,16 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from .._models import BaseModel
6
+ from .shared.invoice import Invoice
7
+
8
+ __all__ = ["InvoiceCreateResponse"]
9
+
10
+
11
+ class InvoiceCreateResponse(BaseModel):
12
+ checkout_job_id: Optional[str] = None
13
+ """The ID of the checkout job that was created for this invoice."""
14
+
15
+ invoice: Invoice
16
+ """The invoice that was created for this invoice."""
@@ -0,0 +1,26 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from datetime import datetime
4
+ from typing_extensions import Literal
5
+
6
+ from .._models import BaseModel
7
+ from .shared.invoice import Invoice
8
+
9
+ __all__ = ["InvoiceCreatedWebhookEvent"]
10
+
11
+
12
+ class InvoiceCreatedWebhookEvent(BaseModel):
13
+ id: str
14
+ """A unique ID for every single webhook request"""
15
+
16
+ api_version: Literal["v1"]
17
+ """The API version for this webhook"""
18
+
19
+ data: Invoice
20
+ """A statement that defines an amount due by a customer."""
21
+
22
+ timestamp: datetime
23
+ """The timestamp in ISO 8601 format that the webhook was sent at on the server"""
24
+
25
+ type: Literal["invoice.created"]
26
+ """The webhook event type"""
@@ -0,0 +1,50 @@
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, Optional
6
+ from typing_extensions import Literal, Required, TypedDict
7
+
8
+ from .._types import SequenceNotStr
9
+ from .shared.direction import Direction
10
+ from .shared.invoice_status import InvoiceStatus
11
+ from .shared.collection_method import CollectionMethod
12
+
13
+ __all__ = ["InvoiceListParams", "Filters"]
14
+
15
+
16
+ class InvoiceListParams(TypedDict, total=False):
17
+ company_id: Required[str]
18
+ """The ID of the company to list invoices for"""
19
+
20
+ after: Optional[str]
21
+ """Returns the elements in the list that come after the specified cursor."""
22
+
23
+ before: Optional[str]
24
+ """Returns the elements in the list that come before the specified cursor."""
25
+
26
+ direction: Optional[Direction]
27
+ """The direction of the sort."""
28
+
29
+ filters: Optional[Filters]
30
+ """The filters to apply to the invoices"""
31
+
32
+ first: Optional[int]
33
+ """Returns the first _n_ elements from the list."""
34
+
35
+ last: Optional[int]
36
+ """Returns the last _n_ elements from the list."""
37
+
38
+ order: Optional[Literal["id", "created_at", "due_date"]]
39
+ """Which columns can be used to sort."""
40
+
41
+
42
+ class Filters(TypedDict, total=False):
43
+ access_pass_ids: Optional[SequenceNotStr[str]]
44
+ """The access pass IDs to filter the invoices by"""
45
+
46
+ collection_methods: Optional[List[CollectionMethod]]
47
+ """The collection methods to filter the invoices by"""
48
+
49
+ statuses: Optional[List[InvoiceStatus]]
50
+ """The statuses to filter the invoices by"""
@@ -0,0 +1,26 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from datetime import datetime
4
+ from typing_extensions import Literal
5
+
6
+ from .._models import BaseModel
7
+ from .shared.invoice import Invoice
8
+
9
+ __all__ = ["InvoicePaidWebhookEvent"]
10
+
11
+
12
+ class InvoicePaidWebhookEvent(BaseModel):
13
+ id: str
14
+ """A unique ID for every single webhook request"""
15
+
16
+ api_version: Literal["v1"]
17
+ """The API version for this webhook"""
18
+
19
+ data: Invoice
20
+ """A statement that defines an amount due by a customer."""
21
+
22
+ timestamp: datetime
23
+ """The timestamp in ISO 8601 format that the webhook was sent at on the server"""
24
+
25
+ type: Literal["invoice.paid"]
26
+ """The webhook event type"""