dodopayments 2.9.1 → 2.10.0

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.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +1 -1
  4. data/lib/dodopayments/internal/transport/base_client.rb +2 -0
  5. data/lib/dodopayments/internal/type/union.rb +21 -7
  6. data/lib/dodopayments/models/abandoned_checkout_detected_webhook_event.rb +4 -16
  7. data/lib/dodopayments/models/abandoned_checkout_recovered_webhook_event.rb +4 -16
  8. data/lib/dodopayments/models/checkout_session_request.rb +15 -2
  9. data/lib/dodopayments/models/credit_added_webhook_event.rb +4 -16
  10. data/lib/dodopayments/models/credit_balance_low_webhook_event.rb +4 -16
  11. data/lib/dodopayments/models/credit_deducted_webhook_event.rb +4 -16
  12. data/lib/dodopayments/models/credit_expired_webhook_event.rb +4 -16
  13. data/lib/dodopayments/models/credit_manual_adjustment_webhook_event.rb +4 -16
  14. data/lib/dodopayments/models/credit_overage_charged_webhook_event.rb +4 -16
  15. data/lib/dodopayments/models/credit_overage_reset_webhook_event.rb +4 -16
  16. data/lib/dodopayments/models/credit_rolled_over_webhook_event.rb +4 -16
  17. data/lib/dodopayments/models/credit_rollover_forfeited_webhook_event.rb +4 -16
  18. data/lib/dodopayments/models/dispute_accepted_webhook_event.rb +4 -16
  19. data/lib/dodopayments/models/dispute_cancelled_webhook_event.rb +4 -16
  20. data/lib/dodopayments/models/dispute_challenged_webhook_event.rb +4 -16
  21. data/lib/dodopayments/models/dispute_expired_webhook_event.rb +4 -16
  22. data/lib/dodopayments/models/dispute_lost_webhook_event.rb +4 -16
  23. data/lib/dodopayments/models/dispute_opened_webhook_event.rb +4 -16
  24. data/lib/dodopayments/models/dispute_won_webhook_event.rb +4 -16
  25. data/lib/dodopayments/models/dunning_recovered_webhook_event.rb +4 -16
  26. data/lib/dodopayments/models/dunning_started_webhook_event.rb +4 -16
  27. data/lib/dodopayments/models/entitlement_grant_created_webhook_event.rb +4 -16
  28. data/lib/dodopayments/models/entitlement_grant_delivered_webhook_event.rb +4 -16
  29. data/lib/dodopayments/models/entitlement_grant_failed_webhook_event.rb +4 -16
  30. data/lib/dodopayments/models/entitlement_grant_revoked_webhook_event.rb +4 -16
  31. data/lib/dodopayments/models/license_key_created_webhook_event.rb +4 -16
  32. data/lib/dodopayments/models/payment.rb +153 -3
  33. data/lib/dodopayments/models/payment_cancelled_webhook_event.rb +4 -16
  34. data/lib/dodopayments/models/payment_create_params.rb +15 -3
  35. data/lib/dodopayments/models/payment_create_response.rb +14 -3
  36. data/lib/dodopayments/models/payment_failed_webhook_event.rb +4 -16
  37. data/lib/dodopayments/models/payment_processing_webhook_event.rb +4 -16
  38. data/lib/dodopayments/models/payment_succeeded_webhook_event.rb +4 -16
  39. data/lib/dodopayments/models/payout_list_response.rb +6 -3
  40. data/lib/dodopayments/models/price.rb +20 -48
  41. data/lib/dodopayments/models/product.rb +3 -3
  42. data/lib/dodopayments/models/product_create_params.rb +3 -3
  43. data/lib/dodopayments/models/product_item_req.rb +42 -1
  44. data/lib/dodopayments/models/product_update_params.rb +3 -3
  45. data/lib/dodopayments/models/refund_failed_webhook_event.rb +4 -16
  46. data/lib/dodopayments/models/refund_succeeded_webhook_event.rb +4 -16
  47. data/lib/dodopayments/models/subscription.rb +153 -5
  48. data/lib/dodopayments/models/subscription_active_webhook_event.rb +4 -16
  49. data/lib/dodopayments/models/subscription_cancelled_webhook_event.rb +4 -16
  50. data/lib/dodopayments/models/subscription_create_params.rb +15 -3
  51. data/lib/dodopayments/models/subscription_create_response.rb +14 -3
  52. data/lib/dodopayments/models/subscription_expired_webhook_event.rb +4 -16
  53. data/lib/dodopayments/models/subscription_failed_webhook_event.rb +4 -16
  54. data/lib/dodopayments/models/subscription_list_response.rb +36 -5
  55. data/lib/dodopayments/models/subscription_on_hold_webhook_event.rb +4 -16
  56. data/lib/dodopayments/models/subscription_plan_changed_webhook_event.rb +4 -16
  57. data/lib/dodopayments/models/subscription_preview_change_plan_response.rb +21 -49
  58. data/lib/dodopayments/models/subscription_renewed_webhook_event.rb +4 -16
  59. data/lib/dodopayments/models/subscription_update_payment_method_params.rb +12 -30
  60. data/lib/dodopayments/models/subscription_updated_webhook_event.rb +4 -16
  61. data/lib/dodopayments/models/unsafe_unwrap_webhook_event.rb +41 -39
  62. data/lib/dodopayments/models/unwrap_webhook_event.rb +41 -39
  63. data/lib/dodopayments/models/update_subscription_plan_req.rb +17 -6
  64. data/lib/dodopayments/models/webhook_event_type.rb +3 -0
  65. data/lib/dodopayments/models/webhook_payload.rb +52 -143
  66. data/lib/dodopayments/resources/checkout_sessions.rb +8 -4
  67. data/lib/dodopayments/resources/payments.rb +4 -2
  68. data/lib/dodopayments/resources/subscriptions.rb +12 -6
  69. data/lib/dodopayments/version.rb +1 -1
  70. data/rbi/dodopayments/models/abandoned_checkout_detected_webhook_event.rbi +4 -40
  71. data/rbi/dodopayments/models/abandoned_checkout_recovered_webhook_event.rbi +4 -40
  72. data/rbi/dodopayments/models/checkout_session_request.rbi +14 -0
  73. data/rbi/dodopayments/models/credit_added_webhook_event.rbi +4 -29
  74. data/rbi/dodopayments/models/credit_balance_low_webhook_event.rbi +4 -33
  75. data/rbi/dodopayments/models/credit_deducted_webhook_event.rbi +4 -33
  76. data/rbi/dodopayments/models/credit_expired_webhook_event.rbi +4 -33
  77. data/rbi/dodopayments/models/credit_manual_adjustment_webhook_event.rbi +4 -39
  78. data/rbi/dodopayments/models/credit_overage_charged_webhook_event.rbi +4 -36
  79. data/rbi/dodopayments/models/credit_overage_reset_webhook_event.rbi +4 -36
  80. data/rbi/dodopayments/models/credit_rolled_over_webhook_event.rbi +4 -33
  81. data/rbi/dodopayments/models/credit_rollover_forfeited_webhook_event.rbi +4 -40
  82. data/rbi/dodopayments/models/dispute_accepted_webhook_event.rbi +4 -33
  83. data/rbi/dodopayments/models/dispute_cancelled_webhook_event.rbi +4 -33
  84. data/rbi/dodopayments/models/dispute_challenged_webhook_event.rbi +4 -34
  85. data/rbi/dodopayments/models/dispute_expired_webhook_event.rbi +4 -33
  86. data/rbi/dodopayments/models/dispute_lost_webhook_event.rbi +4 -29
  87. data/rbi/dodopayments/models/dispute_opened_webhook_event.rbi +4 -33
  88. data/rbi/dodopayments/models/dispute_won_webhook_event.rbi +4 -29
  89. data/rbi/dodopayments/models/dunning_recovered_webhook_event.rbi +4 -33
  90. data/rbi/dodopayments/models/dunning_started_webhook_event.rbi +4 -33
  91. data/rbi/dodopayments/models/entitlement_grant_created_webhook_event.rbi +4 -40
  92. data/rbi/dodopayments/models/entitlement_grant_delivered_webhook_event.rbi +4 -40
  93. data/rbi/dodopayments/models/entitlement_grant_failed_webhook_event.rbi +4 -39
  94. data/rbi/dodopayments/models/entitlement_grant_revoked_webhook_event.rbi +4 -40
  95. data/rbi/dodopayments/models/license_key_created_webhook_event.rbi +4 -34
  96. data/rbi/dodopayments/models/payment.rbi +170 -2
  97. data/rbi/dodopayments/models/payment_cancelled_webhook_event.rbi +4 -33
  98. data/rbi/dodopayments/models/payment_create_params.rbi +14 -2
  99. data/rbi/dodopayments/models/payment_create_response.rbi +12 -2
  100. data/rbi/dodopayments/models/payment_failed_webhook_event.rbi +4 -33
  101. data/rbi/dodopayments/models/payment_processing_webhook_event.rbi +4 -34
  102. data/rbi/dodopayments/models/payment_succeeded_webhook_event.rbi +4 -33
  103. data/rbi/dodopayments/models/price.rbi +18 -90
  104. data/rbi/dodopayments/models/product_item_req.rbi +74 -3
  105. data/rbi/dodopayments/models/refund_failed_webhook_event.rbi +4 -31
  106. data/rbi/dodopayments/models/refund_succeeded_webhook_event.rbi +4 -33
  107. data/rbi/dodopayments/models/subscription.rbi +173 -4
  108. data/rbi/dodopayments/models/subscription_active_webhook_event.rbi +4 -36
  109. data/rbi/dodopayments/models/subscription_cancelled_webhook_event.rbi +4 -36
  110. data/rbi/dodopayments/models/subscription_create_params.rbi +14 -2
  111. data/rbi/dodopayments/models/subscription_create_response.rbi +12 -2
  112. data/rbi/dodopayments/models/subscription_expired_webhook_event.rbi +4 -36
  113. data/rbi/dodopayments/models/subscription_failed_webhook_event.rbi +4 -36
  114. data/rbi/dodopayments/models/subscription_list_response.rbi +67 -4
  115. data/rbi/dodopayments/models/subscription_on_hold_webhook_event.rbi +4 -36
  116. data/rbi/dodopayments/models/subscription_plan_changed_webhook_event.rbi +4 -40
  117. data/rbi/dodopayments/models/subscription_preview_change_plan_response.rbi +18 -123
  118. data/rbi/dodopayments/models/subscription_renewed_webhook_event.rbi +4 -36
  119. data/rbi/dodopayments/models/subscription_update_payment_method_params.rbi +12 -96
  120. data/rbi/dodopayments/models/subscription_updated_webhook_event.rbi +4 -36
  121. data/rbi/dodopayments/models/update_subscription_plan_req.rbi +18 -8
  122. data/rbi/dodopayments/models/webhook_event_type.rbi +15 -0
  123. data/rbi/dodopayments/models/webhook_payload.rbi +46 -466
  124. data/rbi/dodopayments/resources/checkout_sessions.rbi +12 -0
  125. data/rbi/dodopayments/resources/payments.rbi +6 -1
  126. data/rbi/dodopayments/resources/subscriptions.rbi +22 -9
  127. data/sig/dodopayments/models/abandoned_checkout_detected_webhook_event.rbs +4 -14
  128. data/sig/dodopayments/models/abandoned_checkout_recovered_webhook_event.rbs +4 -14
  129. data/sig/dodopayments/models/checkout_session_request.rbs +5 -0
  130. data/sig/dodopayments/models/credit_added_webhook_event.rbs +4 -14
  131. data/sig/dodopayments/models/credit_balance_low_webhook_event.rbs +4 -14
  132. data/sig/dodopayments/models/credit_deducted_webhook_event.rbs +4 -14
  133. data/sig/dodopayments/models/credit_expired_webhook_event.rbs +4 -14
  134. data/sig/dodopayments/models/credit_manual_adjustment_webhook_event.rbs +4 -14
  135. data/sig/dodopayments/models/credit_overage_charged_webhook_event.rbs +4 -14
  136. data/sig/dodopayments/models/credit_overage_reset_webhook_event.rbs +4 -14
  137. data/sig/dodopayments/models/credit_rolled_over_webhook_event.rbs +4 -14
  138. data/sig/dodopayments/models/credit_rollover_forfeited_webhook_event.rbs +4 -14
  139. data/sig/dodopayments/models/dispute_accepted_webhook_event.rbs +4 -14
  140. data/sig/dodopayments/models/dispute_cancelled_webhook_event.rbs +4 -14
  141. data/sig/dodopayments/models/dispute_challenged_webhook_event.rbs +4 -14
  142. data/sig/dodopayments/models/dispute_expired_webhook_event.rbs +4 -14
  143. data/sig/dodopayments/models/dispute_lost_webhook_event.rbs +4 -14
  144. data/sig/dodopayments/models/dispute_opened_webhook_event.rbs +4 -14
  145. data/sig/dodopayments/models/dispute_won_webhook_event.rbs +4 -14
  146. data/sig/dodopayments/models/dunning_recovered_webhook_event.rbs +4 -14
  147. data/sig/dodopayments/models/dunning_started_webhook_event.rbs +4 -14
  148. data/sig/dodopayments/models/entitlement_grant_created_webhook_event.rbs +4 -14
  149. data/sig/dodopayments/models/entitlement_grant_delivered_webhook_event.rbs +4 -14
  150. data/sig/dodopayments/models/entitlement_grant_failed_webhook_event.rbs +4 -14
  151. data/sig/dodopayments/models/entitlement_grant_revoked_webhook_event.rbs +4 -14
  152. data/sig/dodopayments/models/license_key_created_webhook_event.rbs +4 -14
  153. data/sig/dodopayments/models/payment.rbs +97 -0
  154. data/sig/dodopayments/models/payment_cancelled_webhook_event.rbs +4 -14
  155. data/sig/dodopayments/models/payment_create_params.rbs +5 -0
  156. data/sig/dodopayments/models/payment_create_response.rbs +5 -0
  157. data/sig/dodopayments/models/payment_failed_webhook_event.rbs +4 -14
  158. data/sig/dodopayments/models/payment_processing_webhook_event.rbs +4 -14
  159. data/sig/dodopayments/models/payment_succeeded_webhook_event.rbs +4 -14
  160. data/sig/dodopayments/models/price.rbs +15 -45
  161. data/sig/dodopayments/models/product_item_req.rbs +27 -3
  162. data/sig/dodopayments/models/refund_failed_webhook_event.rbs +4 -14
  163. data/sig/dodopayments/models/refund_succeeded_webhook_event.rbs +4 -14
  164. data/sig/dodopayments/models/subscription.rbs +97 -0
  165. data/sig/dodopayments/models/subscription_active_webhook_event.rbs +4 -14
  166. data/sig/dodopayments/models/subscription_cancelled_webhook_event.rbs +4 -14
  167. data/sig/dodopayments/models/subscription_create_params.rbs +5 -0
  168. data/sig/dodopayments/models/subscription_create_response.rbs +5 -0
  169. data/sig/dodopayments/models/subscription_expired_webhook_event.rbs +4 -14
  170. data/sig/dodopayments/models/subscription_failed_webhook_event.rbs +4 -14
  171. data/sig/dodopayments/models/subscription_list_response.rbs +24 -0
  172. data/sig/dodopayments/models/subscription_on_hold_webhook_event.rbs +4 -14
  173. data/sig/dodopayments/models/subscription_plan_changed_webhook_event.rbs +4 -14
  174. data/sig/dodopayments/models/subscription_preview_change_plan_response.rbs +15 -45
  175. data/sig/dodopayments/models/subscription_renewed_webhook_event.rbs +4 -14
  176. data/sig/dodopayments/models/subscription_update_payment_method_params.rbs +8 -48
  177. data/sig/dodopayments/models/subscription_updated_webhook_event.rbs +4 -14
  178. data/sig/dodopayments/models/update_subscription_plan_req.rbs +5 -0
  179. data/sig/dodopayments/models/webhook_event_type.rbs +6 -0
  180. data/sig/dodopayments/models/webhook_payload.rbs +50 -213
  181. data/sig/dodopayments/resources/checkout_sessions.rbs +2 -0
  182. data/sig/dodopayments/resources/payments.rbs +1 -0
  183. data/sig/dodopayments/resources/subscriptions.rbs +3 -0
  184. metadata +2 -2
