dodopayments 1.21.0__tar.gz → 1.25.0__tar.gz

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 (193) hide show
  1. dodopayments-1.25.0/.release-please-manifest.json +3 -0
  2. {dodopayments-1.21.0 → dodopayments-1.25.0}/CHANGELOG.md +34 -0
  3. {dodopayments-1.21.0 → dodopayments-1.25.0}/PKG-INFO +1 -1
  4. {dodopayments-1.21.0 → dodopayments-1.25.0}/api.md +10 -4
  5. {dodopayments-1.21.0 → dodopayments-1.25.0}/pyproject.toml +1 -1
  6. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/__init__.py +5 -0
  7. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_proxy.py +4 -1
  8. dodopayments-1.25.0/src/dodopayments/_utils/_resources_proxy.py +24 -0
  9. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_version.py +1 -1
  10. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/disputes.py +12 -11
  11. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/invoices/payments.py +23 -15
  12. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/subscriptions.py +24 -2
  13. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/__init__.py +2 -0
  14. dodopayments-1.25.0/src/dodopayments/types/dispute.py +40 -0
  15. dodopayments-1.21.0/src/dodopayments/types/dispute.py → dodopayments-1.25.0/src/dodopayments/types/dispute_list_response.py +2 -2
  16. dodopayments-1.25.0/src/dodopayments/types/dispute_retrieve_response.py +46 -0
  17. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payment.py +13 -0
  18. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_change_plan_params.py +14 -1
  19. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_charge_params.py +3 -0
  20. dodopayments-1.25.0/tests/api_resources/invoices/test_payments.py +128 -0
  21. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_disputes.py +18 -15
  22. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_subscriptions.py +50 -0
  23. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_utils/test_proxy.py +11 -0
  24. dodopayments-1.21.0/.release-please-manifest.json +0 -3
  25. dodopayments-1.21.0/tests/api_resources/invoices/test_payments.py +0 -96
  26. {dodopayments-1.21.0 → dodopayments-1.25.0}/.gitignore +0 -0
  27. {dodopayments-1.21.0 → dodopayments-1.25.0}/CONTRIBUTING.md +0 -0
  28. {dodopayments-1.21.0 → dodopayments-1.25.0}/LICENSE +0 -0
  29. {dodopayments-1.21.0 → dodopayments-1.25.0}/README.md +0 -0
  30. {dodopayments-1.21.0 → dodopayments-1.25.0}/SECURITY.md +0 -0
  31. {dodopayments-1.21.0 → dodopayments-1.25.0}/bin/check-release-environment +0 -0
  32. {dodopayments-1.21.0 → dodopayments-1.25.0}/bin/publish-pypi +0 -0
  33. {dodopayments-1.21.0 → dodopayments-1.25.0}/examples/.keep +0 -0
  34. {dodopayments-1.21.0 → dodopayments-1.25.0}/mypy.ini +0 -0
  35. {dodopayments-1.21.0 → dodopayments-1.25.0}/noxfile.py +0 -0
  36. {dodopayments-1.21.0 → dodopayments-1.25.0}/release-please-config.json +0 -0
  37. {dodopayments-1.21.0 → dodopayments-1.25.0}/requirements-dev.lock +0 -0
  38. {dodopayments-1.21.0 → dodopayments-1.25.0}/requirements.lock +0 -0
  39. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodo_payments/lib/.keep +0 -0
  40. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_base_client.py +0 -0
  41. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_client.py +0 -0
  42. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_compat.py +0 -0
  43. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_constants.py +0 -0
  44. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_exceptions.py +0 -0
  45. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_files.py +0 -0
  46. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_models.py +0 -0
  47. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_qs.py +0 -0
  48. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_resource.py +0 -0
  49. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_response.py +0 -0
  50. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_streaming.py +0 -0
  51. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_types.py +0 -0
  52. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/__init__.py +0 -0
  53. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_logs.py +0 -0
  54. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_reflection.py +0 -0
  55. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_streams.py +0 -0
  56. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_sync.py +0 -0
  57. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_transform.py +0 -0
  58. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_typing.py +0 -0
  59. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/_utils/_utils.py +0 -0
  60. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/lib/.keep +0 -0
  61. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/pagination.py +0 -0
  62. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/py.typed +0 -0
  63. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/__init__.py +0 -0
  64. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/addons.py +0 -0
  65. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/customers/__init__.py +0 -0
  66. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/customers/customer_portal.py +0 -0
  67. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/customers/customers.py +0 -0
  68. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/discounts.py +0 -0
  69. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/invoices/__init__.py +0 -0
  70. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/invoices/invoices.py +0 -0
  71. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/license_key_instances.py +0 -0
  72. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/license_keys.py +0 -0
  73. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/licenses.py +0 -0
  74. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/misc.py +0 -0
  75. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/payments.py +0 -0
  76. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/payouts.py +0 -0
  77. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/products/__init__.py +0 -0
  78. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/products/images.py +0 -0
  79. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/products/products.py +0 -0
  80. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/refunds.py +0 -0
  81. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/resources/webhook_events.py +0 -0
  82. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_cart_response_item.py +0 -0
  83. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_create_params.py +0 -0
  84. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_list_params.py +0 -0
  85. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_response.py +0 -0
  86. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_update_images_response.py +0 -0
  87. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/addon_update_params.py +0 -0
  88. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/attach_existing_customer_param.py +0 -0
  89. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/billing_address.py +0 -0
  90. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/billing_address_param.py +0 -0
  91. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/country_code.py +0 -0
  92. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/create_new_customer_param.py +0 -0
  93. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/currency.py +0 -0
  94. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer.py +0 -0
  95. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_create_params.py +0 -0
  96. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_limited_details.py +0 -0
  97. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_list_params.py +0 -0
  98. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_portal_session.py +0 -0
  99. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_request_param.py +0 -0
  100. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customer_update_params.py +0 -0
  101. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customers/__init__.py +0 -0
  102. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/customers/customer_portal_create_params.py +0 -0
  103. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/discount.py +0 -0
  104. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/discount_create_params.py +0 -0
  105. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/discount_list_params.py +0 -0
  106. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/discount_type.py +0 -0
  107. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/discount_update_params.py +0 -0
  108. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/dispute_list_params.py +0 -0
  109. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/dispute_stage.py +0 -0
  110. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/dispute_status.py +0 -0
  111. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/intent_status.py +0 -0
  112. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/invoices/__init__.py +0 -0
  113. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_activate_params.py +0 -0
  114. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_deactivate_params.py +0 -0
  115. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key.py +0 -0
  116. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_duration.py +0 -0
  117. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_duration_param.py +0 -0
  118. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_instance.py +0 -0
  119. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_instance_list_params.py +0 -0
  120. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_instance_update_params.py +0 -0
  121. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_list_params.py +0 -0
  122. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_status.py +0 -0
  123. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_key_update_params.py +0 -0
  124. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_validate_params.py +0 -0
  125. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/license_validate_response.py +0 -0
  126. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/misc_list_supported_countries_response.py +0 -0
  127. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/one_time_product_cart_item.py +0 -0
  128. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/one_time_product_cart_item_param.py +0 -0
  129. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payment_create_params.py +0 -0
  130. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payment_create_response.py +0 -0
  131. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payment_list_params.py +0 -0
  132. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payment_list_response.py +0 -0
  133. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payout_list_params.py +0 -0
  134. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/payout_list_response.py +0 -0
  135. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/price.py +0 -0
  136. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/price_param.py +0 -0
  137. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/product.py +0 -0
  138. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/product_create_params.py +0 -0
  139. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/product_list_params.py +0 -0
  140. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/product_list_response.py +0 -0
  141. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/product_update_params.py +0 -0
  142. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/products/__init__.py +0 -0
  143. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/products/image_update_params.py +0 -0
  144. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/products/image_update_response.py +0 -0
  145. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/refund.py +0 -0
  146. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/refund_create_params.py +0 -0
  147. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/refund_list_params.py +0 -0
  148. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/refund_status.py +0 -0
  149. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription.py +0 -0
  150. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_charge_response.py +0 -0
  151. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_create_params.py +0 -0
  152. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_create_response.py +0 -0
  153. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_list_params.py +0 -0
  154. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_list_response.py +0 -0
  155. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_status.py +0 -0
  156. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/subscription_update_params.py +0 -0
  157. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/tax_category.py +0 -0
  158. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/time_interval.py +0 -0
  159. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/webhook_event.py +0 -0
  160. {dodopayments-1.21.0 → dodopayments-1.25.0}/src/dodopayments/types/webhook_event_list_params.py +0 -0
  161. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/__init__.py +0 -0
  162. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/__init__.py +0 -0
  163. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/customers/__init__.py +0 -0
  164. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/customers/test_customer_portal.py +0 -0
  165. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/invoices/__init__.py +0 -0
  166. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/products/__init__.py +0 -0
  167. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/products/test_images.py +0 -0
  168. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_addons.py +0 -0
  169. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_customers.py +0 -0
  170. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_discounts.py +0 -0
  171. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_license_key_instances.py +0 -0
  172. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_license_keys.py +0 -0
  173. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_licenses.py +0 -0
  174. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_misc.py +0 -0
  175. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_payments.py +0 -0
  176. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_payouts.py +0 -0
  177. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_products.py +0 -0
  178. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_refunds.py +0 -0
  179. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/api_resources/test_webhook_events.py +0 -0
  180. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/conftest.py +0 -0
  181. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/sample_file.txt +0 -0
  182. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_client.py +0 -0
  183. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_deepcopy.py +0 -0
  184. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_extract_files.py +0 -0
  185. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_files.py +0 -0
  186. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_models.py +0 -0
  187. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_qs.py +0 -0
  188. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_required_args.py +0 -0
  189. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_response.py +0 -0
  190. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_streaming.py +0 -0
  191. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_transform.py +0 -0
  192. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/test_utils/test_typing.py +0 -0
  193. {dodopayments-1.21.0 → dodopayments-1.25.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.25.0"
3
+ }
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.25.0 (2025-05-17)
4
+
5
+ Full Changelog: [v1.22.0...v1.25.0](https://github.com/dodopayments/dodopayments-python/compare/v1.22.0...v1.25.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** updated openapi spec ([792e941](https://github.com/dodopayments/dodopayments-python/commit/792e941d70eea5d68c3aeaf6f62ece8e65e4d5e3))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **package:** support direct resource imports ([da506b9](https://github.com/dodopayments/dodopayments-python/commit/da506b990e1995b637b305b1a143f9b3450a1db3))
15
+
16
+
17
+ ### Chores
18
+
19
+ * **ci:** fix installation instructions ([c41560f](https://github.com/dodopayments/dodopayments-python/commit/c41560f5419a74820bd8892fac39e965d4edbe3e))
20
+ * **ci:** upload sdks to package manager ([6644ed9](https://github.com/dodopayments/dodopayments-python/commit/6644ed959e12f46fc2a2d17efb712f21da0bdbe1))
21
+ * **internal:** codegen related update ([5169a98](https://github.com/dodopayments/dodopayments-python/commit/5169a98039143d54dd29016267bafb913095180f))
22
+ * **internal:** version bump ([eb5ca8a](https://github.com/dodopayments/dodopayments-python/commit/eb5ca8aed27afc7a2e85f0767713717fcc321e71))
23
+
24
+ ## 1.22.0 (2025-05-09)
25
+
26
+ Full Changelog: [v1.21.0...v1.22.0](https://github.com/dodopayments/dodopayments-python/compare/v1.21.0...v1.22.0)
27
+
28
+ ### Features
29
+
30
+ * **api:** updated openapi spec ([1387f36](https://github.com/dodopayments/dodopayments-python/commit/1387f36673bcffec0cc083d29134bcad55e1d7d1))
31
+
32
+
33
+ ### Chores
34
+
35
+ * **internal:** avoid errors for isinstance checks on proxies ([a0adf04](https://github.com/dodopayments/dodopayments-python/commit/a0adf048949c53ab6cd6a8fe0f4153a6a99a4be3))
36
+
3
37
  ## 1.21.0 (2025-05-06)
4
38
 
5
39
  Full Changelog: [v1.20.0...v1.21.0](https://github.com/dodopayments/dodopayments-python/compare/v1.20.0...v1.21.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.21.0
3
+ Version: 1.25.0
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
@@ -54,7 +54,7 @@ Methods:
54
54
 
55
55
  Methods:
56
56
 
57
- - <code title="get /invoices/payments/{payment_id}">client.invoices.payments.<a href="./src/dodopayments/resources/invoices/payments.py">retrieve</a>(payment_id) -> None</code>
57
+ - <code title="get /invoices/payments/{payment_id}">client.invoices.payments.<a href="./src/dodopayments/resources/invoices/payments.py">retrieve</a>(payment_id) -> BinaryAPIResponse</code>
58
58
 
59
59
  # Licenses
60
60
 
@@ -138,13 +138,19 @@ Methods:
138
138
  Types:
139
139
 
140
140
  ```python
141
- from dodopayments.types import Dispute, DisputeStage, DisputeStatus
141
+ from dodopayments.types import (
142
+ Dispute,
143
+ DisputeStage,
144
+ DisputeStatus,
145
+ DisputeRetrieveResponse,
146
+ DisputeListResponse,
147
+ )
142
148
  ```
143
149
 
144
150
  Methods:
145
151
 
146
- - <code title="get /disputes/{dispute_id}">client.disputes.<a href="./src/dodopayments/resources/disputes.py">retrieve</a>(dispute_id) -> <a href="./src/dodopayments/types/dispute.py">Dispute</a></code>
147
- - <code title="get /disputes">client.disputes.<a href="./src/dodopayments/resources/disputes.py">list</a>(\*\*<a href="src/dodopayments/types/dispute_list_params.py">params</a>) -> <a href="./src/dodopayments/types/dispute.py">SyncDefaultPageNumberPagination[Dispute]</a></code>
152
+ - <code title="get /disputes/{dispute_id}">client.disputes.<a href="./src/dodopayments/resources/disputes.py">retrieve</a>(dispute_id) -> <a href="./src/dodopayments/types/dispute_retrieve_response.py">DisputeRetrieveResponse</a></code>
153
+ - <code title="get /disputes">client.disputes.<a href="./src/dodopayments/resources/disputes.py">list</a>(\*\*<a href="src/dodopayments/types/dispute_list_params.py">params</a>) -> <a href="./src/dodopayments/types/dispute_list_response.py">SyncDefaultPageNumberPagination[DisputeListResponse]</a></code>
148
154
 
149
155
  # Payouts
150
156
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dodopayments"
3
- version = "1.21.0"
3
+ version = "1.25.0"
4
4
  description = "The official Python library for the Dodo Payments API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -1,5 +1,7 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ import typing as _t
4
+
3
5
  from . import types
4
6
  from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes
5
7
  from ._utils import file_from_path
@@ -80,6 +82,9 @@ __all__ = [
80
82
  "DefaultAsyncHttpxClient",
81
83
  ]
82
84
 
85
+ if not _t.TYPE_CHECKING:
86
+ from ._utils._resources_proxy import resources as resources
87
+
83
88
  _setup_logging()
84
89
 
85
90
  # Update the __module__ attribute for exported symbols so that
@@ -46,7 +46,10 @@ class LazyProxy(Generic[T], ABC):
46
46
  @property # type: ignore
47
47
  @override
48
48
  def __class__(self) -> type: # pyright: ignore
49
- proxied = self.__get_proxied__()
49
+ try:
50
+ proxied = self.__get_proxied__()
51
+ except Exception:
52
+ return type(self)
50
53
  if issubclass(type(proxied), LazyProxy):
51
54
  return type(proxied)
52
55
  return proxied.__class__
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+ from typing_extensions import override
5
+
6
+ from ._proxy import LazyProxy
7
+
8
+
9
+ class ResourcesProxy(LazyProxy[Any]):
10
+ """A proxy for the `dodopayments.resources` module.
11
+
12
+ This is used so that we can lazily import `dodopayments.resources` only when
13
+ needed *and* so that users can just import `dodopayments` and reference `dodopayments.resources`
14
+ """
15
+
16
+ @override
17
+ def __load__(self) -> Any:
18
+ import importlib
19
+
20
+ mod = importlib.import_module("dodopayments.resources")
21
+ return mod
22
+
23
+
24
+ resources = ResourcesProxy().__as_proxied__()
@@ -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.21.0" # x-release-please-version
4
+ __version__ = "1.25.0" # x-release-please-version
@@ -20,9 +20,10 @@ from .._response import (
20
20
  )
21
21
  from ..pagination import SyncDefaultPageNumberPagination, AsyncDefaultPageNumberPagination
22
22
  from .._base_client import AsyncPaginator, make_request_options
23
- from ..types.dispute import Dispute
24
23
  from ..types.dispute_stage import DisputeStage
25
24
  from ..types.dispute_status import DisputeStatus
25
+ from ..types.dispute_list_response import DisputeListResponse
26
+ from ..types.dispute_retrieve_response import DisputeRetrieveResponse
26
27
 
27
28
  __all__ = ["DisputesResource", "AsyncDisputesResource"]
28
29
 
@@ -57,7 +58,7 @@ class DisputesResource(SyncAPIResource):
57
58
  extra_query: Query | None = None,
58
59
  extra_body: Body | None = None,
59
60
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
60
- ) -> Dispute:
61
+ ) -> DisputeRetrieveResponse:
61
62
  """
62
63
  Args:
63
64
  extra_headers: Send extra headers
@@ -75,7 +76,7 @@ class DisputesResource(SyncAPIResource):
75
76
  options=make_request_options(
76
77
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
77
78
  ),
78
- cast_to=Dispute,
79
+ cast_to=DisputeRetrieveResponse,
79
80
  )
80
81
 
81
82
  def list(
@@ -94,7 +95,7 @@ class DisputesResource(SyncAPIResource):
94
95
  extra_query: Query | None = None,
95
96
  extra_body: Body | None = None,
96
97
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
97
- ) -> SyncDefaultPageNumberPagination[Dispute]:
98
+ ) -> SyncDefaultPageNumberPagination[DisputeListResponse]:
98
99
  """
99
100
  Args:
100
101
  created_at_gte: Get events after this created time
@@ -121,7 +122,7 @@ class DisputesResource(SyncAPIResource):
121
122
  """
122
123
  return self._get_api_list(
123
124
  "/disputes",
124
- page=SyncDefaultPageNumberPagination[Dispute],
125
+ page=SyncDefaultPageNumberPagination[DisputeListResponse],
125
126
  options=make_request_options(
126
127
  extra_headers=extra_headers,
127
128
  extra_query=extra_query,
@@ -140,7 +141,7 @@ class DisputesResource(SyncAPIResource):
140
141
  dispute_list_params.DisputeListParams,
141
142
  ),
142
143
  ),
143
- model=Dispute,
144
+ model=DisputeListResponse,
144
145
  )
145
146
 
146
147
 
@@ -174,7 +175,7 @@ class AsyncDisputesResource(AsyncAPIResource):
174
175
  extra_query: Query | None = None,
175
176
  extra_body: Body | None = None,
176
177
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
177
- ) -> Dispute:
178
+ ) -> DisputeRetrieveResponse:
178
179
  """
179
180
  Args:
180
181
  extra_headers: Send extra headers
@@ -192,7 +193,7 @@ class AsyncDisputesResource(AsyncAPIResource):
192
193
  options=make_request_options(
193
194
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
194
195
  ),
195
- cast_to=Dispute,
196
+ cast_to=DisputeRetrieveResponse,
196
197
  )
197
198
 
198
199
  def list(
@@ -211,7 +212,7 @@ class AsyncDisputesResource(AsyncAPIResource):
211
212
  extra_query: Query | None = None,
212
213
  extra_body: Body | None = None,
213
214
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
214
- ) -> AsyncPaginator[Dispute, AsyncDefaultPageNumberPagination[Dispute]]:
215
+ ) -> AsyncPaginator[DisputeListResponse, AsyncDefaultPageNumberPagination[DisputeListResponse]]:
215
216
  """
216
217
  Args:
217
218
  created_at_gte: Get events after this created time
@@ -238,7 +239,7 @@ class AsyncDisputesResource(AsyncAPIResource):
238
239
  """
239
240
  return self._get_api_list(
240
241
  "/disputes",
241
- page=AsyncDefaultPageNumberPagination[Dispute],
242
+ page=AsyncDefaultPageNumberPagination[DisputeListResponse],
242
243
  options=make_request_options(
243
244
  extra_headers=extra_headers,
244
245
  extra_query=extra_query,
@@ -257,7 +258,7 @@ class AsyncDisputesResource(AsyncAPIResource):
257
258
  dispute_list_params.DisputeListParams,
258
259
  ),
259
260
  ),
260
- model=Dispute,
261
+ model=DisputeListResponse,
261
262
  )
262
263
 
263
264
 
@@ -4,14 +4,18 @@ from __future__ import annotations
4
4
 
5
5
  import httpx
6
6
 
7
- from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
7
+ from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
8
8
  from ..._compat import cached_property
9
9
  from ..._resource import SyncAPIResource, AsyncAPIResource
10
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,
11
+ BinaryAPIResponse,
12
+ AsyncBinaryAPIResponse,
13
+ StreamedBinaryAPIResponse,
14
+ AsyncStreamedBinaryAPIResponse,
15
+ to_custom_raw_response_wrapper,
16
+ to_custom_streamed_response_wrapper,
17
+ async_to_custom_raw_response_wrapper,
18
+ async_to_custom_streamed_response_wrapper,
15
19
  )
16
20
  from ..._base_client import make_request_options
17
21
 
@@ -48,7 +52,7 @@ class PaymentsResource(SyncAPIResource):
48
52
  extra_query: Query | None = None,
49
53
  extra_body: Body | None = None,
50
54
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
51
- ) -> None:
55
+ ) -> BinaryAPIResponse:
52
56
  """
53
57
  Args:
54
58
  extra_headers: Send extra headers
@@ -61,13 +65,13 @@ class PaymentsResource(SyncAPIResource):
61
65
  """
62
66
  if not payment_id:
63
67
  raise ValueError(f"Expected a non-empty value for `payment_id` but received {payment_id!r}")
64
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
68
+ extra_headers = {"Accept": "application/pdf", **(extra_headers or {})}
65
69
  return self._get(
66
70
  f"/invoices/payments/{payment_id}",
67
71
  options=make_request_options(
68
72
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
69
73
  ),
70
- cast_to=NoneType,
74
+ cast_to=BinaryAPIResponse,
71
75
  )
72
76
 
73
77
 
@@ -101,7 +105,7 @@ class AsyncPaymentsResource(AsyncAPIResource):
101
105
  extra_query: Query | None = None,
102
106
  extra_body: Body | None = None,
103
107
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
104
- ) -> None:
108
+ ) -> AsyncBinaryAPIResponse:
105
109
  """
106
110
  Args:
107
111
  extra_headers: Send extra headers
@@ -114,13 +118,13 @@ class AsyncPaymentsResource(AsyncAPIResource):
114
118
  """
115
119
  if not payment_id:
116
120
  raise ValueError(f"Expected a non-empty value for `payment_id` but received {payment_id!r}")
117
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
121
+ extra_headers = {"Accept": "application/pdf", **(extra_headers or {})}
118
122
  return await self._get(
119
123
  f"/invoices/payments/{payment_id}",
120
124
  options=make_request_options(
121
125
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
122
126
  ),
123
- cast_to=NoneType,
127
+ cast_to=AsyncBinaryAPIResponse,
124
128
  )
125
129
 
126
130
 
@@ -128,8 +132,9 @@ class PaymentsResourceWithRawResponse:
128
132
  def __init__(self, payments: PaymentsResource) -> None:
129
133
  self._payments = payments
130
134
 
131
- self.retrieve = to_raw_response_wrapper(
135
+ self.retrieve = to_custom_raw_response_wrapper(
132
136
  payments.retrieve,
137
+ BinaryAPIResponse,
133
138
  )
134
139
 
135
140
 
@@ -137,8 +142,9 @@ class AsyncPaymentsResourceWithRawResponse:
137
142
  def __init__(self, payments: AsyncPaymentsResource) -> None:
138
143
  self._payments = payments
139
144
 
140
- self.retrieve = async_to_raw_response_wrapper(
145
+ self.retrieve = async_to_custom_raw_response_wrapper(
141
146
  payments.retrieve,
147
+ AsyncBinaryAPIResponse,
142
148
  )
143
149
 
144
150
 
@@ -146,8 +152,9 @@ class PaymentsResourceWithStreamingResponse:
146
152
  def __init__(self, payments: PaymentsResource) -> None:
147
153
  self._payments = payments
148
154
 
149
- self.retrieve = to_streamed_response_wrapper(
155
+ self.retrieve = to_custom_streamed_response_wrapper(
150
156
  payments.retrieve,
157
+ StreamedBinaryAPIResponse,
151
158
  )
152
159
 
153
160
 
@@ -155,6 +162,7 @@ class AsyncPaymentsResourceWithStreamingResponse:
155
162
  def __init__(self, payments: AsyncPaymentsResource) -> None:
156
163
  self._payments = payments
157
164
 
158
- self.retrieve = async_to_streamed_response_wrapper(
165
+ self.retrieve = async_to_custom_streamed_response_wrapper(
159
166
  payments.retrieve,
167
+ AsyncStreamedBinaryAPIResponse,
160
168
  )
@@ -320,6 +320,7 @@ class SubscriptionsResource(SyncAPIResource):
320
320
  product_id: str,
321
321
  proration_billing_mode: Literal["prorated_immediately"],
322
322
  quantity: int,
323
+ addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
323
324
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
324
325
  # The extra values given here take precedence over values defined on the client or passed to this method.
325
326
  extra_headers: Headers | None = None,
@@ -333,6 +334,9 @@ class SubscriptionsResource(SyncAPIResource):
333
334
 
334
335
  quantity: Number of units to subscribe for. Must be at least 1.
335
336
 
337
+ addons: Addons for the new plan. Note : Leaving this empty would remove any existing
338
+ addons
339
+
336
340
  extra_headers: Send extra headers
337
341
 
338
342
  extra_query: Add additional query parameters to the request
@@ -351,6 +355,7 @@ class SubscriptionsResource(SyncAPIResource):
351
355
  "product_id": product_id,
352
356
  "proration_billing_mode": proration_billing_mode,
353
357
  "quantity": quantity,
358
+ "addons": addons,
354
359
  },
355
360
  subscription_change_plan_params.SubscriptionChangePlanParams,
356
361
  ),
@@ -365,6 +370,7 @@ class SubscriptionsResource(SyncAPIResource):
365
370
  subscription_id: str,
366
371
  *,
367
372
  product_price: int,
373
+ metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
368
374
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
369
375
  # The extra values given here take precedence over values defined on the client or passed to this method.
370
376
  extra_headers: Headers | None = None,
@@ -390,7 +396,13 @@ class SubscriptionsResource(SyncAPIResource):
390
396
  raise ValueError(f"Expected a non-empty value for `subscription_id` but received {subscription_id!r}")
391
397
  return self._post(
392
398
  f"/subscriptions/{subscription_id}/charge",
393
- body=maybe_transform({"product_price": product_price}, subscription_charge_params.SubscriptionChargeParams),
399
+ body=maybe_transform(
400
+ {
401
+ "product_price": product_price,
402
+ "metadata": metadata,
403
+ },
404
+ subscription_charge_params.SubscriptionChargeParams,
405
+ ),
394
406
  options=make_request_options(
395
407
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
396
408
  ),
@@ -677,6 +689,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
677
689
  product_id: str,
678
690
  proration_billing_mode: Literal["prorated_immediately"],
679
691
  quantity: int,
692
+ addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
680
693
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
681
694
  # The extra values given here take precedence over values defined on the client or passed to this method.
682
695
  extra_headers: Headers | None = None,
@@ -690,6 +703,9 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
690
703
 
691
704
  quantity: Number of units to subscribe for. Must be at least 1.
692
705
 
706
+ addons: Addons for the new plan. Note : Leaving this empty would remove any existing
707
+ addons
708
+
693
709
  extra_headers: Send extra headers
694
710
 
695
711
  extra_query: Add additional query parameters to the request
@@ -708,6 +724,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
708
724
  "product_id": product_id,
709
725
  "proration_billing_mode": proration_billing_mode,
710
726
  "quantity": quantity,
727
+ "addons": addons,
711
728
  },
712
729
  subscription_change_plan_params.SubscriptionChangePlanParams,
713
730
  ),
@@ -722,6 +739,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
722
739
  subscription_id: str,
723
740
  *,
724
741
  product_price: int,
742
+ metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
725
743
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
726
744
  # The extra values given here take precedence over values defined on the client or passed to this method.
727
745
  extra_headers: Headers | None = None,
@@ -748,7 +766,11 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
748
766
  return await self._post(
749
767
  f"/subscriptions/{subscription_id}/charge",
750
768
  body=await async_maybe_transform(
751
- {"product_price": product_price}, subscription_charge_params.SubscriptionChargeParams
769
+ {
770
+ "product_price": product_price,
771
+ "metadata": metadata,
772
+ },
773
+ subscription_charge_params.SubscriptionChargeParams,
752
774
  ),
753
775
  options=make_request_options(
754
776
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
@@ -41,6 +41,7 @@ from .license_key_instance import LicenseKeyInstance as LicenseKeyInstance
41
41
  from .payout_list_response import PayoutListResponse as PayoutListResponse
42
42
  from .refund_create_params import RefundCreateParams as RefundCreateParams
43
43
  from .billing_address_param import BillingAddressParam as BillingAddressParam
44
+ from .dispute_list_response import DisputeListResponse as DisputeListResponse
44
45
  from .payment_create_params import PaymentCreateParams as PaymentCreateParams
45
46
  from .payment_list_response import PaymentListResponse as PaymentListResponse
46
47
  from .product_create_params import ProductCreateParams as ProductCreateParams
@@ -60,6 +61,7 @@ from .addon_cart_response_item import AddonCartResponseItem as AddonCartResponse
60
61
  from .customer_limited_details import CustomerLimitedDetails as CustomerLimitedDetails
61
62
  from .subscription_list_params import SubscriptionListParams as SubscriptionListParams
62
63
  from .create_new_customer_param import CreateNewCustomerParam as CreateNewCustomerParam
64
+ from .dispute_retrieve_response import DisputeRetrieveResponse as DisputeRetrieveResponse
63
65
  from .license_deactivate_params import LicenseDeactivateParams as LicenseDeactivateParams
64
66
  from .license_key_update_params import LicenseKeyUpdateParams as LicenseKeyUpdateParams
65
67
  from .license_validate_response import LicenseValidateResponse as LicenseValidateResponse
@@ -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 .dispute_stage import DisputeStage
8
+ from .dispute_status import DisputeStatus
9
+
10
+ __all__ = ["Dispute"]
11
+
12
+
13
+ class Dispute(BaseModel):
14
+ amount: str
15
+ """
16
+ The amount involved in the dispute, represented as a string to accommodate
17
+ precision.
18
+ """
19
+
20
+ business_id: str
21
+ """The unique identifier of the business involved in the dispute."""
22
+
23
+ created_at: datetime
24
+ """The timestamp of when the dispute was created, in UTC."""
25
+
26
+ currency: str
27
+ """The currency of the disputed amount, represented as an ISO 4217 currency code."""
28
+
29
+ dispute_id: str
30
+ """The unique identifier of the dispute."""
31
+
32
+ dispute_stage: DisputeStage
33
+
34
+ dispute_status: DisputeStatus
35
+
36
+ payment_id: str
37
+ """The unique identifier of the payment associated with the dispute."""
38
+
39
+ remarks: Optional[str] = None
40
+ """Remarks"""
@@ -6,10 +6,10 @@ from .._models import BaseModel
6
6
  from .dispute_stage import DisputeStage
7
7
  from .dispute_status import DisputeStatus
8
8
 
9
- __all__ = ["Dispute"]
9
+ __all__ = ["DisputeListResponse"]
10
10
 
11
11
 
12
- class Dispute(BaseModel):
12
+ class DisputeListResponse(BaseModel):
13
13
  amount: str
14
14
  """
15
15
  The amount involved in the dispute, represented as a string to accommodate
@@ -0,0 +1,46 @@
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 .dispute_stage import DisputeStage
8
+ from .dispute_status import DisputeStatus
9
+ from .customer_limited_details import CustomerLimitedDetails
10
+
11
+ __all__ = ["DisputeRetrieveResponse"]
12
+
13
+
14
+ class DisputeRetrieveResponse(BaseModel):
15
+ amount: str
16
+ """
17
+ The amount involved in the dispute, represented as a string to accommodate
18
+ precision.
19
+ """
20
+
21
+ business_id: str
22
+ """The unique identifier of the business involved in the dispute."""
23
+
24
+ created_at: datetime
25
+ """The timestamp of when the dispute was created, in UTC."""
26
+
27
+ currency: str
28
+ """The currency of the disputed amount, represented as an ISO 4217 currency code."""
29
+
30
+ customer: CustomerLimitedDetails
31
+
32
+ dispute_id: str
33
+ """The unique identifier of the dispute."""
34
+
35
+ dispute_stage: DisputeStage
36
+
37
+ dispute_status: DisputeStatus
38
+
39
+ payment_id: str
40
+ """The unique identifier of the payment associated with the dispute."""
41
+
42
+ reason: Optional[str] = None
43
+ """Reason for the dispute"""
44
+
45
+ remarks: Optional[str] = None
46
+ """Remarks"""
@@ -7,6 +7,7 @@ from .refund import Refund
7
7
  from .dispute import Dispute
8
8
  from .._models import BaseModel
9
9
  from .currency import Currency
10
+ from .country_code import CountryCode
10
11
  from .intent_status import IntentStatus
11
12
  from .billing_address import BillingAddress
12
13
  from .customer_limited_details import CustomerLimitedDetails
@@ -59,6 +60,18 @@ class Payment(BaseModel):
59
60
  (e.g. cents)
60
61
  """
61
62
 
63
+ card_issuing_country: Optional[CountryCode] = None
64
+ """ISO country code alpha2 variant"""
65
+
66
+ card_last_four: Optional[str] = None
67
+ """The last four digits of the card"""
68
+
69
+ card_network: Optional[str] = None
70
+ """Card network like VISA, MASTERCARD etc."""
71
+
72
+ card_type: Optional[str] = None
73
+ """The type of card DEBIT or CREDIT"""
74
+
62
75
  discount_id: Optional[str] = None
63
76
  """The discount id if discount is applied"""
64
77
 
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import Iterable, Optional
5
6
  from typing_extensions import Literal, Required, TypedDict
6
7
 
7
- __all__ = ["SubscriptionChangePlanParams"]
8
+ __all__ = ["SubscriptionChangePlanParams", "Addon"]
8
9
 
9
10
 
10
11
  class SubscriptionChangePlanParams(TypedDict, total=False):
@@ -15,3 +16,15 @@ class SubscriptionChangePlanParams(TypedDict, total=False):
15
16
 
16
17
  quantity: Required[int]
17
18
  """Number of units to subscribe for. Must be at least 1."""
19
+
20
+ addons: Optional[Iterable[Addon]]
21
+ """
22
+ Addons for the new plan. Note : Leaving this empty would remove any existing
23
+ addons
24
+ """
25
+
26
+
27
+ class Addon(TypedDict, total=False):
28
+ addon_id: Required[str]
29
+
30
+ quantity: Required[int]
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import Dict, Optional
5
6
  from typing_extensions import Required, TypedDict
6
7
 
7
8
  __all__ = ["SubscriptionChargeParams"]
@@ -14,3 +15,5 @@ class SubscriptionChargeParams(TypedDict, total=False):
14
15
  Represented in the lowest denomination of the currency (e.g., cents for USD).
15
16
  For example, to charge $1.00, pass `100`.
16
17
  """
18
+
19
+ metadata: Optional[Dict[str, str]]