dodopayments 1.52.5__py3-none-any.whl → 1.53.2__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 dodopayments might be problematic. Click here for more details.

Files changed (26) hide show
  1. dodopayments/_version.py +1 -1
  2. dodopayments/resources/customers/__init__.py +14 -0
  3. dodopayments/resources/customers/customers.py +32 -0
  4. dodopayments/resources/customers/wallets/__init__.py +33 -0
  5. dodopayments/resources/customers/wallets/ledger_entries.py +318 -0
  6. dodopayments/resources/customers/wallets/wallets.py +191 -0
  7. dodopayments/resources/licenses.py +5 -5
  8. dodopayments/resources/refunds.py +7 -6
  9. dodopayments/resources/subscriptions.py +8 -0
  10. dodopayments/types/__init__.py +2 -0
  11. dodopayments/types/customers/__init__.py +2 -0
  12. dodopayments/types/customers/customer_wallet.py +20 -0
  13. dodopayments/types/customers/wallet_list_response.py +15 -0
  14. dodopayments/types/customers/wallets/__init__.py +7 -0
  15. dodopayments/types/customers/wallets/customer_wallet_transaction.py +38 -0
  16. dodopayments/types/customers/wallets/ledger_entry_create_params.py +25 -0
  17. dodopayments/types/customers/wallets/ledger_entry_list_params.py +18 -0
  18. dodopayments/types/license_activate_response.py +40 -0
  19. dodopayments/types/payment.py +31 -2
  20. dodopayments/types/refund.py +4 -0
  21. dodopayments/types/refund_list_response.py +39 -0
  22. dodopayments/types/subscription_charge_params.py +12 -1
  23. {dodopayments-1.52.5.dist-info → dodopayments-1.53.2.dist-info}/METADATA +1 -1
  24. {dodopayments-1.52.5.dist-info → dodopayments-1.53.2.dist-info}/RECORD +26 -15
  25. {dodopayments-1.52.5.dist-info → dodopayments-1.53.2.dist-info}/WHEEL +0 -0
  26. {dodopayments-1.52.5.dist-info → dodopayments-1.53.2.dist-info}/licenses/LICENSE +0 -0