@@ -30,11 +30,7 @@ module Dodopayments
30
30
  attr_accessor :timestamp
31
31
 
32
32
  # The event type
33
- sig do
34
- returns(
35
- Dodopayments::EntitlementGrantFailedWebhookEvent::Type::TaggedSymbol
36
- )
37
- end
33
+ sig { returns(Symbol) }
38
34
  attr_accessor :type
39
35
 
40
36
  sig do
@@ -42,7 +38,7 @@ module Dodopayments
42
38
  business_id: String,
43
39
  data: Dodopayments::Entitlements::EntitlementGrant::OrHash,
44
40
  timestamp: Time,
45
- type: Dodopayments::EntitlementGrantFailedWebhookEvent::Type::OrSymbol
41
+ type: Symbol
46
42
  ).returns(T.attached_class)
47
43
  end
48
44
  def self.new(
@@ -54,7 +50,7 @@ module Dodopayments
54
50
  # The timestamp of when the event occurred
55
51
  timestamp:,
56
52
  # The event type
57
- type:
53
+ type: :"entitlement_grant.failed"
58
54
  )
59
55
  end
60
56
 
@@ -64,43 +60,12 @@ module Dodopayments
64
60
  business_id: String,
65
61
  data: Dodopayments::Entitlements::EntitlementGrant,
