dodopayments 1.55.7__tar.gz → 1.56.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 (300) hide show
  1. dodopayments-1.56.0/.release-please-manifest.json +3 -0
  2. {dodopayments-1.55.7 → dodopayments-1.56.0}/CHANGELOG.md +13 -0
  3. {dodopayments-1.55.7 → dodopayments-1.56.0}/PKG-INFO +4 -2
  4. {dodopayments-1.55.7 → dodopayments-1.56.0}/api.md +56 -9
  5. {dodopayments-1.55.7 → dodopayments-1.56.0}/pyproject.toml +3 -2
  6. {dodopayments-1.55.7 → dodopayments-1.56.0}/requirements-dev.lock +14 -1
  7. {dodopayments-1.55.7 → dodopayments-1.56.0}/requirements.lock +17 -1
  8. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/__init__.py +2 -0
  9. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_client.py +22 -2
  10. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_exceptions.py +4 -0
  11. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_version.py +1 -1
  12. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/webhooks/webhooks.py +76 -1
  13. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/__init__.py +25 -0
  14. dodopayments-1.56.0/src/dodopayments/types/dispute_accepted_webhook_event.py +29 -0
  15. dodopayments-1.56.0/src/dodopayments/types/dispute_accepted_webhook_event1.py +29 -0
  16. dodopayments-1.56.0/src/dodopayments/types/dispute_cancelled_webhook_event.py +29 -0
  17. dodopayments-1.56.0/src/dodopayments/types/dispute_cancelled_webhook_event1.py +29 -0
  18. dodopayments-1.56.0/src/dodopayments/types/dispute_challenged_webhook_event.py +29 -0
  19. dodopayments-1.56.0/src/dodopayments/types/dispute_challenged_webhook_event1.py +29 -0
  20. dodopayments-1.56.0/src/dodopayments/types/dispute_expired_webhook_event.py +29 -0
  21. dodopayments-1.56.0/src/dodopayments/types/dispute_expired_webhook_event1.py +29 -0
  22. dodopayments-1.56.0/src/dodopayments/types/dispute_lost_webhook_event.py +29 -0
  23. dodopayments-1.56.0/src/dodopayments/types/dispute_lost_webhook_event1.py +29 -0
  24. dodopayments-1.56.0/src/dodopayments/types/dispute_opened_webhook_event.py +29 -0
  25. dodopayments-1.56.0/src/dodopayments/types/dispute_opened_webhook_event1.py +29 -0
  26. dodopayments-1.56.0/src/dodopayments/types/dispute_won_webhook_event.py +29 -0
  27. dodopayments-1.56.0/src/dodopayments/types/dispute_won_webhook_event1.py +29 -0
  28. dodopayments-1.56.0/src/dodopayments/types/license_key_created_webhook_event.py +29 -0
  29. dodopayments-1.56.0/src/dodopayments/types/license_key_created_webhook_event1.py +29 -0
  30. dodopayments-1.56.0/src/dodopayments/types/payment_cancelled_webhook_event.py +29 -0
  31. dodopayments-1.56.0/src/dodopayments/types/payment_cancelled_webhook_event1.py +29 -0
  32. dodopayments-1.56.0/src/dodopayments/types/payment_failed_webhook_event.py +29 -0
  33. dodopayments-1.56.0/src/dodopayments/types/payment_failed_webhook_event1.py +29 -0
  34. dodopayments-1.56.0/src/dodopayments/types/payment_processing_webhook_event.py +29 -0
  35. dodopayments-1.56.0/src/dodopayments/types/payment_processing_webhook_event1.py +29 -0
  36. dodopayments-1.56.0/src/dodopayments/types/payment_succeeded_webhook_event.py +29 -0
  37. dodopayments-1.56.0/src/dodopayments/types/payment_succeeded_webhook_event1.py +29 -0
  38. dodopayments-1.56.0/src/dodopayments/types/refund_failed_webhook_event.py +29 -0
  39. dodopayments-1.56.0/src/dodopayments/types/refund_failed_webhook_event1.py +29 -0
  40. dodopayments-1.56.0/src/dodopayments/types/refund_succeeded_webhook_event.py +29 -0
  41. dodopayments-1.56.0/src/dodopayments/types/refund_succeeded_webhook_event1.py +29 -0
  42. dodopayments-1.56.0/src/dodopayments/types/subscription_active_webhook_event.py +29 -0
  43. dodopayments-1.56.0/src/dodopayments/types/subscription_active_webhook_event1.py +29 -0
  44. dodopayments-1.56.0/src/dodopayments/types/subscription_cancelled_webhook_event.py +29 -0
  45. dodopayments-1.56.0/src/dodopayments/types/subscription_cancelled_webhook_event1.py +29 -0
  46. dodopayments-1.56.0/src/dodopayments/types/subscription_expired_webhook_event.py +29 -0
  47. dodopayments-1.56.0/src/dodopayments/types/subscription_expired_webhook_event1.py +29 -0
  48. dodopayments-1.56.0/src/dodopayments/types/subscription_failed_webhook_event.py +29 -0
  49. dodopayments-1.56.0/src/dodopayments/types/subscription_failed_webhook_event1.py +29 -0
  50. dodopayments-1.56.0/src/dodopayments/types/subscription_on_hold_webhook_event.py +29 -0
  51. dodopayments-1.56.0/src/dodopayments/types/subscription_on_hold_webhook_event1.py +29 -0
  52. dodopayments-1.56.0/src/dodopayments/types/subscription_plan_changed_webhook_event.py +29 -0
  53. dodopayments-1.56.0/src/dodopayments/types/subscription_plan_changed_webhook_event1.py +29 -0
  54. dodopayments-1.56.0/src/dodopayments/types/subscription_renewed_webhook_event.py +29 -0
  55. dodopayments-1.56.0/src/dodopayments/types/subscription_renewed_webhook_event1.py +29 -0
  56. dodopayments-1.56.0/src/dodopayments/types/unsafe_unwrap_webhook_event.py +52 -0
  57. dodopayments-1.56.0/src/dodopayments/types/unwrap_webhook_event.py +52 -0
  58. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_webhooks.py +58 -0
  59. dodopayments-1.55.7/.release-please-manifest.json +0 -3
  60. {dodopayments-1.55.7 → dodopayments-1.56.0}/.gitignore +0 -0
  61. {dodopayments-1.55.7 → dodopayments-1.56.0}/CONTRIBUTING.md +0 -0
  62. {dodopayments-1.55.7 → dodopayments-1.56.0}/LICENSE +0 -0
  63. {dodopayments-1.55.7 → dodopayments-1.56.0}/README.md +0 -0
  64. {dodopayments-1.55.7 → dodopayments-1.56.0}/SECURITY.md +0 -0
  65. {dodopayments-1.55.7 → dodopayments-1.56.0}/bin/check-release-environment +0 -0
  66. {dodopayments-1.55.7 → dodopayments-1.56.0}/bin/publish-pypi +0 -0
  67. {dodopayments-1.55.7 → dodopayments-1.56.0}/examples/.keep +0 -0
  68. {dodopayments-1.55.7 → dodopayments-1.56.0}/noxfile.py +0 -0
  69. {dodopayments-1.55.7 → dodopayments-1.56.0}/release-please-config.json +0 -0
  70. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodo_payments/lib/.keep +0 -0
  71. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_base_client.py +0 -0
  72. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_compat.py +0 -0
  73. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_constants.py +0 -0
  74. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_files.py +0 -0
  75. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_models.py +0 -0
  76. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_qs.py +0 -0
  77. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_resource.py +0 -0
  78. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_response.py +0 -0
  79. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_streaming.py +0 -0
  80. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_types.py +0 -0
  81. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/__init__.py +0 -0
  82. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_compat.py +0 -0
  83. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_datetime_parse.py +0 -0
  84. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_logs.py +0 -0
  85. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_proxy.py +0 -0
  86. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_reflection.py +0 -0
  87. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_resources_proxy.py +0 -0
  88. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_streams.py +0 -0
  89. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_sync.py +0 -0
  90. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_transform.py +0 -0
  91. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_typing.py +0 -0
  92. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/_utils/_utils.py +0 -0
  93. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/lib/.keep +0 -0
  94. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/pagination.py +0 -0
  95. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/py.typed +0 -0
  96. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/__init__.py +0 -0
  97. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/addons.py +0 -0
  98. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/brands.py +0 -0
  99. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/checkout_sessions.py +0 -0
  100. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/__init__.py +0 -0
  101. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/customer_portal.py +0 -0
  102. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/customers.py +0 -0
  103. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/wallets/__init__.py +0 -0
  104. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/wallets/ledger_entries.py +0 -0
  105. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/customers/wallets/wallets.py +0 -0
  106. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/discounts.py +0 -0
  107. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/disputes.py +0 -0
  108. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/invoices/__init__.py +0 -0
  109. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/invoices/invoices.py +0 -0
  110. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/invoices/payments.py +0 -0
  111. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/license_key_instances.py +0 -0
  112. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/license_keys.py +0 -0
  113. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/licenses.py +0 -0
  114. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/meters.py +0 -0
  115. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/misc.py +0 -0
  116. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/payments.py +0 -0
  117. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/payouts.py +0 -0
  118. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/products/__init__.py +0 -0
  119. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/products/images.py +0 -0
  120. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/products/products.py +0 -0
  121. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/refunds.py +0 -0
  122. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/subscriptions.py +0 -0
  123. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/usage_events.py +0 -0
  124. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/webhooks/__init__.py +0 -0
  125. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/resources/webhooks/headers.py +0 -0
  126. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/add_meter_to_price.py +0 -0
  127. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/add_meter_to_price_param.py +0 -0
  128. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_cart_response_item.py +0 -0
  129. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_create_params.py +0 -0
  130. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_list_params.py +0 -0
  131. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_response.py +0 -0
  132. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_update_images_response.py +0 -0
  133. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/addon_update_params.py +0 -0
  134. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/attach_addon_param.py +0 -0
  135. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/attach_existing_customer_param.py +0 -0
  136. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/billing_address.py +0 -0
  137. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/billing_address_param.py +0 -0
  138. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/brand.py +0 -0
  139. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/brand_create_params.py +0 -0
  140. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/brand_list_response.py +0 -0
  141. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/brand_update_images_response.py +0 -0
  142. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/brand_update_params.py +0 -0
  143. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/checkout_session_create_params.py +0 -0
  144. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/checkout_session_response.py +0 -0
  145. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/country_code.py +0 -0
  146. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/currency.py +0 -0
  147. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer.py +0 -0
  148. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_create_params.py +0 -0
  149. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_limited_details.py +0 -0
  150. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_list_params.py +0 -0
  151. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_portal_session.py +0 -0
  152. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_request_param.py +0 -0
  153. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customer_update_params.py +0 -0
  154. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/__init__.py +0 -0
  155. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/customer_portal_create_params.py +0 -0
  156. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/customer_wallet.py +0 -0
  157. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/wallet_list_response.py +0 -0
  158. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/wallets/__init__.py +0 -0
  159. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/wallets/customer_wallet_transaction.py +0 -0
  160. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/wallets/ledger_entry_create_params.py +0 -0
  161. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/customers/wallets/ledger_entry_list_params.py +0 -0
  162. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/discount.py +0 -0
  163. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/discount_create_params.py +0 -0
  164. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/discount_list_params.py +0 -0
  165. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/discount_type.py +0 -0
  166. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/discount_update_params.py +0 -0
  167. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/dispute.py +0 -0
  168. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/dispute_list_params.py +0 -0
  169. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/dispute_list_response.py +0 -0
  170. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/dispute_stage.py +0 -0
  171. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/dispute_status.py +0 -0
  172. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/event.py +0 -0
  173. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/event_input_param.py +0 -0
  174. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/get_dispute.py +0 -0
  175. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/intent_status.py +0 -0
  176. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/invoices/__init__.py +0 -0
  177. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_activate_params.py +0 -0
  178. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_activate_response.py +0 -0
  179. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_deactivate_params.py +0 -0
  180. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key.py +0 -0
  181. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_duration.py +0 -0
  182. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_duration_param.py +0 -0
  183. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_instance.py +0 -0
  184. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_instance_list_params.py +0 -0
  185. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_instance_update_params.py +0 -0
  186. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_list_params.py +0 -0
  187. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_status.py +0 -0
  188. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_key_update_params.py +0 -0
  189. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_validate_params.py +0 -0
  190. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/license_validate_response.py +0 -0
  191. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter.py +0 -0
  192. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_aggregation.py +0 -0
  193. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_aggregation_param.py +0 -0
  194. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_create_params.py +0 -0
  195. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_filter.py +0 -0
  196. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_filter_param.py +0 -0
  197. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/meter_list_params.py +0 -0
  198. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/misc_list_supported_countries_response.py +0 -0
  199. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/new_customer_param.py +0 -0
  200. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/on_demand_subscription_param.py +0 -0
  201. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/one_time_product_cart_item.py +0 -0
  202. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/one_time_product_cart_item_param.py +0 -0
  203. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment.py +0 -0
  204. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_create_params.py +0 -0
  205. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_create_response.py +0 -0
  206. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_list_params.py +0 -0
  207. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_list_response.py +0 -0
  208. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_method_types.py +0 -0
  209. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payment_retrieve_line_items_response.py +0 -0
  210. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payout_list_params.py +0 -0
  211. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/payout_list_response.py +0 -0
  212. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/price.py +0 -0
  213. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/price_param.py +0 -0
  214. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product.py +0 -0
  215. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_create_params.py +0 -0
  216. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_list_params.py +0 -0
  217. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_list_response.py +0 -0
  218. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_update_files_params.py +0 -0
  219. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_update_files_response.py +0 -0
  220. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/product_update_params.py +0 -0
  221. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/products/__init__.py +0 -0
  222. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/products/image_update_params.py +0 -0
  223. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/products/image_update_response.py +0 -0
  224. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/refund.py +0 -0
  225. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/refund_create_params.py +0 -0
  226. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/refund_list_params.py +0 -0
  227. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/refund_list_response.py +0 -0
  228. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/refund_status.py +0 -0
  229. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription.py +0 -0
  230. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_change_plan_params.py +0 -0
  231. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_charge_params.py +0 -0
  232. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_charge_response.py +0 -0
  233. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_create_params.py +0 -0
  234. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_create_response.py +0 -0
  235. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_list_params.py +0 -0
  236. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_list_response.py +0 -0
  237. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_retrieve_usage_history_params.py +0 -0
  238. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_retrieve_usage_history_response.py +0 -0
  239. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_status.py +0 -0
  240. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/subscription_update_params.py +0 -0
  241. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/tax_category.py +0 -0
  242. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/time_interval.py +0 -0
  243. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/usage_event_ingest_params.py +0 -0
  244. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/usage_event_ingest_response.py +0 -0
  245. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/usage_event_list_params.py +0 -0
  246. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_create_params.py +0 -0
  247. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_details.py +0 -0
  248. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_event_type.py +0 -0
  249. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_list_params.py +0 -0
  250. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_retrieve_secret_response.py +0 -0
  251. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhook_update_params.py +0 -0
  252. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhooks/__init__.py +0 -0
  253. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhooks/header_retrieve_response.py +0 -0
  254. {dodopayments-1.55.7 → dodopayments-1.56.0}/src/dodopayments/types/webhooks/header_update_params.py +0 -0
  255. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/__init__.py +0 -0
  256. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/__init__.py +0 -0
  257. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/customers/__init__.py +0 -0
  258. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/customers/test_customer_portal.py +0 -0
  259. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/customers/test_wallets.py +0 -0
  260. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/customers/wallets/__init__.py +0 -0
  261. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/customers/wallets/test_ledger_entries.py +0 -0
  262. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/invoices/__init__.py +0 -0
  263. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/invoices/test_payments.py +0 -0
  264. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/products/__init__.py +0 -0
  265. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/products/test_images.py +0 -0
  266. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_addons.py +0 -0
  267. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_brands.py +0 -0
  268. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_checkout_sessions.py +0 -0
  269. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_customers.py +0 -0
  270. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_discounts.py +0 -0
  271. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_disputes.py +0 -0
  272. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_license_key_instances.py +0 -0
  273. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_license_keys.py +0 -0
  274. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_licenses.py +0 -0
  275. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_meters.py +0 -0
  276. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_misc.py +0 -0
  277. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_payments.py +0 -0
  278. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_payouts.py +0 -0
  279. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_products.py +0 -0
  280. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_refunds.py +0 -0
  281. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_subscriptions.py +0 -0
  282. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/test_usage_events.py +0 -0
  283. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/webhooks/__init__.py +0 -0
  284. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/api_resources/webhooks/test_headers.py +0 -0
  285. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/conftest.py +0 -0
  286. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/sample_file.txt +0 -0
  287. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_client.py +0 -0
  288. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_deepcopy.py +0 -0
  289. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_extract_files.py +0 -0
  290. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_files.py +0 -0
  291. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_models.py +0 -0
  292. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_qs.py +0 -0
  293. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_required_args.py +0 -0
  294. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_response.py +0 -0
  295. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_streaming.py +0 -0
  296. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_transform.py +0 -0
  297. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_utils/test_datetime_parse.py +0 -0
  298. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_utils/test_proxy.py +0 -0
  299. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/test_utils/test_typing.py +0 -0
  300. {dodopayments-1.55.7 → dodopayments-1.56.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.56.0"
3
+ }
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.56.0 (2025-10-25)
4
+
5
+ Full Changelog: [v1.55.7...v1.56.0](https://github.com/dodopayments/dodopayments-python/compare/v1.55.7...v1.56.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** added unwrap functions for webhooks ([9bf339a](https://github.com/dodopayments/dodopayments-python/commit/9bf339a52c8660f603de53d68be20304e46cae57))
10
+
11
+
12
+ ### Chores
13
+
14
+ * bump `httpx-aiohttp` version to 0.1.9 ([e4792b3](https://github.com/dodopayments/dodopayments-python/commit/e4792b35b4bcf7365c815f3543eac7a5bda724ad))
15
+
3
16
  ## 1.55.7 (2025-10-17)
4
17
 
5
18
  Full Changelog: [v1.55.0...v1.55.7](https://github.com/dodopayments/dodopayments-python/compare/v1.55.0...v1.55.7)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.55.7
3
+ Version: 1.56.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
@@ -30,7 +30,9 @@ Requires-Dist: sniffio
30
30
  Requires-Dist: typing-extensions<5,>=4.10
31
31
  Provides-Extra: aiohttp
32
32
  Requires-Dist: aiohttp; extra == 'aiohttp'
33
- Requires-Dist: httpx-aiohttp>=0.1.8; extra == 'aiohttp'
33
+ Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
34
+ Provides-Extra: webhooks
35
+ Requires-Dist: standardwebhooks; extra == 'webhooks'
34
36
  Description-Content-Type: text/markdown
35
37
 
36
38
  # Dodo Payments Python API library
@@ -204,14 +204,6 @@ Methods:
204
204
 
205
205
  - <code title="get /payouts">client.payouts.<a href="./src/dodopayments/resources/payouts.py">list</a>(\*\*<a href="src/dodopayments/types/payout_list_params.py">params</a>) -> <a href="./src/dodopayments/types/payout_list_response.py">SyncDefaultPageNumberPagination[PayoutListResponse]</a></code>
206
206
 
207
- # WebhookEvents
208
-
209
- Types:
210
-
211
- ```python
212
- from dodopayments.types import WebhookEventType, WebhookPayload
213
- ```
214
-
215
207
  # Products
216
208
 
217
209
  Types:
@@ -319,7 +311,54 @@ Methods:
319
311
  Types:
320
312
 
321
313
  ```python
322
- from dodopayments.types import WebhookDetails, WebhookRetrieveSecretResponse
314
+ from dodopayments.types import (
315
+ WebhookDetails,
316
+ WebhookRetrieveSecretResponse,
317
+ DisputeAcceptedWebhookEvent,
318
+ DisputeCancelledWebhookEvent,
319
+ DisputeChallengedWebhookEvent,
320
+ DisputeExpiredWebhookEvent,
321
+ DisputeLostWebhookEvent,
322
+ DisputeOpenedWebhookEvent,
323
+ DisputeWonWebhookEvent,
324
+ LicenseKeyCreatedWebhookEvent,
325
+ PaymentCancelledWebhookEvent,
326
+ PaymentFailedWebhookEvent,
327
+ PaymentProcessingWebhookEvent,
328
+ PaymentSucceededWebhookEvent,
329
+ RefundFailedWebhookEvent,
330
+ RefundSucceededWebhookEvent,
331
+ SubscriptionActiveWebhookEvent,
332
+ SubscriptionCancelledWebhookEvent,
333
+ SubscriptionExpiredWebhookEvent,
334
+ SubscriptionFailedWebhookEvent,
335
+ SubscriptionOnHoldWebhookEvent,
336
+ SubscriptionPlanChangedWebhookEvent,
337
+ SubscriptionRenewedWebhookEvent,
338
+ DisputeAcceptedWebhookEvent,
339
+ DisputeCancelledWebhookEvent,
340
+ DisputeChallengedWebhookEvent,
341
+ DisputeExpiredWebhookEvent,
342
+ DisputeLostWebhookEvent,
343
+ DisputeOpenedWebhookEvent,
344
+ DisputeWonWebhookEvent,
345
+ LicenseKeyCreatedWebhookEvent,
346
+ PaymentCancelledWebhookEvent,
347
+ PaymentFailedWebhookEvent,
348
+ PaymentProcessingWebhookEvent,
349
+ PaymentSucceededWebhookEvent,
350
+ RefundFailedWebhookEvent,
351
+ RefundSucceededWebhookEvent,
352
+ SubscriptionActiveWebhookEvent,
353
+ SubscriptionCancelledWebhookEvent,
354
+ SubscriptionExpiredWebhookEvent,
355
+ SubscriptionFailedWebhookEvent,
356
+ SubscriptionOnHoldWebhookEvent,
357
+ SubscriptionPlanChangedWebhookEvent,
358
+ SubscriptionRenewedWebhookEvent,
359
+ UnsafeUnwrapWebhookEvent,
360
+ UnwrapWebhookEvent,
361
+ )
323
362
  ```
324
363
 
325
364
  Methods:
@@ -344,6 +383,14 @@ Methods:
344
383
  - <code title="get /webhooks/{webhook_id}/headers">client.webhooks.headers.<a href="./src/dodopayments/resources/webhooks/headers.py">retrieve</a>(webhook_id) -> <a href="./src/dodopayments/types/webhooks/header_retrieve_response.py">HeaderRetrieveResponse</a></code>
345
384
  - <code title="patch /webhooks/{webhook_id}/headers">client.webhooks.headers.<a href="./src/dodopayments/resources/webhooks/headers.py">update</a>(webhook_id, \*\*<a href="src/dodopayments/types/webhooks/header_update_params.py">params</a>) -> None</code>
346
385
 
386
+ # WebhookEvents
387
+
388
+ Types:
389
+
390
+ ```python
391
+ from dodopayments.types import WebhookEventType, WebhookPayload
392
+ ```
393
+
347
394
  # UsageEvents
348
395
 
349
396
  Types:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dodopayments"
3
- version = "1.55.7"
3
+ version = "1.56.0"
4
4
  description = "The official Python library for the Dodo Payments API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -39,7 +39,8 @@ Homepage = "https://github.com/dodopayments/dodopayments-python"
39
39
  Repository = "https://github.com/dodopayments/dodopayments-python"
40
40
 
41
41
  [project.optional-dependencies]
42
- aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
42
+ aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
43
+ webhooks = ["standardwebhooks"]
43
44
 
44
45
  [tool.rye]
45
46
  managed = true
@@ -28,11 +28,14 @@ async-timeout==5.0.1
28
28
  # via aiohttp
29
29
  attrs==25.3.0
30
30
  # via aiohttp
31
+ # via standardwebhooks
31
32
  certifi==2023.7.22
32
33
  # via httpcore
33
34
  # via httpx
34
35
  colorlog==6.7.0
35
36
  # via nox
37
+ deprecated==1.2.18
38
+ # via standardwebhooks
36
39
  dirty-equals==0.6.0
37
40
  distlib==0.3.7
38
41
  # via virtualenv
@@ -56,7 +59,8 @@ httpx==0.28.1
56
59
  # via dodopayments
57
60
  # via httpx-aiohttp
58
61
  # via respx
59
- httpx-aiohttp==0.1.8
62
+ # via standardwebhooks
63
+ httpx-aiohttp==0.1.9
60
64
  # via dodopayments
61
65
  idna==3.4
62
66
  # via anyio
@@ -101,6 +105,7 @@ pytest==8.3.3
101
105
  pytest-asyncio==0.24.0
102
106
  pytest-xdist==3.7.0
103
107
  python-dateutil==2.8.2
108
+ # via standardwebhooks
104
109
  # via time-machine
105
110
  pytz==2023.3.post1
106
111
  # via dirty-equals
@@ -114,10 +119,16 @@ six==1.16.0
114
119
  sniffio==1.3.0
115
120
  # via anyio
116
121
  # via dodopayments
122
+ standardwebhooks==1.0.0
123
+ # via dodopayments
117
124
  time-machine==2.9.0
118
125
  tomli==2.0.2
119
126
  # via mypy
120
127
  # via pytest
128
+ types-deprecated==1.2.15.20250304
129
+ # via standardwebhooks
130
+ types-python-dateutil==2.9.0.20251008
131
+ # via standardwebhooks
121
132
  typing-extensions==4.12.2
122
133
  # via anyio
123
134
  # via dodopayments
@@ -131,6 +142,8 @@ typing-inspection==0.4.1
131
142
  # via pydantic
132
143
  virtualenv==20.24.5
133
144
  # via nox
145
+ wrapt==1.17.3
146
+ # via deprecated
134
147
  yarl==1.20.0
135
148
  # via aiohttp
136
149
  zipp==3.17.0
@@ -26,9 +26,12 @@ async-timeout==5.0.1
26
26
  # via aiohttp
27
27
  attrs==25.3.0
28
28
  # via aiohttp
29
+ # via standardwebhooks
29
30
  certifi==2023.7.22
30
31
  # via httpcore
31
32
  # via httpx
33
+ deprecated==1.2.18
34
+ # via standardwebhooks
32
35
  distro==1.8.0
33
36
  # via dodopayments
34
37
  exceptiongroup==1.2.2
@@ -43,7 +46,8 @@ httpcore==1.0.9
43
46
  httpx==0.28.1
44
47
  # via dodopayments
45
48
  # via httpx-aiohttp
46
- httpx-aiohttp==0.1.8
49
+ # via standardwebhooks
50
+ httpx-aiohttp==0.1.9
47
51
  # via dodopayments
48
52
  idna==3.4
49
53
  # via anyio
@@ -59,9 +63,19 @@ pydantic==2.11.9
59
63
  # via dodopayments
60
64
  pydantic-core==2.33.2
61
65
  # via pydantic
66
+ python-dateutil==2.9.0.post0
67
+ # via standardwebhooks
68
+ six==1.17.0
69
+ # via python-dateutil
62
70
  sniffio==1.3.0
63
71
  # via anyio
64
72
  # via dodopayments
73
+ standardwebhooks==1.0.0
74
+ # via dodopayments
75
+ types-deprecated==1.2.15.20250304
76
+ # via standardwebhooks
77
+ types-python-dateutil==2.9.0.20251008
78
+ # via standardwebhooks
65
79
  typing-extensions==4.12.2
66
80
  # via anyio
67
81
  # via dodopayments
@@ -71,5 +85,7 @@ typing-extensions==4.12.2
71
85
  # via typing-inspection
72
86
  typing-inspection==0.4.1
73
87
  # via pydantic
88
+ wrapt==1.17.3
89
+ # via deprecated
74
90
  yarl==1.20.0
75
91
  # via aiohttp
@@ -35,6 +35,7 @@ from ._exceptions import (
35
35
  InternalServerError,
36
36
  PermissionDeniedError,
37
37
  UnprocessableEntityError,
38
+ APIWebhookValidationError,
38
39
  APIResponseValidationError,
39
40
  )
40
41
  from ._base_client import DefaultHttpxClient, DefaultAioHttpClient, DefaultAsyncHttpxClient
@@ -58,6 +59,7 @@ __all__ = [
58
59
  "APITimeoutError",
59
60
  "APIConnectionError",
60
61
  "APIResponseValidationError",
62
+ "APIWebhookValidationError",
61
63
  "BadRequestError",
62
64
  "AuthenticationError",
63
65
  "PermissionDeniedError",
@@ -93,6 +93,7 @@ class DodoPayments(SyncAPIClient):
93
93
 
94
94
  # client options
95
95
  bearer_token: str
96
+ webhook_key: str | None
96
97
 
97
98
  _environment: Literal["live_mode", "test_mode"] | NotGiven
98
99
 
@@ -100,6 +101,7 @@ class DodoPayments(SyncAPIClient):
100
101
  self,
101
102
  *,
102
103
  bearer_token: str | None = None,
104
+ webhook_key: str | None = None,
103
105
  environment: Literal["live_mode", "test_mode"] | NotGiven = not_given,
104
106
  base_url: str | httpx.URL | None | NotGiven = not_given,
105
107
  timeout: float | Timeout | None | NotGiven = not_given,
@@ -122,7 +124,9 @@ class DodoPayments(SyncAPIClient):
122
124
  ) -> None:
123
125
  """Construct a new synchronous DodoPayments client instance.
124
126
 
125
- This automatically infers the `bearer_token` argument from the `DODO_PAYMENTS_API_KEY` environment variable if it is not provided.
127
+ This automatically infers the following arguments from their corresponding environment variables if they are not provided:
128
+ - `bearer_token` from `DODO_PAYMENTS_API_KEY`
129
+ - `webhook_key` from `DODO_PAYMENTS_WEBHOOK_KEY`
126
130
  """
127
131
  if bearer_token is None:
128
132
  bearer_token = os.environ.get("DODO_PAYMENTS_API_KEY")
@@ -132,6 +136,10 @@ class DodoPayments(SyncAPIClient):
132
136
  )
133
137
  self.bearer_token = bearer_token
134
138
 
139
+ if webhook_key is None:
140
+ webhook_key = os.environ.get("DODO_PAYMENTS_WEBHOOK_KEY")
141
+ self.webhook_key = webhook_key
142
+
135
143
  self._environment = environment
136
144
 
137
145
  base_url_env = os.environ.get("DODO_PAYMENTS_BASE_URL")
@@ -215,6 +223,7 @@ class DodoPayments(SyncAPIClient):
215
223
  self,
216
224
  *,
217
225
  bearer_token: str | None = None,
226
+ webhook_key: str | None = None,
218
227
  environment: Literal["live_mode", "test_mode"] | None = None,
219
228
  base_url: str | httpx.URL | None = None,
220
229
  timeout: float | Timeout | None | NotGiven = not_given,
@@ -250,6 +259,7 @@ class DodoPayments(SyncAPIClient):
250
259
  http_client = http_client or self._client
251
260
  return self.__class__(
252
261
  bearer_token=bearer_token or self.bearer_token,
262
+ webhook_key=webhook_key or self.webhook_key,
253
263
  base_url=base_url or self.base_url,
254
264
  environment=environment or self._environment,
255
265
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
@@ -323,6 +333,7 @@ class AsyncDodoPayments(AsyncAPIClient):
323
333
 
324
334
  # client options
325
335
  bearer_token: str
336
+ webhook_key: str | None
326
337
 
327
338
  _environment: Literal["live_mode", "test_mode"] | NotGiven
328
339
 
@@ -330,6 +341,7 @@ class AsyncDodoPayments(AsyncAPIClient):
330
341
  self,
331
342
  *,
332
343
  bearer_token: str | None = None,
344
+ webhook_key: str | None = None,
333
345
  environment: Literal["live_mode", "test_mode"] | NotGiven = not_given,
334
346
  base_url: str | httpx.URL | None | NotGiven = not_given,
335
347
  timeout: float | Timeout | None | NotGiven = not_given,
@@ -352,7 +364,9 @@ class AsyncDodoPayments(AsyncAPIClient):
352
364
  ) -> None:
353
365
  """Construct a new async AsyncDodoPayments client instance.
354
366
 
355
- This automatically infers the `bearer_token` argument from the `DODO_PAYMENTS_API_KEY` environment variable if it is not provided.
367
+ This automatically infers the following arguments from their corresponding environment variables if they are not provided:
368
+ - `bearer_token` from `DODO_PAYMENTS_API_KEY`
369
+ - `webhook_key` from `DODO_PAYMENTS_WEBHOOK_KEY`
356
370
  """
357
371
  if bearer_token is None:
358
372
  bearer_token = os.environ.get("DODO_PAYMENTS_API_KEY")
@@ -362,6 +376,10 @@ class AsyncDodoPayments(AsyncAPIClient):
362
376
  )
363
377
  self.bearer_token = bearer_token
364
378
 
379
+ if webhook_key is None:
380
+ webhook_key = os.environ.get("DODO_PAYMENTS_WEBHOOK_KEY")
381
+ self.webhook_key = webhook_key
382
+
365
383
  self._environment = environment
366
384
 
367
385
  base_url_env = os.environ.get("DODO_PAYMENTS_BASE_URL")
@@ -445,6 +463,7 @@ class AsyncDodoPayments(AsyncAPIClient):
445
463
  self,
446
464
  *,
447
465
  bearer_token: str | None = None,
466
+ webhook_key: str | None = None,
448
467
  environment: Literal["live_mode", "test_mode"] | None = None,
449
468
  base_url: str | httpx.URL | None = None,
450
469
  timeout: float | Timeout | None | NotGiven = not_given,
@@ -480,6 +499,7 @@ class AsyncDodoPayments(AsyncAPIClient):
480
499
  http_client = http_client or self._client
481
500
  return self.__class__(
482
501
  bearer_token=bearer_token or self.bearer_token,
502
+ webhook_key=webhook_key or self.webhook_key,
483
503
  base_url=base_url or self.base_url,
484
504
  environment=environment or self._environment,
485
505
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
@@ -54,6 +54,10 @@ class APIResponseValidationError(APIError):
54
54
  self.status_code = response.status_code
55
55
 
56
56
 
57
+ class APIWebhookValidationError(APIError):
58
+ pass
59
+
60
+
57
61
  class APIStatusError(APIError):
58
62
  """Raised when an API response has a status code of 4xx or 5xx."""
59
63
 
@@ -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.55.7" # x-release-please-version
4
+ __version__ = "1.56.0" # x-release-please-version
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Dict, List, Optional
5
+ import json
6
+ from typing import Dict, List, Mapping, Optional, cast
6
7
 
7
8
  import httpx
8
9
 
@@ -18,6 +19,7 @@ from .headers import (
18
19
  from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
19
20
  from ..._utils import maybe_transform, async_maybe_transform
20
21
  from ..._compat import cached_property
22
+ from ..._models import construct_type
21
23
  from ..._resource import SyncAPIResource, AsyncAPIResource
22
24
  from ..._response import (
23
25
  to_raw_response_wrapper,
@@ -26,9 +28,12 @@ from ..._response import (
26
28
  async_to_streamed_response_wrapper,
27
29
  )
28
30
  from ...pagination import SyncCursorPagePagination, AsyncCursorPagePagination
31
+ from ..._exceptions import DodoPaymentsError
29
32
  from ..._base_client import AsyncPaginator, make_request_options
30
33
  from ...types.webhook_details import WebhookDetails
31
34
  from ...types.webhook_event_type import WebhookEventType
35
+ from ...types.unwrap_webhook_event import UnwrapWebhookEvent
36
+ from ...types.unsafe_unwrap_webhook_event import UnsafeUnwrapWebhookEvent
32
37
  from ...types.webhook_retrieve_secret_response import WebhookRetrieveSecretResponse
33
38
 
34
39
  __all__ = ["WebhooksResource", "AsyncWebhooksResource"]
@@ -336,6 +341,41 @@ class WebhooksResource(SyncAPIResource):
336
341
  cast_to=WebhookRetrieveSecretResponse,
337
342
  )
338
343
 
344
+ def unsafe_unwrap(self, payload: str) -> UnsafeUnwrapWebhookEvent:
345
+ return cast(
346
+ UnsafeUnwrapWebhookEvent,
347
+ construct_type(
348
+ type_=UnsafeUnwrapWebhookEvent,
349
+ value=json.loads(payload),
350
+ ),
351
+ )
352
+
353
+ def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
354
+ try:
355
+ from standardwebhooks import Webhook
356
+ except ImportError as exc:
357
+ raise DodoPaymentsError("You need to install `dodopayments[webhooks]` to use this method") from exc
358
+
359
+ if key is None:
360
+ key = self._client.webhook_key
361
+ if key is None:
362
+ raise ValueError(
363
+ "Cannot verify a webhook without a key on either the client's webhook_key or passed in as an argument"
364
+ )
365
+
366
+ if not isinstance(headers, dict):
367
+ headers = dict(headers)
368
+
369
+ Webhook(key).verify(payload, headers)
370
+
371
+ return cast(
372
+ UnwrapWebhookEvent,
373
+ construct_type(
374
+ type_=UnwrapWebhookEvent,
375
+ value=json.loads(payload),
376
+ ),
377
+ )
378
+
339
379
 
340
380
  class AsyncWebhooksResource(AsyncAPIResource):
341
381
  @cached_property
@@ -639,6 +679,41 @@ class AsyncWebhooksResource(AsyncAPIResource):
639
679
  cast_to=WebhookRetrieveSecretResponse,
640
680
  )
641
681
 
682
+ def unsafe_unwrap(self, payload: str) -> UnsafeUnwrapWebhookEvent:
683
+ return cast(
684
+ UnsafeUnwrapWebhookEvent,
685
+ construct_type(
686
+ type_=UnsafeUnwrapWebhookEvent,
687
+ value=json.loads(payload),
688
+ ),
689
+ )
690
+
691
+ def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
692
+ try:
693
+ from standardwebhooks import Webhook
694
+ except ImportError as exc:
695
+ raise DodoPaymentsError("You need to install `dodopayments[webhooks]` to use this method") from exc
696
+
697
+ if key is None:
698
+ key = self._client.webhook_key
699
+ if key is None:
700
+ raise ValueError(
701
+ "Cannot verify a webhook without a key on either the client's webhook_key or passed in as an argument"
702
+ )
703
+
704
+ if not isinstance(headers, dict):
705
+ headers = dict(headers)
706
+
707
+ Webhook(key).verify(payload, headers)
708
+
709
+ return cast(
710
+ UnwrapWebhookEvent,
711
+ construct_type(
712
+ type_=UnwrapWebhookEvent,
713
+ value=json.loads(payload),
714
+ ),
715
+ )
716
+
642
717
 
643
718
  class WebhooksResourceWithRawResponse:
644
719
  def __init__(self, webhooks: WebhooksResource) -> None:
@@ -60,6 +60,7 @@ 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
62
  from .refund_list_response import RefundListResponse as RefundListResponse
63
+ from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent
63
64
  from .billing_address_param import BillingAddressParam as BillingAddressParam
64
65
  from .dispute_list_response import DisputeListResponse as DisputeListResponse
65
66
  from .payment_create_params import PaymentCreateParams as PaymentCreateParams
@@ -86,11 +87,13 @@ from .addon_cart_response_item import AddonCartResponseItem as AddonCartResponse
86
87
  from .customer_limited_details import CustomerLimitedDetails as CustomerLimitedDetails
87
88
  from .subscription_list_params import SubscriptionListParams as SubscriptionListParams
88
89
  from .checkout_session_response import CheckoutSessionResponse as CheckoutSessionResponse
90
+ from .dispute_won_webhook_event import DisputeWonWebhookEvent as DisputeWonWebhookEvent
89
91
  from .license_activate_response import LicenseActivateResponse as LicenseActivateResponse
90
92
  from .license_deactivate_params import LicenseDeactivateParams as LicenseDeactivateParams
91
93
  from .license_key_update_params import LicenseKeyUpdateParams as LicenseKeyUpdateParams
92
94
  from .license_validate_response import LicenseValidateResponse as LicenseValidateResponse
93
95
  from .usage_event_ingest_params import UsageEventIngestParams as UsageEventIngestParams
96
+ from .dispute_lost_webhook_event import DisputeLostWebhookEvent as DisputeLostWebhookEvent
94
97
  from .license_key_duration_param import LicenseKeyDurationParam as LicenseKeyDurationParam
95
98
  from .one_time_product_cart_item import OneTimeProductCartItem as OneTimeProductCartItem
96
99
  from .subscription_charge_params import SubscriptionChargeParams as SubscriptionChargeParams
@@ -98,24 +101,46 @@ from .subscription_create_params import SubscriptionCreateParams as Subscription
98
101
  from .subscription_list_response import SubscriptionListResponse as SubscriptionListResponse
99
102
  from .subscription_update_params import SubscriptionUpdateParams as SubscriptionUpdateParams
100
103
  from .product_update_files_params import ProductUpdateFilesParams as ProductUpdateFilesParams
104
+ from .refund_failed_webhook_event import RefundFailedWebhookEvent as RefundFailedWebhookEvent
105
+ from .unsafe_unwrap_webhook_event import UnsafeUnwrapWebhookEvent as UnsafeUnwrapWebhookEvent
101
106
  from .usage_event_ingest_response import UsageEventIngestResponse as UsageEventIngestResponse
102
107
  from .addon_update_images_response import AddonUpdateImagesResponse as AddonUpdateImagesResponse
103
108
  from .brand_update_images_response import BrandUpdateImagesResponse as BrandUpdateImagesResponse
109
+ from .dispute_opened_webhook_event import DisputeOpenedWebhookEvent as DisputeOpenedWebhookEvent
104
110
  from .on_demand_subscription_param import OnDemandSubscriptionParam as OnDemandSubscriptionParam
111
+ from .payment_failed_webhook_event import PaymentFailedWebhookEvent as PaymentFailedWebhookEvent
105
112
  from .subscription_charge_response import SubscriptionChargeResponse as SubscriptionChargeResponse
106
113
  from .subscription_create_response import SubscriptionCreateResponse as SubscriptionCreateResponse
114
+ from .dispute_expired_webhook_event import DisputeExpiredWebhookEvent as DisputeExpiredWebhookEvent
107
115
  from .product_update_files_response import ProductUpdateFilesResponse as ProductUpdateFilesResponse
108
116
  from .attach_existing_customer_param import AttachExistingCustomerParam as AttachExistingCustomerParam
109
117
  from .checkout_session_create_params import CheckoutSessionCreateParams as CheckoutSessionCreateParams
118
+ from .dispute_accepted_webhook_event import DisputeAcceptedWebhookEvent as DisputeAcceptedWebhookEvent
119
+ from .refund_succeeded_webhook_event import RefundSucceededWebhookEvent as RefundSucceededWebhookEvent
120
+ from .dispute_cancelled_webhook_event import DisputeCancelledWebhookEvent as DisputeCancelledWebhookEvent
121
+ from .payment_cancelled_webhook_event import PaymentCancelledWebhookEvent as PaymentCancelledWebhookEvent
122
+ from .payment_succeeded_webhook_event import PaymentSucceededWebhookEvent as PaymentSucceededWebhookEvent
110
123
  from .subscription_change_plan_params import SubscriptionChangePlanParams as SubscriptionChangePlanParams
124
+ from .dispute_challenged_webhook_event import DisputeChallengedWebhookEvent as DisputeChallengedWebhookEvent
111
125
  from .license_key_instance_list_params import LicenseKeyInstanceListParams as LicenseKeyInstanceListParams
112
126
  from .one_time_product_cart_item_param import OneTimeProductCartItemParam as OneTimeProductCartItemParam
127
+ from .payment_processing_webhook_event import PaymentProcessingWebhookEvent as PaymentProcessingWebhookEvent
113
128
  from .webhook_retrieve_secret_response import WebhookRetrieveSecretResponse as WebhookRetrieveSecretResponse
129
+ from .license_key_created_webhook_event import LicenseKeyCreatedWebhookEvent as LicenseKeyCreatedWebhookEvent
130
+ from .subscription_active_webhook_event import SubscriptionActiveWebhookEvent as SubscriptionActiveWebhookEvent
131
+ from .subscription_failed_webhook_event import SubscriptionFailedWebhookEvent as SubscriptionFailedWebhookEvent
114
132
  from .license_key_instance_update_params import LicenseKeyInstanceUpdateParams as LicenseKeyInstanceUpdateParams
133
+ from .subscription_expired_webhook_event import SubscriptionExpiredWebhookEvent as SubscriptionExpiredWebhookEvent
134
+ from .subscription_on_hold_webhook_event import SubscriptionOnHoldWebhookEvent as SubscriptionOnHoldWebhookEvent
135
+ from .subscription_renewed_webhook_event import SubscriptionRenewedWebhookEvent as SubscriptionRenewedWebhookEvent
115
136
  from .payment_retrieve_line_items_response import PaymentRetrieveLineItemsResponse as PaymentRetrieveLineItemsResponse
137
+ from .subscription_cancelled_webhook_event import SubscriptionCancelledWebhookEvent as SubscriptionCancelledWebhookEvent
116
138
  from .misc_list_supported_countries_response import (
117
139
  MiscListSupportedCountriesResponse as MiscListSupportedCountriesResponse,
118
140
  )
141
+ from .subscription_plan_changed_webhook_event import (
142
+ SubscriptionPlanChangedWebhookEvent as SubscriptionPlanChangedWebhookEvent,
143
+ )
119
144
  from .subscription_retrieve_usage_history_params import (
120
145
  SubscriptionRetrieveUsageHistoryParams as SubscriptionRetrieveUsageHistoryParams,
121
146
  )
@@ -0,0 +1,29 @@
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 .dispute import Dispute
8
+ from .._models import BaseModel
9
+
10
+ __all__ = ["DisputeAcceptedWebhookEvent", "Data"]
11
+
12
+
13
+ class Data(Dispute):
14
+ payload_type: Optional[Literal["Dispute"]] = None
15
+ """The type of payload in the data field"""
16
+
17
+
18
+ class DisputeAcceptedWebhookEvent(BaseModel):
19
+ business_id: str
20
+ """The business identifier"""
21
+
22
+ data: Data
23
+ """Event-specific data"""
24
+
25
+ timestamp: datetime
26
+ """The timestamp of when the event occurred"""
27
+
28
+ type: Literal["dispute.accepted"]
29
+ """The event type"""
@@ -0,0 +1,29 @@
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 .dispute import Dispute
8
+ from .._models import BaseModel
9
+
10
+ __all__ = ["DisputeAcceptedWebhookEvent", "Data"]
11
+
12
+
13
+ class Data(Dispute):
14
+ payload_type: Optional[Literal["Dispute"]] = None
15
+ """The type of payload in the data field"""
16
+
17
+
18
+ class DisputeAcceptedWebhookEvent(BaseModel):
19
+ business_id: str
20
+ """The business identifier"""
21
+
22
+ data: Data
23
+ """Event-specific data"""
24
+
25
+ timestamp: datetime
26
+ """The timestamp of when the event occurred"""
27
+
28
+ type: Literal["dispute.accepted"]
29
+ """The event type"""
@@ -0,0 +1,29 @@
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 .dispute import Dispute
8
+ from .._models import BaseModel
9
+
10
+ __all__ = ["DisputeCancelledWebhookEvent", "Data"]
11
+
12
+
13
+ class Data(Dispute):
14
+ payload_type: Optional[Literal["Dispute"]] = None
15
+ """The type of payload in the data field"""
16
+
17
+
18
+ class DisputeCancelledWebhookEvent(BaseModel):
19
+ business_id: str
20
+ """The business identifier"""
21
+
22
+ data: Data
23
+ """Event-specific data"""
24
+
25
+ timestamp: datetime
26
+ """The timestamp of when the event occurred"""
27
+
28
+ type: Literal["dispute.cancelled"]
29
+ """The event type"""