dodopayments/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "dodopayments"
4
- __version__ = "1.52.5" # x-release-please-version
4
+ __version__ = "1.53.2" # x-release-please-version
@@ -1,5 +1,13 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ from .wallets import (
4
+ WalletsResource,
5
+ AsyncWalletsResource,
6
+ WalletsResourceWithRawResponse,
7
+ AsyncWalletsResourceWithRawResponse,
8
+ WalletsResourceWithStreamingResponse,
9
+ AsyncWalletsResourceWithStreamingResponse,
10
+ )
3
11
  from .customers import (
4
12
  CustomersResource,
5
13
  AsyncCustomersResource,
@@ -24,6 +32,12 @@ __all__ = [
24
32
  "AsyncCustomerPortalResourceWithRawResponse",
25
33
  "CustomerPortalResourceWithStreamingResponse",
26
34
  "AsyncCustomerPortalResourceWithStreamingResponse",
35
+ "WalletsResource",
36
+ "AsyncWalletsResource",
37
+ "WalletsResourceWithRawResponse",
38
+ "AsyncWalletsResourceWithRawResponse",
39
+ "WalletsResourceWithStreamingResponse",
40
+ "AsyncWalletsResourceWithStreamingResponse",
27
41
  "CustomersResource",
28
42
  "AsyncCustomersResource",
29
43
  "CustomersResourceWithRawResponse",
@@ -27,6 +27,14 @@ from .customer_portal import (
27
27
  CustomerPortalResourceWithStreamingResponse,
28
28
  AsyncCustomerPortalResourceWithStreamingResponse,
29
29
  )
30
+ from .wallets.wallets import (
31
+ WalletsResource,
32
+ AsyncWalletsResource,
33
+ WalletsResourceWithRawResponse,
34
+ AsyncWalletsResourceWithRawResponse,
35
+ WalletsResourceWithStreamingResponse,
36
+ AsyncWalletsResourceWithStreamingResponse,
37
+ )
30
38
  from ...types.customer import Customer
31
39
 
32
40
  __all__ = ["CustomersResource", "AsyncCustomersResource"]
@@ -37,6 +45,10 @@ class CustomersResource(SyncAPIResource):
37
45
  def customer_portal(self) -> CustomerPortalResource:
38
46
  return CustomerPortalResource(self._client)
39
47
 
48
+ @cached_property
49
+ def wallets(self) -> WalletsResource:
50
+ return WalletsResource(self._client)
51
+
40
52
  @cached_property
41
53
  def with_raw_response(self) -> CustomersResourceWithRawResponse:
42
54
  """
@@ -221,6 +233,10 @@ class AsyncCustomersResource(AsyncAPIResource):
221
233
  def customer_portal(self) -> AsyncCustomerPortalResource:
222
234
  return AsyncCustomerPortalResource(self._client)
223
235
 
236
+ @cached_property
237
+ def wallets(self) -> AsyncWalletsResource:
238
+ return AsyncWalletsResource(self._client)
239
+
224
240
  @cached_property
225
241
  def with_raw_response(self) -> AsyncCustomersResourceWithRawResponse:
226
242
  """
@@ -421,6 +437,10 @@ class CustomersResourceWithRawResponse:
421
437
  def customer_portal(self) -> CustomerPortalResourceWithRawResponse:
422
438
  return CustomerPortalResourceWithRawResponse(self._customers.customer_portal)
423
439
 
440
+ @cached_property
441
+ def wallets(self) -> WalletsResourceWithRawResponse:
442
+ return WalletsResourceWithRawResponse(self._customers.wallets)
443
+
424
444
 
425
445
  class AsyncCustomersResourceWithRawResponse:
426
446
  def __init__(self, customers: AsyncCustomersResource) -> None:
@@ -443,6 +463,10 @@ class AsyncCustomersResourceWithRawResponse:
443
463
  def customer_portal(self) -> AsyncCustomerPortalResourceWithRawResponse:
444
464
  return AsyncCustomerPortalResourceWithRawResponse(self._customers.customer_portal)
445
465
 
466
+ @cached_property
467
+ def wallets(self) -> AsyncWalletsResourceWithRawResponse:
468
+ return AsyncWalletsResourceWithRawResponse(self._customers.wallets)
469
+
446
470
 
447
471
  class CustomersResourceWithStreamingResponse:
448
472
  def __init__(self, customers: CustomersResource) -> None:
@@ -465,6 +489,10 @@ class CustomersResourceWithStreamingResponse:
465
489
  def customer_portal(self) -> CustomerPortalResourceWithStreamingResponse:
466
490
  return CustomerPortalResourceWithStreamingResponse(self._customers.customer_portal)
467
491
 
492
+ @cached_property
493
+ def wallets(self) -> WalletsResourceWithStreamingResponse:
494
+ return WalletsResourceWithStreamingResponse(self._customers.wallets)
495
+
468
496
 
469
497
  class AsyncCustomersResourceWithStreamingResponse:
470
498
  def __init__(self, customers: AsyncCustomersResource) -> None:
@@ -486,3 +514,7 @@ class AsyncCustomersResourceWithStreamingResponse:
486
514
  @cached_property
487
515
  def customer_portal(self) -> AsyncCustomerPortalResourceWithStreamingResponse:
488
516
  return AsyncCustomerPortalResourceWithStreamingResponse(self._customers.customer_portal)
517
+
518
+ @cached_property
519
+ def wallets(self) -> AsyncWalletsResourceWithStreamingResponse:
520
+ return AsyncWalletsResourceWithStreamingResponse(self._customers.wallets)
@@ -0,0 +1,33 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .wallets import (
4
+ WalletsResource,
5
+ AsyncWalletsResource,
6
+ WalletsResourceWithRawResponse,
7
+ AsyncWalletsResourceWithRawResponse,
8
+ WalletsResourceWithStreamingResponse,
9
+ AsyncWalletsResourceWithStreamingResponse,
10
+ )
11
+ from .ledger_entries import (
12
+ LedgerEntriesResource,
13
+ AsyncLedgerEntriesResource,
14
+ LedgerEntriesResourceWithRawResponse,
15
+ AsyncLedgerEntriesResourceWithRawResponse,
16
+ LedgerEntriesResourceWithStreamingResponse,
17
+ AsyncLedgerEntriesResourceWithStreamingResponse,
18
+ )
19
+
20
+ __all__ = [
21
+ "LedgerEntriesResource",
22
+ "AsyncLedgerEntriesResource",
23
+ "LedgerEntriesResourceWithRawResponse",
24
+ "AsyncLedgerEntriesResourceWithRawResponse",
25
+ "LedgerEntriesResourceWithStreamingResponse",
26
+ "AsyncLedgerEntriesResourceWithStreamingResponse",
27
+ "WalletsResource",
28
+ "AsyncWalletsResource",
29
+ "WalletsResourceWithRawResponse",
30
+ "AsyncWalletsResourceWithRawResponse",
31
+ "WalletsResourceWithStreamingResponse",
32
+ "AsyncWalletsResourceWithStreamingResponse",
33
+ ]
@@ -0,0 +1,318 @@
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
7
+
8
+ import httpx
9
+
10
+ from ....types import Currency
11
+ from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
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 SyncDefaultPageNumberPagination, AsyncDefaultPageNumberPagination
22
+ from ...._base_client import AsyncPaginator, make_request_options
23
+ from ....types.currency import Currency
24
+ from ....types.customers.wallets import ledger_entry_list_params, ledger_entry_create_params
25
+ from ....types.customers.customer_wallet import CustomerWallet
26
+ from ....types.customers.wallets.customer_wallet_transaction import CustomerWalletTransaction
27
+
28
+ __all__ = ["LedgerEntriesResource", "AsyncLedgerEntriesResource"]
29
+
30
+
31
+ class LedgerEntriesResource(SyncAPIResource):
32
+ @cached_property
33
+ def with_raw_response(self) -> LedgerEntriesResourceWithRawResponse:
34
+ """
35
+ This property can be used as a prefix for any HTTP method call to return
36
+ the raw response object instead of the parsed content.
37
+
38
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#accessing-raw-response-data-eg-headers
39
+ """
40
+ return LedgerEntriesResourceWithRawResponse(self)
41
+
42
+ @cached_property
43
+ def with_streaming_response(self) -> LedgerEntriesResourceWithStreamingResponse:
44
+ """
45
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
46
+
47
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#with_streaming_response
48
+ """
49
+ return LedgerEntriesResourceWithStreamingResponse(self)
50
+
51
+ def create(
52
+ self,
53
+ customer_id: str,
54
+ *,
55
+ amount: int,
56
+ currency: Currency,
57
+ entry_type: Literal["credit", "debit"],
58
+ idempotency_key: Optional[str] | NotGiven = NOT_GIVEN,
59
+ reason: Optional[str] | NotGiven = NOT_GIVEN,
60
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
61
+ # The extra values given here take precedence over values defined on the client or passed to this method.
62
+ extra_headers: Headers | None = None,
63
+ extra_query: Query | None = None,
64
+ extra_body: Body | None = None,
65
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
66
+ ) -> CustomerWallet:
67
+ """
68
+ Args:
69
+ currency: Currency of the wallet to adjust
70
+
71
+ entry_type: Type of ledger entry - credit or debit
72
+
73
+ idempotency_key: Optional idempotency key to prevent duplicate entries
74
+
75
+ extra_headers: Send extra headers
76
+
77
+ extra_query: Add additional query parameters to the request
78
+
79
+ extra_body: Add additional JSON properties to the request
80
+
81
+ timeout: Override the client-level default timeout for this request, in seconds
82
+ """
83
+ if not customer_id:
84
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
85
+ return self._post(
86
+ f"/customers/{customer_id}/wallets/ledger-entries",
87
+ body=maybe_transform(
88
+ {
89
+ "amount": amount,
90
+ "currency": currency,
91
+ "entry_type": entry_type,
92
+ "idempotency_key": idempotency_key,
93
+ "reason": reason,
94
+ },
95
+ ledger_entry_create_params.LedgerEntryCreateParams,
96
+ ),
97
+ options=make_request_options(
98
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
99
+ ),
100
+ cast_to=CustomerWallet,
101
+ )
102
+
103
+ def list(
104
+ self,
105
+ customer_id: str,
106
+ *,
107
+ currency: Currency | NotGiven = NOT_GIVEN,
108
+ page_number: int | NotGiven = NOT_GIVEN,
109
+ page_size: int | NotGiven = NOT_GIVEN,
110
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
111
+ # The extra values given here take precedence over values defined on the client or passed to this method.
112
+ extra_headers: Headers | None = None,
113
+ extra_query: Query | None = None,
114
+ extra_body: Body | None = None,
115
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
116
+ ) -> SyncDefaultPageNumberPagination[CustomerWalletTransaction]:
117
+ """
118
+ Args:
119
+ currency: Optional currency filter
120
+
121
+ extra_headers: Send extra headers
122
+
123
+ extra_query: Add additional query parameters to the request
124
+
125
+ extra_body: Add additional JSON properties to the request
126
+
127
+ timeout: Override the client-level default timeout for this request, in seconds
128
+ """
129
+ if not customer_id:
130
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
131
+ return self._get_api_list(
132
+ f"/customers/{customer_id}/wallets/ledger-entries",
133
+ page=SyncDefaultPageNumberPagination[CustomerWalletTransaction],
134
+ options=make_request_options(
135
+ extra_headers=extra_headers,
136
+ extra_query=extra_query,
137
+ extra_body=extra_body,
138
+ timeout=timeout,
139
+ query=maybe_transform(
140
+ {
141
+ "currency": currency,
142
+ "page_number": page_number,
143
+ "page_size": page_size,
144
+ },
145
+ ledger_entry_list_params.LedgerEntryListParams,
146
+ ),
147
+ ),
148
+ model=CustomerWalletTransaction,
149
+ )
150
+
151
+
152
+ class AsyncLedgerEntriesResource(AsyncAPIResource):
153
+ @cached_property
154
+ def with_raw_response(self) -> AsyncLedgerEntriesResourceWithRawResponse:
155
+ """
156
+ This property can be used as a prefix for any HTTP method call to return
157
+ the raw response object instead of the parsed content.
158
+
159
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#accessing-raw-response-data-eg-headers
160
+ """
161
+ return AsyncLedgerEntriesResourceWithRawResponse(self)
162
+
163
+ @cached_property
164
+ def with_streaming_response(self) -> AsyncLedgerEntriesResourceWithStreamingResponse:
165
+ """
166
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
167
+
168
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#with_streaming_response
169
+ """
170
+ return AsyncLedgerEntriesResourceWithStreamingResponse(self)
171
+
172
+ async def create(
173
+ self,
174
+ customer_id: str,
175
+ *,
176
+ amount: int,
177
+ currency: Currency,
178
+ entry_type: Literal["credit", "debit"],
179
+ idempotency_key: Optional[str] | NotGiven = NOT_GIVEN,
180
+ reason: Optional[str] | NotGiven = NOT_GIVEN,
181
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
182
+ # The extra values given here take precedence over values defined on the client or passed to this method.
183
+ extra_headers: Headers | None = None,
184
+ extra_query: Query | None = None,
185
+ extra_body: Body | None = None,
186
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
187
+ ) -> CustomerWallet:
188
+ """
189
+ Args:
190
+ currency: Currency of the wallet to adjust
191
+
192
+ entry_type: Type of ledger entry - credit or debit
193
+
194
+ idempotency_key: Optional idempotency key to prevent duplicate entries
195
+
196
+ extra_headers: Send extra headers
197
+
198
+ extra_query: Add additional query parameters to the request
199
+
200
+ extra_body: Add additional JSON properties to the request
201
+
202
+ timeout: Override the client-level default timeout for this request, in seconds
203
+ """
204
+ if not customer_id:
205
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
206
+ return await self._post(
207
+ f"/customers/{customer_id}/wallets/ledger-entries",
208
+ body=await async_maybe_transform(
209
+ {
210
+ "amount": amount,
211
+ "currency": currency,
212
+ "entry_type": entry_type,
213
+ "idempotency_key": idempotency_key,
214
+ "reason": reason,
215
+ },
216
+ ledger_entry_create_params.LedgerEntryCreateParams,
217
+ ),
218
+ options=make_request_options(
219
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
220
+ ),
221
+ cast_to=CustomerWallet,
222
+ )
223
+
224
+ def list(
225
+ self,
226
+ customer_id: str,
227
+ *,
228
+ currency: Currency | NotGiven = NOT_GIVEN,
229
+ page_number: int | NotGiven = NOT_GIVEN,
230
+ page_size: int | NotGiven = NOT_GIVEN,
231
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
232
+ # The extra values given here take precedence over values defined on the client or passed to this method.
233
+ extra_headers: Headers | None = None,
234
+ extra_query: Query | None = None,
235
+ extra_body: Body | None = None,
236
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
237
+ ) -> AsyncPaginator[CustomerWalletTransaction, AsyncDefaultPageNumberPagination[CustomerWalletTransaction]]:
238
+ """
239
+ Args:
240
+ currency: Optional currency filter
241
+
242
+ extra_headers: Send extra headers
243
+
244
+ extra_query: Add additional query parameters to the request
245
+
246
+ extra_body: Add additional JSON properties to the request
247
+
248
+ timeout: Override the client-level default timeout for this request, in seconds
249
+ """
250
+ if not customer_id:
251
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
252
+ return self._get_api_list(
253
+ f"/customers/{customer_id}/wallets/ledger-entries",
254
+ page=AsyncDefaultPageNumberPagination[CustomerWalletTransaction],
255
+ options=make_request_options(
256
+ extra_headers=extra_headers,
257
+ extra_query=extra_query,
258
+ extra_body=extra_body,
259
+ timeout=timeout,
260
+ query=maybe_transform(
261
+ {
262
+ "currency": currency,
263
+ "page_number": page_number,
264
+ "page_size": page_size,
265
+ },
266
+ ledger_entry_list_params.LedgerEntryListParams,
267
+ ),
268
+ ),
269
+ model=CustomerWalletTransaction,
270
+ )
271
+
272
+
273
+ class LedgerEntriesResourceWithRawResponse:
274
+ def __init__(self, ledger_entries: LedgerEntriesResource) -> None:
275
+ self._ledger_entries = ledger_entries
276
+
277
+ self.create = to_raw_response_wrapper(
278
+ ledger_entries.create,
279
+ )
280
+ self.list = to_raw_response_wrapper(
281
+ ledger_entries.list,
282
+ )
283
+
284
+
285
+ class AsyncLedgerEntriesResourceWithRawResponse:
286
+ def __init__(self, ledger_entries: AsyncLedgerEntriesResource) -> None:
287
+ self._ledger_entries = ledger_entries
288
+
289
+ self.create = async_to_raw_response_wrapper(
290
+ ledger_entries.create,
291
+ )
292
+ self.list = async_to_raw_response_wrapper(
293
+ ledger_entries.list,
294
+ )
295
+
296
+
297
+ class LedgerEntriesResourceWithStreamingResponse:
298
+ def __init__(self, ledger_entries: LedgerEntriesResource) -> None:
299
+ self._ledger_entries = ledger_entries
300
+
301
+ self.create = to_streamed_response_wrapper(
302
+ ledger_entries.create,
303
+ )
304
+ self.list = to_streamed_response_wrapper(
305
+ ledger_entries.list,
306
+ )
307
+
308
+
309
+ class AsyncLedgerEntriesResourceWithStreamingResponse:
310
+ def __init__(self, ledger_entries: AsyncLedgerEntriesResource) -> None:
311
+ self._ledger_entries = ledger_entries
312
+
313
+ self.create = async_to_streamed_response_wrapper(
314
+ ledger_entries.create,
315
+ )
316
+ self.list = async_to_streamed_response_wrapper(
317
+ ledger_entries.list,
318
+ )
@@ -0,0 +1,191 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import httpx
6
+
7
+ from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
8
+ from ...._compat import cached_property
9
+ from ...._resource import SyncAPIResource, AsyncAPIResource
10
+ from ...._response import (
11
+ to_raw_response_wrapper,
12
+ to_streamed_response_wrapper,
13
+ async_to_raw_response_wrapper,
14
+ async_to_streamed_response_wrapper,
15
+ )
16
+ from .ledger_entries import (
17
+ LedgerEntriesResource,
18
+ AsyncLedgerEntriesResource,
19
+ LedgerEntriesResourceWithRawResponse,
20
+ AsyncLedgerEntriesResourceWithRawResponse,
21
+ LedgerEntriesResourceWithStreamingResponse,
22
+ AsyncLedgerEntriesResourceWithStreamingResponse,
23
+ )
24
+ from ...._base_client import make_request_options
25
+ from ....types.customers.wallet_list_response import WalletListResponse
26
+
27
+ __all__ = ["WalletsResource", "AsyncWalletsResource"]
28
+
29
+
30
+ class WalletsResource(SyncAPIResource):
31
+ @cached_property
32
+ def ledger_entries(self) -> LedgerEntriesResource:
33
+ return LedgerEntriesResource(self._client)
34
+
35
+ @cached_property
36
+ def with_raw_response(self) -> WalletsResourceWithRawResponse:
37
+ """
38
+ This property can be used as a prefix for any HTTP method call to return
39
+ the raw response object instead of the parsed content.
40
+
41
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#accessing-raw-response-data-eg-headers
42
+ """
43
+ return WalletsResourceWithRawResponse(self)
44
+
45
+ @cached_property
46
+ def with_streaming_response(self) -> WalletsResourceWithStreamingResponse:
47
+ """
48
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
49
+
50
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#with_streaming_response
51
+ """
52
+ return WalletsResourceWithStreamingResponse(self)
53
+
54
+ def list(
55
+ self,
56
+ customer_id: str,
57
+ *,
58
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
59
+ # The extra values given here take precedence over values defined on the client or passed to this method.
60
+ extra_headers: Headers | None = None,
61
+ extra_query: Query | None = None,
62
+ extra_body: Body | None = None,
63
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
64
+ ) -> WalletListResponse:
65
+ """
66
+ Args:
67
+ extra_headers: Send extra headers
68
+
69
+ extra_query: Add additional query parameters to the request
70
+
71
+ extra_body: Add additional JSON properties to the request
72
+
73
+ timeout: Override the client-level default timeout for this request, in seconds
74
+ """
75
+ if not customer_id:
76
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
77
+ return self._get(
78
+ f"/customers/{customer_id}/wallets",
79
+ options=make_request_options(
80
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
81
+ ),
82
+ cast_to=WalletListResponse,
83
+ )
84
+
85
+
86
+ class AsyncWalletsResource(AsyncAPIResource):
87
+ @cached_property
88
+ def ledger_entries(self) -> AsyncLedgerEntriesResource:
89
+ return AsyncLedgerEntriesResource(self._client)
90
+
91
+ @cached_property
92
+ def with_raw_response(self) -> AsyncWalletsResourceWithRawResponse:
93
+ """
94
+ This property can be used as a prefix for any HTTP method call to return
95
+ the raw response object instead of the parsed content.
96
+
97
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#accessing-raw-response-data-eg-headers
98
+ """
99
+ return AsyncWalletsResourceWithRawResponse(self)
100
+
101
+ @cached_property
102
+ def with_streaming_response(self) -> AsyncWalletsResourceWithStreamingResponse:
103
+ """
104
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
105
+
106
+ For more information, see https://www.github.com/dodopayments/dodopayments-python#with_streaming_response
107
+ """
108
+ return AsyncWalletsResourceWithStreamingResponse(self)
109
+
110
+ async def list(
111
+ self,
112
+ customer_id: str,
113
+ *,
114
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
115
+ # The extra values given here take precedence over values defined on the client or passed to this method.
116
+ extra_headers: Headers | None = None,
117
+ extra_query: Query | None = None,
118
+ extra_body: Body | None = None,
119
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
120
+ ) -> WalletListResponse:
121
+ """
122
+ Args:
123
+ extra_headers: Send extra headers
124
+
125
+ extra_query: Add additional query parameters to the request
126
+
127
+ extra_body: Add additional JSON properties to the request
128
+
129
+ timeout: Override the client-level default timeout for this request, in seconds
130
+ """
131
+ if not customer_id:
132
+ raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
133
+ return await self._get(
134
+ f"/customers/{customer_id}/wallets",
135
+ options=make_request_options(
136
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
137
+ ),
138
+ cast_to=WalletListResponse,
139
+ )
140
+
141
+
142
+ class WalletsResourceWithRawResponse:
143
+ def __init__(self, wallets: WalletsResource) -> None:
144
+ self._wallets = wallets
145
+
146
+ self.list = to_raw_response_wrapper(
147
+ wallets.list,
148
+ )
149
+
150
+ @cached_property
151
+ def ledger_entries(self) -> LedgerEntriesResourceWithRawResponse:
152
+ return LedgerEntriesResourceWithRawResponse(self._wallets.ledger_entries)
153
+
154
+
155
+ class AsyncWalletsResourceWithRawResponse:
156
+ def __init__(self, wallets: AsyncWalletsResource) -> None:
157
+ self._wallets = wallets
158
+
159
+ self.list = async_to_raw_response_wrapper(
160
+ wallets.list,
161
+ )
162
+
163
+ @cached_property
164
+ def ledger_entries(self) -> AsyncLedgerEntriesResourceWithRawResponse:
165
+ return AsyncLedgerEntriesResourceWithRawResponse(self._wallets.ledger_entries)
166
+
167
+
168
+ class WalletsResourceWithStreamingResponse:
169
+ def __init__(self, wallets: WalletsResource) -> None:
170
+ self._wallets = wallets
171
+
172
+ self.list = to_streamed_response_wrapper(
173
+ wallets.list,
174
+ )
175
+
176
+ @cached_property
177
+ def ledger_entries(self) -> LedgerEntriesResourceWithStreamingResponse:
178
+ return LedgerEntriesResourceWithStreamingResponse(self._wallets.ledger_entries)
179
+
180
+
181
+ class AsyncWalletsResourceWithStreamingResponse:
182
+ def __init__(self, wallets: AsyncWalletsResource) -> None:
183
+ self._wallets = wallets
184
+
185
+ self.list = async_to_streamed_response_wrapper(
186
+ wallets.list,
187
+ )
188
+
189
+ @cached_property
190
+ def ledger_entries(self) -> AsyncLedgerEntriesResourceWithStreamingResponse:
191
+ return AsyncLedgerEntriesResourceWithStreamingResponse(self._wallets.ledger_entries)
@@ -18,7 +18,7 @@ from .._response import (
18
18
  async_to_streamed_response_wrapper,
19
19
  )
20
20
  from .._base_client import make_request_options
21
- from ..types.license_key_instance import LicenseKeyInstance
21
+ from ..types.license_activate_response import LicenseActivateResponse
22
22
  from ..types.license_validate_response import LicenseValidateResponse
23
23
 
24
24
  __all__ = ["LicensesResource", "AsyncLicensesResource"]
@@ -55,7 +55,7 @@ class LicensesResource(SyncAPIResource):
55
55
  extra_query: Query | None = None,
56
56
  extra_body: Body | None = None,
57
57
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
58
- ) -> LicenseKeyInstance:
58
+ ) -> LicenseActivateResponse:
59
59
  """
60
60
  Args:
61
61
  extra_headers: Send extra headers
@@ -78,7 +78,7 @@ class LicensesResource(SyncAPIResource):
78
78
  options=make_request_options(
79
79
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
80
80
  ),
81
- cast_to=LicenseKeyInstance,
81
+ cast_to=LicenseActivateResponse,
82
82
  )
83
83
 
84
84
  def deactivate(
@@ -188,7 +188,7 @@ class AsyncLicensesResource(AsyncAPIResource):
188
188
  extra_query: Query | None = None,
189
189
  extra_body: Body | None = None,
190
190
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
191
- ) -> LicenseKeyInstance:
191
+ ) -> LicenseActivateResponse:
192
192
  """