66
62
  timestamp: Time,
67
- type:
68
- Dodopayments::EntitlementGrantFailedWebhookEvent::Type::TaggedSymbol
63
+ type: Symbol
69
64
  }
70
65
  )
71
66
  end
72
67
  def to_hash
73
68
  end
74
-
75
- # The event type
76
- module Type
77
- extend Dodopayments::Internal::Type::Enum
78
-
79
- TaggedSymbol =
80
- T.type_alias do
81
- T.all(
82
- Symbol,
83
- Dodopayments::EntitlementGrantFailedWebhookEvent::Type
84
- )
85
- end
86
- OrSymbol = T.type_alias { T.any(Symbol, String) }
87
-
88
- ENTITLEMENT_GRANT_FAILED =
89
- T.let(
90
- :"entitlement_grant.failed",
91
- Dodopayments::EntitlementGrantFailedWebhookEvent::Type::TaggedSymbol
92
- )
93
-
94
- sig do
95
- override.returns(
96
- T::Array[
97
- Dodopayments::EntitlementGrantFailedWebhookEvent::Type::TaggedSymbol
98
- ]
99
- )
100
- end
101
- def self.values
102
- end
103
- end
104
69
  end
105
70
  end
106
71
  end
@@ -30,11 +30,7 @@ module Dodopayments
30
30
  attr_accessor :timestamp
31
31
 
32
32
  # The event type
33
- sig do
34
- returns(
35
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type::TaggedSymbol
36
- )
37
- end
33
+ sig { returns(Symbol) }
38
34
  attr_accessor :type
39
35
 
40
36
  sig do
@@ -42,8 +38,7 @@ module Dodopayments
42
38
  business_id: String,
43
39
  data: Dodopayments::Entitlements::EntitlementGrant::OrHash,
44
40
  timestamp: Time,
45
- type:
46
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type::OrSymbol
41
+ type: Symbol
47
42
  ).returns(T.attached_class)
48
43
  end
49
44
  def self.new(
@@ -55,7 +50,7 @@ module Dodopayments
55
50
  # The timestamp of when the event occurred
56
51
  timestamp:,
57
52
  # The event type
58
- type:
53
+ type: :"entitlement_grant.revoked"
59
54
  )
60
55
  end
61
56
 
@@ -65,43 +60,12 @@ module Dodopayments
65
60
  business_id: String,
66
61
  data: Dodopayments::Entitlements::EntitlementGrant,
67
62
  timestamp: Time,
68
- type:
69
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type::TaggedSymbol
63
+ type: Symbol
70
64
  }
71
65
  )
72
66
  end
73
67
  def to_hash
74
68
  end