193
193
  Args:
194
194
  extra_headers: Send extra headers
@@ -211,7 +211,7 @@ class AsyncLicensesResource(AsyncAPIResource):
211
211
  options=make_request_options(
212
212
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
213
213
  ),
214
- cast_to=LicenseKeyInstance,
214
+ cast_to=LicenseActivateResponse,
215
215
  )
216
216
 
217
217
  async def deactivate(
@@ -22,6 +22,7 @@ from .._response import (
22
22
  from ..pagination import SyncDefaultPageNumberPagination, AsyncDefaultPageNumberPagination
23
23
  from .._base_client import AsyncPaginator, make_request_options
24
24
  from ..types.refund import Refund
25
+ from ..types.refund_list_response import RefundListResponse
25
26
 
26
27
  __all__ = ["RefundsResource", "AsyncRefundsResource"]
27
28
 
@@ -137,7 +138,7 @@ class RefundsResource(SyncAPIResource):
137
138
  extra_query: Query | None = None,
138
139
  extra_body: Body | None = None,
139
140
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
140
- ) -> SyncDefaultPageNumberPagination[Refund]:
141
+ ) -> SyncDefaultPageNumberPagination[RefundListResponse]:
141
142
  """
142
143
  Args:
143
144
  created_at_gte: Get events after this created time
@@ -162,7 +163,7 @@ class RefundsResource(SyncAPIResource):
162
163
  """