75
-
76
- # The event type
77
- module Type
78
- extend Dodopayments::Internal::Type::Enum
79
-
80
- TaggedSymbol =
81
- T.type_alias do
82
- T.all(
83
- Symbol,
84
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type
85
- )
86
- end
87
- OrSymbol = T.type_alias { T.any(Symbol, String) }
88
-
89
- ENTITLEMENT_GRANT_REVOKED =
90
- T.let(
91
- :"entitlement_grant.revoked",
92
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type::TaggedSymbol
93
- )
94
-
95
- sig do
96
- override.returns(
97
- T::Array[
98
- Dodopayments::EntitlementGrantRevokedWebhookEvent::Type::TaggedSymbol
99
- ]
100
- )
101
- end
102
- def self.values
103
- end
104
- end
105
69
  end
106
70
  end
107
71
  end
@@ -26,9 +26,7 @@ module Dodopayments
26
26
  attr_accessor :timestamp
27
27
 
28
28
  # The event type
29
- sig do
30
- returns(Dodopayments::LicenseKeyCreatedWebhookEvent::Type::TaggedSymbol)
31
- end
29
+ sig { returns(Symbol) }
32
30
  attr_accessor :type
33
31
 
34
32
  sig do
@@ -36,7 +34,7 @@ module Dodopayments
36
34
  business_id: String,
37
35
  data: Dodopayments::LicenseKey::OrHash,
38
36
  timestamp: Time,
39
- type: Dodopayments::LicenseKeyCreatedWebhookEvent::Type::OrSymbol
37
+ type: Symbol
40
38
  ).returns(T.attached_class)
41
39
  end
42
40
  def self.new(
@@ -46,7 +44,7 @@ module Dodopayments
46
44
  # The timestamp of when the event occurred
47
45
  timestamp:,
48
46
  # The event type
49
- type:
47
+ type: :"license_key.created"
50
48
  )
51
49
  end
52
50
 
@@ -56,40 +54,12 @@ module Dodopayments
56
54
  business_id: String,
57
55
  data: Dodopayments::LicenseKey,
58
56
  timestamp: Time,
59
- type:
60
- Dodopayments::LicenseKeyCreatedWebhookEvent::Type::TaggedSymbol
57
+ type: Symbol
61
58
  }
62
59
  )
63
60
  end
64
61
  def to_hash
65
62
  end
66
-
67
- # The event type
68
- module Type
69
- extend Dodopayments::Internal::Type::Enum
70
-
71
- TaggedSymbol =
72
- T.type_alias do
73
- T.all(Symbol, Dodopayments::LicenseKeyCreatedWebhookEvent::Type)
74
- end
75
- OrSymbol = T.type_alias { T.any(Symbol, String) }
76
-
77
- LICENSE_KEY_CREATED =
78
- T.let(
79
- :"license_key.created",
80
- Dodopayments::LicenseKeyCreatedWebhookEvent::Type::TaggedSymbol
81
- )
82
-
83
- sig do
84
- override.returns(
85
- T::Array[
86
- Dodopayments::LicenseKeyCreatedWebhookEvent::Type::TaggedSymbol
87
- ]
88
- )
89
- end
90
- def self.values
91
- end
92
- end
93
63
  end
94
64
  end
95
65
  end
@@ -106,10 +106,14 @@ module Dodopayments
106
106
  sig { returns(T.nilable(T::Array[Dodopayments::CustomFieldResponse])) }
107
107
  attr_accessor :custom_field_responses
108
108
 
109
- # The discount id if discount is applied
109
+ # DEPRECATED: Use discounts instead. Returns the first discount's ID if present.
110
110
  sig { returns(T.nilable(String)) }
111
111
  attr_accessor :discount_id
112
112
 
113
+ # All stacked discounts applied, ordered by position
114
+ sig { returns(T.nilable(T::Array[Dodopayments::Payment::Discount])) }
115
+ attr_accessor :discounts
116
+
113
117
  # An error code if the payment failed
114
118
  sig { returns(T.nilable(String)) }
115
119
  attr_accessor :error_code
@@ -196,6 +200,8 @@ module Dodopayments
196
200
  custom_field_responses:
197
201
  T.nilable(T::Array[Dodopayments::CustomFieldResponse::OrHash]),
198
202
  discount_id: T.nilable(String),
203
+ discounts:
204
+ T.nilable(T::Array[Dodopayments::Payment::Discount::OrHash]),
199
205
  error_code: T.nilable(String),
200
206
  error_message: T.nilable(String),
201
207
  invoice_id: T.nilable(String),
@@ -262,8 +268,10 @@ module Dodopayments
262
268
  checkout_session_id: nil,
263
269
  # Customer's responses to custom fields collected during checkout
264
270
  custom_field_responses: nil,
265
- # The discount id if discount is applied
271
+ # DEPRECATED: Use discounts instead. Returns the first discount's ID if present.
266
272
  discount_id: nil,
273
+ # All stacked discounts applied, ordered by position
274
+ discounts: nil,
267
275
  # An error code if the payment failed
268
276
  error_code: nil,
269
277
  # An error message if the payment failed
@@ -325,6 +333,7 @@ module Dodopayments
325
333
  custom_field_responses:
326
334
  T.nilable(T::Array[Dodopayments::CustomFieldResponse]),
327
335
  discount_id: T.nilable(String),
336
+ discounts: T.nilable(T::Array[Dodopayments::Payment::Discount]),
328
337
  error_code: T.nilable(String),
329
338
  error_message: T.nilable(String),
330
339
  invoice_id: T.nilable(String),
@@ -347,6 +356,165 @@ module Dodopayments
347
356
  def to_hash
348
357
  end
349
358
 
359
+ class Discount < Dodopayments::Internal::Type::BaseModel
360
+ OrHash =
361
+ T.type_alias do
362
+ T.any(
363
+ Dodopayments::Payment::Discount,
364
+ Dodopayments::Internal::AnyHash
365
+ )
366
+ end
367
+
368
+ # The discount amount (basis points for percentage, USD cents for flat)
369
+ sig { returns(Integer) }
370
+ attr_accessor :amount
371
+
372
+ # The business this discount belongs to
373
+ sig { returns(String) }
374
+ attr_accessor :business_id
375
+
376
+ # The discount code
377
+ sig { returns(String) }
378
+ attr_accessor :code
379
+
380
+ # Timestamp when the discount was created
381
+ sig { returns(Time) }
382
+ attr_accessor :created_at
383
+
384
+ # The unique discount ID
385
+ sig { returns(String) }
386
+ attr_accessor :discount_id
387
+
388
+ # Additional metadata
389
+ sig { returns(T::Hash[Symbol, String]) }
390
+ attr_accessor :metadata
391
+
392
+ # Position of this discount in the stack (0-based)
393
+ sig { returns(Integer) }
394
+ attr_accessor :position
395
+
396
+ # Whether this discount should be preserved when a subscription changes plans
397
+ sig { returns(T::Boolean) }
398
+ attr_accessor :preserve_on_plan_change
399
+
400
+ # List of product IDs to which this discount is restricted
401
+ sig { returns(T::Array[String]) }
402
+ attr_accessor :restricted_to
403
+
404
+ # How many times this discount has been used
405
+ sig { returns(Integer) }
406
+ attr_accessor :times_used
407
+
408
+ # The type of discount
409
+ sig { returns(Dodopayments::DiscountType::TaggedSymbol) }
410
+ attr_accessor :type
411
+
412
+ # Remaining billing cycles for this discount on this subscription (None for
413
+ # one-time payments)
414
+ sig { returns(T.nilable(Integer)) }
415
+ attr_accessor :cycles_remaining
416
+
417
+ # Optional date/time after which discount is expired
418
+ sig { returns(T.nilable(Time)) }
419
+ attr_accessor :expires_at
420
+
421
+ # Name for the Discount
422
+ sig { returns(T.nilable(String)) }
423
+ attr_accessor :name
424
+
425
+ # Number of subscription billing cycles this discount is valid for
426
+ sig { returns(T.nilable(Integer)) }
427
+ attr_accessor :subscription_cycles
428
+
429
+ # Usage limit for this discount, if any
430
+ sig { returns(T.nilable(Integer)) }
431
+ attr_accessor :usage_limit
432
+
433
+ # Response struct for a discount with its position in a stack and optional
434
+ # cycle-tracking information (for subscriptions).
435
+ sig do
436
+ params(
437
+ amount: Integer,
438
+ business_id: String,
439
+ code: String,
440
+ created_at: Time,
441
+ discount_id: String,
442
+ metadata: T::Hash[Symbol, String],
443
+ position: Integer,
444
+ preserve_on_plan_change: T::Boolean,
445
+ restricted_to: T::Array[String],
446
+ times_used: Integer,
447
+ type: Dodopayments::DiscountType::OrSymbol,
448
+ cycles_remaining: T.nilable(Integer),
449
+ expires_at: T.nilable(Time),
450
+ name: T.nilable(String),
451
+ subscription_cycles: T.nilable(Integer),
452
+ usage_limit: T.nilable(Integer)
453
+ ).returns(T.attached_class)
454
+ end
455
+ def self.new(
456
+ # The discount amount (basis points for percentage, USD cents for flat)
457
+ amount:,
458
+ # The business this discount belongs to
459
+ business_id:,
460
+ # The discount code
461
+ code:,
462
+ # Timestamp when the discount was created
463
+ created_at:,
464
+ # The unique discount ID
465
+ discount_id:,
466
+ # Additional metadata
467
+ metadata:,
468
+ # Position of this discount in the stack (0-based)
469
+ position:,
470
+ # Whether this discount should be preserved when a subscription changes plans
471
+ preserve_on_plan_change:,
472
+ # List of product IDs to which this discount is restricted
473
+ restricted_to:,
474
+ # How many times this discount has been used
475
+ times_used:,
476
+ # The type of discount
477
+ type:,
478
+ # Remaining billing cycles for this discount on this subscription (None for
479
+ # one-time payments)
480
+ cycles_remaining: nil,
481
+ # Optional date/time after which discount is expired
482
+ expires_at: nil,
483
+ # Name for the Discount
484
+ name: nil,
485
+ # Number of subscription billing cycles this discount is valid for
486
+ subscription_cycles: nil,
487
+ # Usage limit for this discount, if any
488
+ usage_limit: nil
489
+ )
490
+ end
491
+
492
+ sig do
493
+ override.returns(
494
+ {
495
+ amount: Integer,
496
+ business_id: String,
497
+ code: String,
498
+ created_at: Time,
499
+ discount_id: String,
500
+ metadata: T::Hash[Symbol, String],
501
+ position: Integer,
502
+ preserve_on_plan_change: T::Boolean,
503
+ restricted_to: T::Array[String],
504
+ times_used: Integer,
505
+ type: Dodopayments::DiscountType::TaggedSymbol,
506
+ cycles_remaining: T.nilable(Integer),
507
+ expires_at: T.nilable(Time),
508
+ name: T.nilable(String),
509
+ subscription_cycles: T.nilable(Integer),
510
+ usage_limit: T.nilable(Integer)
511
+ }
512
+ )
513
+ end
514
+ def to_hash
515
+ end
516
+ end
517
+
350
518
  class ProductCart < Dodopayments::Internal::Type::BaseModel