163
164
  return self._get_api_list(
164
165
  "/refunds",
165
- page=SyncDefaultPageNumberPagination[Refund],
166
+ page=SyncDefaultPageNumberPagination[RefundListResponse],
166
167
  options=make_request_options(
167
168
  extra_headers=extra_headers,
168
169
  extra_query=extra_query,
@@ -180,7 +181,7 @@ class RefundsResource(SyncAPIResource):
180
181
  refund_list_params.RefundListParams,
181
182
  ),
182
183
  ),
183
- model=Refund,
184
+ model=RefundListResponse,
184
185
  )
185
186
 
186
187
 
@@ -295,7 +296,7 @@ class AsyncRefundsResource(AsyncAPIResource):
295
296
  extra_query: Query | None = None,
296
297
  extra_body: Body | None = None,
297
298
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
298
- ) -> AsyncPaginator[Refund, AsyncDefaultPageNumberPagination[Refund]]:
299
+ ) -> AsyncPaginator[RefundListResponse, AsyncDefaultPageNumberPagination[RefundListResponse]]:
299
300
  """
300
301
  Args:
301
302
  created_at_gte: Get events after this created time
@@ -320,7 +321,7 @@ class AsyncRefundsResource(AsyncAPIResource):
320
321
  """
321
322
  return self._get_api_list(
322
323
  "/refunds",
323
- page=AsyncDefaultPageNumberPagination[Refund],
324
+ page=AsyncDefaultPageNumberPagination[RefundListResponse],
324
325
  options=make_request_options(
325
326
  extra_headers=extra_headers,
326
327
  extra_query=extra_query,
@@ -338,7 +339,7 @@ class AsyncRefundsResource(AsyncAPIResource):
338
339
  refund_list_params.RefundListParams,
339
340
  ),
340
341
  ),