351
519
  OrHash =
352
520
  T.type_alias do
@@ -26,9 +26,7 @@ module Dodopayments
26
26
  attr_accessor :timestamp
27
27
 
28
28
  # The event type
29
- sig do
30
- returns(Dodopayments::PaymentCancelledWebhookEvent::Type::TaggedSymbol)
31
- end
29
+ sig { returns(Symbol) }
32
30
  attr_accessor :type
33
31
 
34
32
  sig do
@@ -36,7 +34,7 @@ module Dodopayments
36
34
  business_id: String,
37
35
  data: Dodopayments::Payment::OrHash,
38
36
  timestamp: Time,
39
- type: Dodopayments::PaymentCancelledWebhookEvent::Type::OrSymbol
37
+ type: Symbol
40
38
  ).returns(T.attached_class)
41
39
  end
42
40
  def self.new(
@@ -46,7 +44,7 @@ module Dodopayments
46
44
  # The timestamp of when the event occurred
47
45
  timestamp:,
48
46
  # The event type
49
- type:
47
+ type: :"payment.cancelled"
50
48
  )
51
49
  end
52
50
 
@@ -56,39 +54,12 @@ module Dodopayments
56
54
  business_id: String,
57
55
  data: Dodopayments::Payment,
58
56
  timestamp: Time,
59
- type: Dodopayments::PaymentCancelledWebhookEvent::Type::TaggedSymbol
57
+ type: Symbol
60
58
  }
61
59
  )
62
60
  end
63
61
  def to_hash
64
62
  end
65
-
66
- # The event type
67
- module Type
68
- extend Dodopayments::Internal::Type::Enum
69
-
70
- TaggedSymbol =
71
- T.type_alias do
72
- T.all(Symbol, Dodopayments::PaymentCancelledWebhookEvent::Type)
73
- end
74
- OrSymbol = T.type_alias { T.any(Symbol, String) }
75
-
76
- PAYMENT_CANCELLED =
77
- T.let(
78
- :"payment.cancelled",
79
- Dodopayments::PaymentCancelledWebhookEvent::Type::TaggedSymbol
80
- )
81
-
82
- sig do
83
- override.returns(
84
- T::Array[
85
- Dodopayments::PaymentCancelledWebhookEvent::Type::TaggedSymbol
86
- ]
87
- )
88
- end
89
- def self.values
90
- end
91
- end
92
63
  end
93
64
  end
94
65
  end
@@ -54,10 +54,16 @@ module Dodopayments
54
54
  sig { returns(T.nilable(Dodopayments::Currency::OrSymbol)) }
55
55
  attr_accessor :billing_currency
56
56
 
57
- # Discount Code to apply to the transaction
57
+ # DEPRECATED: Use discount_codes instead. Cannot be used together with
58
+ # discount_codes.
58
59
  sig { returns(T.nilable(String)) }
59
60
  attr_accessor :discount_code
60
61
 
62
+ # Stacked discount codes to apply, in order of application. Max 20. Cannot be used
63
+ # together with discount_code.
64
+ sig { returns(T.nilable(T::Array[String])) }
65
+ attr_accessor :discount_codes
66
+
61
67
  # Override merchant default 3DS behaviour for this payment
62
68
  sig { returns(T.nilable(T::Boolean)) }
63
69
  attr_accessor :force_3ds
@@ -132,6 +138,7 @@ module Dodopayments
132
138
  T.nilable(T::Array[Dodopayments::PaymentMethodTypes::OrSymbol]),
133
139
  billing_currency: T.nilable(Dodopayments::Currency::OrSymbol),
134
140
  discount_code: T.nilable(String),
141
+ discount_codes: T.nilable(T::Array[String]),
135
142
  force_3ds: T.nilable(T::Boolean),
136
143
  metadata: T::Hash[Symbol, String],
137
144
  payment_link: T.nilable(T::Boolean),
@@ -165,8 +172,12 @@ module Dodopayments
165
172
  # Fix the currency in which the end customer is billed. If Dodo Payments cannot
166
173
  # support that currency for this transaction, it will not proceed
167
174
  billing_currency: nil,
168
- # Discount Code to apply to the transaction
175
+ # DEPRECATED: Use discount_codes instead. Cannot be used together with
176
+ # discount_codes.
169
177
  discount_code: nil,
178
+ # Stacked discount codes to apply, in order of application. Max 20. Cannot be used
179
+ # together with discount_code.
180
+ discount_codes: nil,
170
181
  # Override merchant default 3DS behaviour for this payment
171
182
  force_3ds: nil,
172
183
  # Additional metadata associated with the payment. Defaults to empty if not
@@ -214,6 +225,7 @@ module Dodopayments
214
225
  T.nilable(T::Array[Dodopayments::PaymentMethodTypes::OrSymbol]),
215
226
  billing_currency: T.nilable(Dodopayments::Currency::OrSymbol),
216
227
  discount_code: T.nilable(String),
228
+ discount_codes: T.nilable(T::Array[String]),
217
229
  force_3ds: T.nilable(T::Boolean),
218
230
  metadata: T::Hash[Symbol, String],
219
231
  payment_link: T.nilable(T::Boolean),
@@ -37,10 +37,15 @@ module Dodopayments
37
37
  sig { returns(Integer) }
38
38
  attr_accessor :total_amount
39
39
 
40
- # The discount id if discount is applied
40
+ # DEPRECATED: Use discount_ids instead. Returns the first discount's ID if
41
+ # present.
41
42
  sig { returns(T.nilable(String)) }
42
43
  attr_accessor :discount_id
43
44
 
45
+ # All stacked discount IDs applied, in order of application
46
+ sig { returns(T.nilable(T::Array[String])) }
47
+ attr_accessor :discount_ids
48
+
44
49
  # Expiry timestamp of the payment link
45
50
  sig { returns(T.nilable(Time)) }
46
51
  attr_accessor :expires_on
@@ -61,6 +66,7 @@ module Dodopayments
61
66
  payment_id: String,
62
67
  total_amount: Integer,
63
68
  discount_id: T.nilable(String),
69
+ discount_ids: T.nilable(T::Array[String]),
64
70
  expires_on: T.nilable(Time),
65
71
  payment_link: T.nilable(String),
66
72
  product_cart:
@@ -79,8 +85,11 @@ module Dodopayments
79
85
  payment_id:,
80
86
  # Total amount of the payment in smallest currency unit (e.g. cents)
81
87
  total_amount:,
82
- # The discount id if discount is applied
88
+ # DEPRECATED: Use discount_ids instead. Returns the first discount's ID if
89
+ # present.
83
90
  discount_id: nil,
91
+ # All stacked discount IDs applied, in order of application
92
+ discount_ids: nil,
84
93
  # Expiry timestamp of the payment link
85
94
  expires_on: nil,
86
95
  # Optional URL to a hosted payment page
@@ -99,6 +108,7 @@ module Dodopayments
99
108
  payment_id: String,
100
109
  total_amount: Integer,
101
110
  discount_id: T.nilable(String),
111
+ discount_ids: T.nilable(T::Array[String]),
102
112
  expires_on: T.nilable(Time),
103
113
  payment_link: T.nilable(String),
104
114
  product_cart:
@@ -26,9 +26,7 @@ module Dodopayments
26
26
  attr_accessor :timestamp
27
27
 
28
28
  # The event type
29
- sig do
30
- returns(Dodopayments::PaymentFailedWebhookEvent::Type::TaggedSymbol)
31
- end
29
+ sig { returns(Symbol) }
32
30
  attr_accessor :type
33
31
 
34
32
  sig do
@@ -36,7 +34,7 @@ module Dodopayments
36
34
  business_id: String,
37
35
  data: Dodopayments::Payment::OrHash,
38
36
  timestamp: Time,
39
- type: Dodopayments::PaymentFailedWebhookEvent::Type::OrSymbol
37
+ type: Symbol
40
38
  ).returns(T.attached_class)
41
39
  end
42
40
  def self.new(
@@ -46,7 +44,7 @@ module Dodopayments
46
44
  # The timestamp of when the event occurred
47
45
  timestamp:,
48
46
  # The event type
49
- type:
47
+ type: :"payment.failed"
50
48
  )
51
49
  end
52
50
 
@@ -56,39 +54,12 @@ module Dodopayments
56
54
  business_id: String,
57
55
  data: Dodopayments::Payment,
58
56
  timestamp: Time,
59
- type: Dodopayments::PaymentFailedWebhookEvent::Type::TaggedSymbol
57
+ type: Symbol
60
58
  }
61
59
  )
62
60
  end
63
61
  def to_hash
64
62
  end
65
-
66
- # The event type
67
- module Type
68
- extend Dodopayments::Internal::Type::Enum
69
-
70
- TaggedSymbol =
71
- T.type_alias do
72
- T.all(Symbol, Dodopayments::PaymentFailedWebhookEvent::Type)
73
- end
74
- OrSymbol = T.type_alias { T.any(Symbol, String) }
75
-
76
- PAYMENT_FAILED =
77
- T.let(
78
- :"payment.failed",
79
- Dodopayments::PaymentFailedWebhookEvent::Type::TaggedSymbol
80
- )
81
-
82
- sig do
83
- override.returns(
84
- T::Array[
85
- Dodopayments::PaymentFailedWebhookEvent::Type::TaggedSymbol
86
- ]
87
- )
88
- end
89
- def self.values
90
- end
91
- end
92
63
  end
93
64
  end
94
65
  end