341
- model=Refund,
342
+ model=RefundListResponse,
342
343
  )
343
344
 
344
345
 
@@ -373,6 +373,7 @@ class SubscriptionsResource(SyncAPIResource):
373
373
  *,
374
374
  product_price: int,
375
375
  adaptive_currency_fees_inclusive: Optional[bool] | NotGiven = NOT_GIVEN,
376
+ customer_balance_config: Optional[subscription_charge_params.CustomerBalanceConfig] | NotGiven = NOT_GIVEN,
376
377
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
377
378
  product_currency: Optional[Currency] | NotGiven = NOT_GIVEN,
378
379
  product_description: Optional[str] | NotGiven = NOT_GIVEN,
@@ -393,6 +394,8 @@ class SubscriptionsResource(SyncAPIResource):
393
394
  added on top (false). This field is ignored if adaptive pricing is not enabled
394
395
  for the business.
395
396
 
397
+ customer_balance_config: Specify how customer balance is used for the payment
398
+
396
399
  metadata: Metadata for the payment. If not passed, the metadata of the subscription will
397
400
  be taken
398
401
 
@@ -418,6 +421,7 @@ class SubscriptionsResource(SyncAPIResource):
418
421
  {
419
422
  "product_price": product_price,
420
423
  "adaptive_currency_fees_inclusive": adaptive_currency_fees_inclusive,
424
+ "customer_balance_config": customer_balance_config,
421
425
  "metadata": metadata,
422
426
  "product_currency": product_currency,
423
427
  "product_description": product_description,
@@ -861,6 +865,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
861
865
  *,
862
866
  product_price: int,
863
867
  adaptive_currency_fees_inclusive: Optional[bool] | NotGiven = NOT_GIVEN,
868
+ customer_balance_config: Optional[subscription_charge_params.CustomerBalanceConfig] | NotGiven = NOT_GIVEN,
864
869
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
865
870
  product_currency: Optional[Currency] | NotGiven = NOT_GIVEN,
866
871
  product_description: Optional[str] | NotGiven = NOT_GIVEN,
@@ -881,6 +886,8 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
881
886
  added on top (false). This field is ignored if adaptive pricing is not enabled
882
887
  for the business.
883
888
 
889
+ customer_balance_config: Specify how customer balance is used for the payment
890
+
884
891
  metadata: Metadata for the payment. If not passed, the metadata of the subscription will
885
892
  be taken
886
893
 
@@ -906,6 +913,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
906
913
  {
907
914
  "product_price": product_price,
908
915
  "adaptive_currency_fees_inclusive": adaptive_currency_fees_inclusive,
916
+ "customer_balance_config": customer_balance_config,
909
917
  "metadata": metadata,
910
918
  "product_currency": product_currency,
911
919
  "product_description": product_description,
@@ -59,6 +59,7 @@ from .license_key_instance import LicenseKeyInstance as LicenseKeyInstance
59
59
  from .payment_method_types import PaymentMethodTypes as PaymentMethodTypes
60
60
  from .payout_list_response import PayoutListResponse as PayoutListResponse
61
61
  from .refund_create_params import RefundCreateParams as RefundCreateParams
62
+ from .refund_list_response import RefundListResponse as RefundListResponse
62
63
  from .billing_address_param import BillingAddressParam as BillingAddressParam
63
64
  from .dispute_list_response import DisputeListResponse as DisputeListResponse
64
65
  from .payment_create_params import PaymentCreateParams as PaymentCreateParams
@@ -85,6 +86,7 @@ from .addon_cart_response_item import AddonCartResponseItem as AddonCartResponse
85
86
  from .customer_limited_details import CustomerLimitedDetails as CustomerLimitedDetails
86
87
  from .subscription_list_params import SubscriptionListParams as SubscriptionListParams
87
88
  from .checkout_session_response import CheckoutSessionResponse as CheckoutSessionResponse
89
+ from .license_activate_response import LicenseActivateResponse as LicenseActivateResponse
88
90
  from .license_deactivate_params import LicenseDeactivateParams as LicenseDeactivateParams
89
91
  from .license_key_update_params import LicenseKeyUpdateParams as LicenseKeyUpdateParams
90
92
  from .license_validate_response import LicenseValidateResponse as LicenseValidateResponse
@@ -2,4 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from .customer_wallet import CustomerWallet as CustomerWallet
6
+ from .wallet_list_response import WalletListResponse as WalletListResponse
5
7
  from .customer_portal_create_params import CustomerPortalCreateParams as CustomerPortalCreateParams
@@ -0,0 +1,20 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from datetime import datetime
4
+
5
+ from ..._models import BaseModel
6
+ from ..currency import Currency
7
+
8
+ __all__ = ["CustomerWallet"]
9
+
10
+
11
+ class CustomerWallet(BaseModel):
12
+ balance: int
13
+
14
+ created_at: datetime
15
+
16
+ currency: Currency
17
+
18
+ customer_id: str
19
+
20
+ updated_at: datetime
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List
4
+
5
+ from ..._models import BaseModel
6
+ from .customer_wallet import CustomerWallet
7
+
8
+ __all__ = ["WalletListResponse"]
9
+
10
+
11
+ class WalletListResponse(BaseModel):
12
+ items: List[CustomerWallet]
13
+
14
+ total_balance_usd: int
15
+ """Sum of all wallet balances converted to USD (in smallest unit)"""
@@ -0,0 +1,7 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from .ledger_entry_list_params import LedgerEntryListParams as LedgerEntryListParams
6
+ from .ledger_entry_create_params import LedgerEntryCreateParams as LedgerEntryCreateParams
7
+ from .customer_wallet_transaction import CustomerWalletTransaction as CustomerWalletTransaction
@@ -0,0 +1,38 @@
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
+ from typing_extensions import Literal
6
+
7
+ from ...._models import BaseModel
8
+ from ...currency import Currency
9
+
10
+ __all__ = ["CustomerWalletTransaction"]
11
+
12
+
13
+ class CustomerWalletTransaction(BaseModel):
14
+ id: str
15
+
16
+ after_balance: int
17
+
18
+ amount: int
19
+
20
+ before_balance: int
21
+
22
+ business_id: str
23
+
24
+ created_at: datetime
25
+
26
+ currency: Currency
27
+
28
+ customer_id: str
29
+
30
+ event_type: Literal[
31
+ "payment", "payment_reversal", "refund", "refund_reversal", "dispute", "dispute_reversal", "merchant_adjustment"
32
+ ]
33
+
34
+ is_credit: bool
35
+
36
+ reason: Optional[str] = None
37
+
38
+ reference_object_id: Optional[str] = None
@@ -0,0 +1,25 @@
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, Required, TypedDict
7
+
8
+ from ...currency import Currency
9
+
10
+ __all__ = ["LedgerEntryCreateParams"]
11
+
12
+
13
+ class LedgerEntryCreateParams(TypedDict, total=False):
14
+ amount: Required[int]
15
+
16
+ currency: Required[Currency]
17
+ """Currency of the wallet to adjust"""
18
+
19
+ entry_type: Required[Literal["credit", "debit"]]
20
+ """Type of ledger entry - credit or debit"""
21
+
22
+ idempotency_key: Optional[str]
23
+ """Optional idempotency key to prevent duplicate entries"""
24
+
25
+ reason: Optional[str]
@@ -0,0 +1,18 @@
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 TypedDict
6
+
7
+ from ...currency import Currency
8
+
9
+ __all__ = ["LedgerEntryListParams"]
10
+
11
+
12
+ class LedgerEntryListParams(TypedDict, total=False):
13
+ currency: Currency
14
+ """Optional currency filter"""
15
+
16
+ page_number: int
17
+
18
+ page_size: int
@@ -0,0 +1,40 @@
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 .customer_limited_details import CustomerLimitedDetails
8
+
9
+ __all__ = ["LicenseActivateResponse", "Product"]
10
+
11
+
12
+ class Product(BaseModel):
13
+ product_id: str
14
+ """Unique identifier for the product."""
15
+
16
+ name: Optional[str] = None
17
+ """Name of the product, if set by the merchant."""
18
+
19
+
20
+ class LicenseActivateResponse(BaseModel):
21
+ id: str
22
+ """License key instance ID"""
23
+
24
+ business_id: str
25
+ """Business ID"""
26
+
27
+ created_at: datetime
28
+ """Creation timestamp"""
29
+
30
+ customer: CustomerLimitedDetails
31
+ """Limited customer details associated with the license key."""
32
+
33
+ license_key_id: str
34
+ """Associated license key ID"""
35
+
36
+ name: str
37
+ """Instance name"""
38
+
39
+ product: Product
40
+ """Related product info. Present if the license key is tied to a product."""
@@ -3,16 +3,45 @@
3
3
  from typing import Dict, List, Optional
4
4
  from datetime import datetime
5
5
 
6
- from .refund import Refund
7
6
  from .dispute import Dispute
8
7
  from .._models import BaseModel
9
8
  from .currency import Currency
10
9
  from .country_code import CountryCode
11
10
  from .intent_status import IntentStatus
11
+ from .refund_status import RefundStatus
12
12
  from .billing_address import BillingAddress
13
13
  from .customer_limited_details import CustomerLimitedDetails
14
14
 
15
- __all__ = ["Payment", "ProductCart"]
15
+ __all__ = ["Payment", "Refund", "ProductCart"]
16
+
17
+
18
+ class Refund(BaseModel):
19
+ business_id: str
20
+ """The unique identifier of the business issuing the refund."""
21
+
22
+ created_at: datetime
23
+ """The timestamp of when the refund was created in UTC."""
24
+
25
+ is_partial: bool
26
+ """If true the refund is a partial refund"""
27
+
28
+ payment_id: str
29
+ """The unique identifier of the payment associated with the refund."""
30
+
31
+ refund_id: str
32
+ """The unique identifier of the refund."""
33
+
34
+ status: RefundStatus
35
+ """The current status of the refund."""
36
+
37
+ amount: Optional[int] = None
38
+ """The refunded amount."""
39
+
40
+ currency: Optional[Currency] = None
41
+ """The currency of the refund, represented as an ISO 4217 currency code."""
42
+
43
+ reason: Optional[str] = None
44
+ """The reason provided for the refund, if any. Optional."""
16
45
 
17
46
 
18
47
  class ProductCart(BaseModel):
@@ -6,6 +6,7 @@ from datetime import datetime
6
6
  from .._models import BaseModel
7
7
  from .currency import Currency
8
8
  from .refund_status import RefundStatus
9
+ from .customer_limited_details import CustomerLimitedDetails
9
10
 
10
11
  __all__ = ["Refund"]
11
12
 
@@ -17,6 +18,9 @@ class Refund(BaseModel):
17
18
  created_at: datetime
18
19
  """The timestamp of when the refund was created in UTC."""
19
20
 
21
+ customer: CustomerLimitedDetails
22
+ """Details about the customer for this refund (from the associated payment)"""
23
+
20
24
  is_partial: bool
21
25
  """If true the refund is a partial refund"""
22
26
 
@@ -0,0 +1,39 @@
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 .currency import Currency
8
+ from .refund_status import RefundStatus
9
+
10
+ __all__ = ["RefundListResponse"]
11
+
12
+
13
+ class RefundListResponse(BaseModel):
14
+ business_id: str
15
+ """The unique identifier of the business issuing the refund."""
16
+
17
+ created_at: datetime
18
+ """The timestamp of when the refund was created in UTC."""
19
+
20
+ is_partial: bool
21
+ """If true the refund is a partial refund"""
22
+
23
+ payment_id: str
24
+ """The unique identifier of the payment associated with the refund."""
25
+
26
+ refund_id: str
27
+ """The unique identifier of the refund."""
28
+
29
+ status: RefundStatus
30
+ """The current status of the refund."""
31
+
32
+ amount: Optional[int] = None
33
+ """The refunded amount."""
34
+
35
+ currency: Optional[Currency] = None
36
+ """The currency of the refund, represented as an ISO 4217 currency code."""
37
+
38
+ reason: Optional[str] = None
39
+ """The reason provided for the refund, if any. Optional."""
@@ -7,7 +7,7 @@ from typing_extensions import Required, TypedDict
7
7
 
8
8
  from .currency import Currency
9
9
 
10
- __all__ = ["SubscriptionChargeParams"]
10
+ __all__ = ["SubscriptionChargeParams", "CustomerBalanceConfig"]
11
11
 
12
12
 
13
13
  class SubscriptionChargeParams(TypedDict, total=False):
@@ -25,6 +25,9 @@ class SubscriptionChargeParams(TypedDict, total=False):
25
25
  for the business.
26
26
  """
27
27
 
28
+ customer_balance_config: Optional[CustomerBalanceConfig]
29
+ """Specify how customer balance is used for the payment"""
30
+
28
31
  metadata: Optional[Dict[str, str]]
29
32
  """Metadata for the payment.
30
33
 
@@ -42,3 +45,11 @@ class SubscriptionChargeParams(TypedDict, total=False):
42
45
  Optional product description override for billing and line items. If not
43
46
  specified, the stored description of the product will be used.
44
47
  """
48
+
49
+
50
+ class CustomerBalanceConfig(TypedDict, total=False):
51
+ allow_customer_credits_purchase: Optional[bool]
52
+ """Allows Customer Credit to be purchased to settle payments"""
53
+
54
+ allow_customer_credits_usage: Optional[bool]
55
+ """Allows Customer Credit Balance to be used to settle payments"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.52.5
3
+ Version: 1.53.2
4
4
  Summary: The official Python library for the Dodo Payments API
5
5
  Project-URL: Homepage, https://github.com/dodopayments/dodopayments-python
6
6
  Project-URL: Repository, https://github.com/dodopayments/dodopayments-python
@@ -11,7 +11,7 @@ dodopayments/_resource.py,sha256=Jfh17Q3kKzAhO-dlfIwYlueN9t1edaaY_vmnC9vErpA,113
11
11
  dodopayments/_response.py,sha256=PDvrSN3E3IkXVw2GvyOCTNB8ch0Xn9yaWQz4w1nHZEQ,28854
12
12
  dodopayments/_streaming.py,sha256=U4D6MhotaUaGaHz32lBt0XM98IOPIpPbKHUfbb0HGCk,10124
13
13
  dodopayments/_types.py,sha256=Zlx9hG-LsblNWuAFs7_Ux5a-S4w5jIB87yirH9z30nE,7302
14
- dodopayments/_version.py,sha256=ldhHvhcX5zoa-Jiq7vaQ4m6xJufePU8NFcESoHH_3fg,165
14
+ dodopayments/_version.py,sha256=wpjm2H0JdpJ0XwsXwTk8SYDucZJibjgUv8IrkpRQ5-o,165
15
15
  dodopayments/pagination.py,sha256=gaS62u_b_92OYnUHmstLAFL5AF2_cr3Z6VpzSHd0mMw,2796
16
16
  dodopayments/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  dodopayments/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
@@ -35,17 +35,20 @@ dodopayments/resources/discounts.py,sha256=nybXO_n9VfCg7AOfDF-JLcGWC-zRE4_-GOv0Q
35
35
  dodopayments/resources/disputes.py,sha256=pnRGAyvRvQdXntqq8PTnCxpaFjKRkukbq7CzlRkG-kg,12263
36
36
  dodopayments/resources/license_key_instances.py,sha256=oCgJ-D6JVP_Fte_IjRHnykqhAynN6rDJphrkg6hyxjE,14082
37
37
  dodopayments/resources/license_keys.py,sha256=N4CKnjzEx3JoAmGZ72hU30ENVT5NegGwvP-ILaTu04U,15838
38
- dodopayments/resources/licenses.py,sha256=S7cNB9k82pJBiHfdRjmNdvEfDaYUGNUigLBJPgUyg-E,13150
38
+ dodopayments/resources/licenses.py,sha256=E5Zck3INP6lItZVd_UM4ZaXWxx5vhZEKSvQ56sE4MDc,13180
39
39
  dodopayments/resources/meters.py,sha256=pqv-YhGS9u9QEFVULGxkDJyZJ64e4d-SrQ5xjZ5YlZ4,20285
40
40
  dodopayments/resources/misc.py,sha256=BRPUna3lLIrJ-gMGOOQL1-xYx_oMwVDzKL4d498C7pI,5081
41
41
  dodopayments/resources/payments.py,sha256=8VNZCDvtjjUyj_yETzF-nx19gqWzfca9Za5zb2dwfMA,24533
42
42
  dodopayments/resources/payouts.py,sha256=llIbNwI3vQZYf2HsgYL5Irfl6BBoQc1g4aLPWwY09Uo,6926
43
- dodopayments/resources/refunds.py,sha256=BS9PcxZhEmBZveZTRo4__WmgVwKpqEEHQDp7tuMh7tQ,15045
44
- dodopayments/resources/subscriptions.py,sha256=HWjcDodxUW8j_NnyIZ4aOuhgzmBo1-SFmNqg6Ius2kM,48864
43
+ dodopayments/resources/refunds.py,sha256=sl_xkDcvj__exhdh9whH1HORkWfKZ1WY1SY8ODtE_Tk,15189
44
+ dodopayments/resources/subscriptions.py,sha256=x9GmoahpBya3IV1V2diZ30Jo7GKaGwV14RzE3knk8Zc,49418
45
45
  dodopayments/resources/usage_events.py,sha256=qfb_cAUknqlUr8T_-FMe38H_3Rt19IauBvL5xkl7md8,22311
46
- dodopayments/resources/customers/__init__.py,sha256=RIP1WYqO_PIq9b57tDaJWf9zIRxG_iFeFkOVhe3apAo,1146
46
+ dodopayments/resources/customers/__init__.py,sha256=LCE-I9hVmlMoL9NbPUp1fbmv-mvpkbJtkJJY9TW4t28,1609
47
47
  dodopayments/resources/customers/customer_portal.py,sha256=f74AYBYOb0yIffh4jLmIB3igrcfaHnCS0oAbACmGlyA,6961
48
- dodopayments/resources/customers/customers.py,sha256=Z3HuZh3XiX7xUl_rNCO-Ia0uahy97QkUTTB_ue-Z1Cc,18337
48
+ dodopayments/resources/customers/customers.py,sha256=QlpluHpg3cselSPk3N8VQIcqjV-9LzJ9R2YDkHmOUao,19455
49
+ dodopayments/resources/customers/wallets/__init__.py,sha256=dHyDPoA5Es0I1LFNUv_Adr9ghKs52SW8U8O4AoLSn_w,1107
50
+ dodopayments/resources/customers/wallets/ledger_entries.py,sha256=SLqlQPy3WNXdc7xwBEeWiD6lX_zf-WwLTiQ-dfd9TsU,12579
51
+ dodopayments/resources/customers/wallets/wallets.py,sha256=-ATQ2fEEL8zNHLaJagVxqXYSAh1jPALxY1X86mLrVY8,7156
49
52
  dodopayments/resources/invoices/__init__.py,sha256=r81DwjI_F6B-ydnyJLSpowqPN0eTcROcPEvvzAkGPds,1054
50
53
  dodopayments/resources/invoices/invoices.py,sha256=-XZWHtZk92Wbbz5qO0DgiOCZGNKv4Slsd95feusnTnI,3761
51
54
  dodopayments/resources/invoices/payments.py,sha256=74qauN9yhNIIJSF2mhs-aY7H1_9NukfXT6LRZquyAyg,9680
@@ -55,7 +58,7 @@ dodopayments/resources/products/products.py,sha256=sXv72Kl_YudJy9WnG9l-omJ_5oedA
55
58
  dodopayments/resources/webhooks/__init__.py,sha256=qhsQMSm4GpXfesAwbvPOYkhytB3Ab_uW4Nqur7h1R8w,1041
56
59
  dodopayments/resources/webhooks/headers.py,sha256=wkTnIIfL2XjFcsXB4ceQVJtsty9uxuLVY_cRcaOZJ7M,9581
57
60
  dodopayments/resources/webhooks/webhooks.py,sha256=jPtHWACFpTWBkMUqoYGYGrZiOHeTgLgOCg7-FaY73sw,28034
58
- dodopayments/types/__init__.py,sha256=1H9Su4HZodscyfuft9n46jrv4v4lpnHciSB955zrCqA,8671
61
+ dodopayments/types/__init__.py,sha256=AVOtUgicvzpNHZ5sNneD9O-gVyjjTqm-WE7SYu5Z0sc,8836
59
62
  dodopayments/types/add_meter_to_price.py,sha256=kCxLBTWwLCOjc1NbJM8tQX0dY5X-Be36YL1G2oBU6Z8,827
60
63
  dodopayments/types/add_meter_to_price_param.py,sha256=aHH_YNEAexekadq44gkNEpIcv-t6v8akZMgZY_nECVE,895
61
64
  dodopayments/types/addon_cart_response_item.py,sha256=R-I8Zd2HJKn0DmXmv6Oyu4oo-oEC1-dud0Q6_yqDB7k,235
@@ -99,6 +102,7 @@ dodopayments/types/event_input_param.py,sha256=BcT-hu0u2NFZBQ99U0PHTKuZDfJCVqKnR
99
102
  dodopayments/types/get_dispute.py,sha256=26tVlqDoddB27yrS4p1Ve5B1OOhdTCe8AYAcVeaOzUg,1332
100
103
  dodopayments/types/intent_status.py,sha256=0aP3OxHiMfZDXQFOOXNbTSZz1vZkLjBFm3ryT0sT4Z8,483
101
104
  dodopayments/types/license_activate_params.py,sha256=LM3_sHiPdco8kuYlKXmSzXu9OyU9okrZW7Drl63GRZU,321
105
+ dodopayments/types/license_activate_response.py,sha256=M4iXx8skuEkbhMYrcMUf5zGjvJmdRAZRrrf-VhqVYLQ,967
102
106
  dodopayments/types/license_deactivate_params.py,sha256=F6A7vZfdkCsfQi4ibECL3SFzwjjOyr8ZR_RrNRVsCMo,344
103
107
  dodopayments/types/license_key.py,sha256=XdWk3moTPbM0b1wyMpcqeli_moTOZ1HF9v4QhmAe7Oc,1505
104
108
  dodopayments/types/license_key_duration.py,sha256=iijVuKvY1Ie8c76576GmG4TbaZbSKmp8sUdf_p9OLnc,275
@@ -123,7 +127,7 @@ dodopayments/types/new_customer_param.py,sha256=00L6Tg-VNzwbhTHZo010D34cRj9hZISd
123
127
  dodopayments/types/on_demand_subscription_param.py,sha256=of3bmiTDMGljy6No4k-MMSHW71t3n-CadOf3Ye-trFQ,1407
124
128
  dodopayments/types/one_time_product_cart_item.py,sha256=3l7J3KEE-SCXgArN25qKIXbIIu44Q2kxqd7jf73AGto,544
125
129
  dodopayments/types/one_time_product_cart_item_param.py,sha256=JydRYPBnLhON1pCQPRpQzKLaGJTSrDn1IRVCcMK8iAE,633
126
- dodopayments/types/payment.py,sha256=AY4q3rHCnkzxvd_-wtohYO6ziYTjXLo5-Xd8m6muu_8,3956
130
+ dodopayments/types/payment.py,sha256=uzSTwdc_Dq9N_v1zuGzyAqh7MZTgCHBjPmN63-k0_CU,4772
127
131
  dodopayments/types/payment_create_params.py,sha256=8Tcvw__GD1LavNJFNOAgMgoDyrca4HNUiPO3qh2WoNw,2263
128
132
  dodopayments/types/payment_create_response.py,sha256=Kx70m87jA_WlNtdkzGN8ArzjmfrPZC0gneeov5gXtrM,1276
129
133
  dodopayments/types/payment_list_params.py,sha256=CH6z3MqKkQsoWzuSnsxxEj60HBrAsUKwQ_9iLm4uZJc,1283
@@ -141,13 +145,14 @@ dodopayments/types/product_list_response.py,sha256=quSCR3qak0T1aLPsZSgnkRGLSwFEW
141
145
  dodopayments/types/product_update_files_params.py,sha256=7AkcQ3mWfc2WyUOnWabzst-gQaWTuS3KSvmM1KYnhT4,300
142
146
  dodopayments/types/product_update_files_response.py,sha256=a6sNHOCHQxxA7l55M3zS8S26O3UEFo1vctngHIy5tJo,239
143
147
  dodopayments/types/product_update_params.py,sha256=WuvH5Dd_cZgJ2n_lXOh1XzCBuQdq9N1Kl45U_IT6Lq8,2576
144
- dodopayments/types/refund.py,sha256=ySj9ERvneb2ya4hdcszIVvqWZaqQMUkuCJuBKoKeTBI,1064
148
+ dodopayments/types/refund.py,sha256=dp50pvFEU89ETZsQLA9ntDGsi-0jc5M-qbb_t9cFOEs,1246
145
149
  dodopayments/types/refund_create_params.py,sha256=hua-rUlW_5ZfKaPsh8O06yPgsj0gH7ru9Rw0Rb-3moQ,912
146
150
  dodopayments/types/refund_list_params.py,sha256=iz4MPgquP4K3AlYPV5_bbt5jHzGFT__RTpGjT4QXnPs,883
151
+ dodopayments/types/refund_list_response.py,sha256=ac-PiXylKt2woZXop2hOBNx-UOV1JBq879EBICs-oJs,1088
147
152
  dodopayments/types/refund_status.py,sha256=ftnBnLvslfMYcUg8t7nEvb6-m5NWyVVnNcgyVu9eZto,243
148
153
  dodopayments/types/subscription.py,sha256=T0Py5jsjzXLgvdqX3aV5bfyfJoDLj7nizPmbyzSgltw,3291
149
154
  dodopayments/types/subscription_change_plan_params.py,sha256=u04uGX3XYTPZSldZzc7fvhKeq_HFyQ3kkOkCugZo7TQ,866
150
- dodopayments/types/subscription_charge_params.py,sha256=b7KPBp8Jv5U0srxqi4AgJbrL1PWkZ6VhDObigAuph0M,1302
155
+ dodopayments/types/subscription_charge_params.py,sha256=ZFj-vOPuOoS86D--fD6p3Ntxq7TBj3Eeq1PwMJeJ6wI,1748
151
156
  dodopayments/types/subscription_charge_response.py,sha256=aDFuOKqqQ-_v1szx9oUT89QaeM3nvwrlAExzZhF0O-Q,228
152
157
  dodopayments/types/subscription_create_params.py,sha256=EaqP9FdQ_0z8mTdsGaS0M9xOCiDK80jMHAi4E6tcl4I,2648
153
158
  dodopayments/types/subscription_create_response.py,sha256=Equ-ycrO3A3mOVElW6BjoBH8sqc5wwKS8ED9fHvTza0,1372
@@ -168,8 +173,14 @@ dodopayments/types/webhook_event_type.py,sha256=TzMHCyMXyxsGLLVyg7h9if4vth5Iaiw7
168
173
  dodopayments/types/webhook_list_params.py,sha256=SCrBT0s4VDOQdRvqgL6P5YDhqd3njW5rQlqOAnu3r40,430
169
174
  dodopayments/types/webhook_retrieve_secret_response.py,sha256=kkjb6oJp9SerqAhJjscOq3basHMKP95q3nvz_c1oIW8,230
170
175
  dodopayments/types/webhook_update_params.py,sha256=Gv-1jteNEm58ZevionMCv7xCUUZUJ1cxTKV4M23oQIw,807
171
- dodopayments/types/customers/__init__.py,sha256=8UD_iRVrX_gB6Ji7SDLApLGewOlaEtmiYv6NynIQ120,223
176
+ dodopayments/types/customers/__init__.py,sha256=e_URiFdz6kmlW-A9rsOJ2Vph5qvMdpyAT6YU3Aaq0z8,360
172
177
  dodopayments/types/customers/customer_portal_create_params.py,sha256=QTRksHDHn8_3AmOpsscjWF1ZNvooLY05DZNbMmLbC2Y,329
178
+ dodopayments/types/customers/customer_wallet.py,sha256=BdDibeumIb7nRzB40MIR6p6FO4Y_l60TLlN627tcQco,363
179
+ dodopayments/types/customers/wallet_list_response.py,sha256=aKjuedpRolH72oKEmbpLw6DCF-Vs7H97OKN6AH5luPs,395
180
+ dodopayments/types/customers/wallets/__init__.py,sha256=8wk5W37JesivqxGvY5zCrIOc5YU0KUjCiZL_TxAt85o,395
181
+ dodopayments/types/customers/wallets/customer_wallet_transaction.py,sha256=iCzA9nN_EdsViThLMtFKgyAlobxpCwLLK4mNUwd1GB8,765
182
+ dodopayments/types/customers/wallets/ledger_entry_create_params.py,sha256=oMNFnhUgEQRnAr3c1eNg_hIt5epYbOEzZ3LQRaPfz3Y,673
183
+ dodopayments/types/customers/wallets/ledger_entry_list_params.py,sha256=UFQoEDO4mU37nVtjO9GvEpKaYIwl6UQMabEvz4h-GDA,389
173
184
  dodopayments/types/invoices/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122
174
185
  dodopayments/types/products/__init__.py,sha256=-W2ETtkni8cZpsC4Eg1aRwuLg1plV1U429JFOR1U4Rw,273
175
186
  dodopayments/types/products/image_update_params.py,sha256=xyF5fRudD8wct8KKx6wc8F7bbMzVBQPOMKnX5bTiRDQ,270
@@ -177,7 +188,7 @@ dodopayments/types/products/image_update_response.py,sha256=TcJyXjoJlONpwwR6yZdI
177
188
  dodopayments/types/webhooks/__init__.py,sha256=F_ZpQalnBiuXt_C2pUepZjgJZwiAGKNwaEB03ZB6sUM,285
178
189
  dodopayments/types/webhooks/header_retrieve_response.py,sha256=IKNaI2xO9qU7UXbffENYrRo2vUr0mqb8TIkAQdtLtXI,369
179
190
  dodopayments/types/webhooks/header_update_params.py,sha256=USiXP4oFllTJgOBcBZQrcLlEzEOB6RHH9Ugdxatyy3g,376
180
- dodopayments-1.52.5.dist-info/METADATA,sha256=ww5Zt9DTUAinmDHMypJ2bnBViH_S0RmUHQuMqGEytBM,17198
181
- dodopayments-1.52.5.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
182
- dodopayments-1.52.5.dist-info/licenses/LICENSE,sha256=3_sqrBb5J3AT3FsjMKEOBRZhweWVsl_s_RjFlclm1vQ,11343
183
- dodopayments-1.52.5.dist-info/RECORD,,
191
+ dodopayments-1.53.2.dist-info/METADATA,sha256=Vg-qu8sZ657jn79tlLdjzVHLvFIkUhaoibX1msB3_gk,17198
192
+ dodopayments-1.53.2.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
193
+ dodopayments-1.53.2.dist-info/licenses/LICENSE,sha256=3_sqrBb5J3AT3FsjMKEOBRZhweWVsl_s_RjFlclm1vQ,11343
194
+ dodopayments-1.53.2.dist-info/RECORD,,