stripe 13.0.2 → 13.1.0.pre.beta.2

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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1370 -654
  3. data/OPENAPI_VERSION +1 -1
  4. data/README.md +1 -1
  5. data/VERSION +1 -1
  6. data/examples/README.md +2 -7
  7. data/examples/meter_event_stream.rb +0 -10
  8. data/examples/new_example.rb +24 -0
  9. data/examples/{thinevent_webhook_handler.rb → stripe_webhook_handler.rb} +0 -11
  10. data/lib/stripe/api_resource.rb +1 -0
  11. data/lib/stripe/object_types.rb +19 -0
  12. data/lib/stripe/request_signing_authenticator.rb +79 -0
  13. data/lib/stripe/resources/account_notice.rb +32 -0
  14. data/lib/stripe/resources/billing/meter.rb +2 -0
  15. data/lib/stripe/resources/capital/financing_offer.rb +49 -0
  16. data/lib/stripe/resources/capital/financing_summary.rb +15 -0
  17. data/lib/stripe/resources/capital/financing_transaction.rb +27 -0
  18. data/lib/stripe/resources/financial_connections/account.rb +3 -0
  19. data/lib/stripe/resources/financial_connections/account_inferred_balance.rb +14 -0
  20. data/lib/stripe/resources/financial_connections/institution.rb +26 -0
  21. data/lib/stripe/resources/gift_cards/card.rb +59 -0
  22. data/lib/stripe/resources/gift_cards/transaction.rb +93 -0
  23. data/lib/stripe/resources/invoice.rb +81 -0
  24. data/lib/stripe/resources/invoice_payment.rb +12 -0
  25. data/lib/stripe/resources/issuing/card.rb +20 -0
  26. data/lib/stripe/resources/issuing/credit_underwriting_record.rb +88 -0
  27. data/lib/stripe/resources/issuing/dispute_settlement_detail.rb +26 -0
  28. data/lib/stripe/resources/margin.rb +37 -0
  29. data/lib/stripe/resources/order.rb +120 -0
  30. data/lib/stripe/resources/payment_intent.rb +50 -0
  31. data/lib/stripe/resources/quote.rb +104 -0
  32. data/lib/stripe/resources/quote_preview_invoice.rb +43 -0
  33. data/lib/stripe/resources/quote_preview_subscription_schedule.rb +11 -0
  34. data/lib/stripe/resources/subscription_schedule.rb +20 -0
  35. data/lib/stripe/resources/tax/association.rb +24 -0
  36. data/lib/stripe/resources/tax/form.rb +49 -0
  37. data/lib/stripe/resources/terminal/reader.rb +60 -0
  38. data/lib/stripe/resources/terminal/reader_collected_data.rb +14 -0
  39. data/lib/stripe/resources/usage_record_summary.rb +1 -0
  40. data/lib/stripe/resources/v2/billing/meter_event.rb +2 -2
  41. data/lib/stripe/resources/v2/billing/meter_event_adjustment.rb +2 -2
  42. data/lib/stripe/resources/v2/billing/meter_event_session.rb +2 -2
  43. data/lib/stripe/resources.rb +18 -0
  44. data/lib/stripe/services/account_notice_service.rb +39 -0
  45. data/lib/stripe/services/capital/financing_offer_service.rb +42 -0
  46. data/lib/stripe/services/capital/financing_summary_service.rb +19 -0
  47. data/lib/stripe/services/capital/financing_transaction_service.rb +31 -0
  48. data/lib/stripe/services/capital_service.rb +15 -0
  49. data/lib/stripe/services/financial_connections/account_inferred_balance_service.rb +19 -0
  50. data/lib/stripe/services/financial_connections/account_service.rb +3 -1
  51. data/lib/stripe/services/financial_connections/institution_service.rb +30 -0
  52. data/lib/stripe/services/financial_connections_service.rb +2 -1
  53. data/lib/stripe/services/gift_cards/card_service.rb +63 -0
  54. data/lib/stripe/services/gift_cards/transaction_service.rb +74 -0
  55. data/lib/stripe/services/gift_cards_service.rb +14 -0
  56. data/lib/stripe/services/invoice_payment_service.rb +28 -0
  57. data/lib/stripe/services/invoice_service.rb +44 -1
  58. data/lib/stripe/services/issuing/credit_underwriting_record_service.rb +74 -0
  59. data/lib/stripe/services/issuing/dispute_settlement_detail_service.rb +30 -0
  60. data/lib/stripe/services/issuing_service.rb +4 -1
  61. data/lib/stripe/services/margin_service.rb +50 -0
  62. data/lib/stripe/services/order_line_item_service.rb +17 -0
  63. data/lib/stripe/services/order_service.rb +78 -0
  64. data/lib/stripe/services/payment_intent_service.rb +26 -0
  65. data/lib/stripe/services/quote_line_service.rb +17 -0
  66. data/lib/stripe/services/quote_preview_invoice_service.rb +17 -0
  67. data/lib/stripe/services/quote_preview_subscription_schedule_service.rb +17 -0
  68. data/lib/stripe/services/quote_service.rb +49 -1
  69. data/lib/stripe/services/subscription_schedule_service.rb +11 -0
  70. data/lib/stripe/services/tax/association_service.rb +19 -0
  71. data/lib/stripe/services/tax/form_service.rb +37 -0
  72. data/lib/stripe/services/tax_service.rb +3 -1
  73. data/lib/stripe/services/terminal/reader_collected_data_service.rb +19 -0
  74. data/lib/stripe/services/terminal/reader_service.rb +33 -0
  75. data/lib/stripe/services/terminal_service.rb +2 -1
  76. data/lib/stripe/services/test_helpers/issuing/card_service.rb +11 -0
  77. data/lib/stripe/services/v1_services.rb +6 -1
  78. data/lib/stripe/services.rb +22 -0
  79. data/lib/stripe/stripe_configuration.rb +3 -1
  80. data/lib/stripe/util.rb +7 -1
  81. data/lib/stripe/version.rb +1 -1
  82. data/lib/stripe.rb +45 -0
  83. metadata +47 -6
  84. data/examples/example_template.rb +0 -36
@@ -48,6 +48,7 @@ module Stripe
48
48
  end
49
49
 
50
50
  nested_resource_class_methods :line, operations: %i[list]
51
+ nested_resource_class_methods :payment, operations: %i[retrieve list]
51
52
 
52
53
  # Adds multiple line items to an invoice. This is only possible when an invoice is still a draft.
53
54
  def add_lines(params = {}, opts = {})
@@ -69,6 +70,86 @@ module Stripe
69
70
  )
70
71
  end
71
72
 
73
+ # Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments.
74
+ #
75
+ # For Out of Band Payment, the payment is credited to the invoice immediately, increasing the amount_paid
76
+ # of the invoice and subsequently transitioning the status of the invoice to paid if necessary.
77
+ #
78
+ # For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited
79
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
80
+ # invoice's status becomes paid.
81
+ #
82
+ # If the PaymentIntent's status is already succeeded when it's attached, it's
83
+ # credited to the invoice immediately.
84
+ #
85
+ # See: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create) to learn more.
86
+ def attach_payment(params = {}, opts = {})
87
+ request_stripe_object(
88
+ method: :post,
89
+ path: format("/v1/invoices/%<invoice>s/attach_payment", { invoice: CGI.escape(self["id"]) }),
90
+ params: params,
91
+ opts: opts
92
+ )
93
+ end
94
+
95
+ # Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments.
96
+ #
97
+ # For Out of Band Payment, the payment is credited to the invoice immediately, increasing the amount_paid
98
+ # of the invoice and subsequently transitioning the status of the invoice to paid if necessary.
99
+ #
100
+ # For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited
101
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
102
+ # invoice's status becomes paid.
103
+ #
104
+ # If the PaymentIntent's status is already succeeded when it's attached, it's
105
+ # credited to the invoice immediately.
106
+ #
107
+ # See: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create) to learn more.
108
+ def self.attach_payment(invoice, params = {}, opts = {})
109
+ request_stripe_object(
110
+ method: :post,
111
+ path: format("/v1/invoices/%<invoice>s/attach_payment", { invoice: CGI.escape(invoice) }),
112
+ params: params,
113
+ opts: opts
114
+ )
115
+ end
116
+
117
+ # Attaches a PaymentIntent to the invoice, adding it to the list of payments.
118
+ # When the PaymentIntent's status changes to succeeded, the payment is credited
119
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
120
+ # invoice's status becomes paid.
121
+ #
122
+ # If the PaymentIntent's status is already succeeded when it is attached, it is
123
+ # credited to the invoice immediately.
124
+ #
125
+ # Related guide: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create)
126
+ def attach_payment_intent(params = {}, opts = {})
127
+ request_stripe_object(
128
+ method: :post,
129
+ path: format("/v1/invoices/%<invoice>s/attach_payment_intent", { invoice: CGI.escape(self["id"]) }),
130
+ params: params,
131
+ opts: opts
132
+ )
133
+ end
134
+
135
+ # Attaches a PaymentIntent to the invoice, adding it to the list of payments.
136
+ # When the PaymentIntent's status changes to succeeded, the payment is credited
137
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
138
+ # invoice's status becomes paid.
139
+ #
140
+ # If the PaymentIntent's status is already succeeded when it is attached, it is
141
+ # credited to the invoice immediately.
142
+ #
143
+ # Related guide: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create)
144
+ def self.attach_payment_intent(invoice, params = {}, opts = {})
145
+ request_stripe_object(
146
+ method: :post,
147
+ path: format("/v1/invoices/%<invoice>s/attach_payment_intent", { invoice: CGI.escape(invoice) }),
148
+ params: params,
149
+ opts: opts
150
+ )
151
+ end
152
+
72
153
  # This endpoint creates a draft invoice for a given customer. The invoice remains a draft until you [finalize the invoice, which allows you to [pay](#pay_invoice) or <a href="#send_invoice">send](https://stripe.com/docs/api#finalize_invoice) the invoice to your customers.
73
154
  def self.create(params = {}, opts = {})
74
155
  request_stripe_object(method: :post, path: "/v1/invoices", params: params, opts: opts)
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ # The invoice payment object
6
+ class InvoicePayment < APIResource
7
+ OBJECT_NAME = "invoice_payment"
8
+ def self.object_name
9
+ "invoice_payment"
10
+ end
11
+ end
12
+ end
@@ -123,6 +123,26 @@ module Stripe
123
123
  opts: opts
124
124
  )
125
125
  end
126
+
127
+ # Updates the shipping status of the specified Issuing Card object to submitted. This method is only available with Stripe Version ‘2024-09-30.acacia' or above.
128
+ def self.submit_card(card, params = {}, opts = {})
129
+ request_stripe_object(
130
+ method: :post,
131
+ path: format("/v1/test_helpers/issuing/cards/%<card>s/shipping/submit", { card: CGI.escape(card) }),
132
+ params: params,
133
+ opts: opts
134
+ )
135
+ end
136
+
137
+ # Updates the shipping status of the specified Issuing Card object to submitted. This method is only available with Stripe Version ‘2024-09-30.acacia' or above.
138
+ def submit_card(params = {}, opts = {})
139
+ @resource.request_stripe_object(
140
+ method: :post,
141
+ path: format("/v1/test_helpers/issuing/cards/%<card>s/shipping/submit", { card: CGI.escape(@resource["id"]) }),
142
+ params: params,
143
+ opts: opts
144
+ )
145
+ end
126
146
  end
127
147
  end
128
148
  end
@@ -0,0 +1,88 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Issuing
6
+ # Every time an applicant submits an application for a Charge Card product your platform offers, or every time your platform takes a proactive credit decision on an existing account, you must record the decision by creating a new `CreditUnderwritingRecord` object on a connected account.
7
+ #
8
+ # [Follow the guide](https://stripe.com/docs/issuing/credit/report-credit-decisions-and-manage-aans) to learn about your requirements as a platform.
9
+ class CreditUnderwritingRecord < APIResource
10
+ extend Stripe::APIOperations::List
11
+
12
+ OBJECT_NAME = "issuing.credit_underwriting_record"
13
+ def self.object_name
14
+ "issuing.credit_underwriting_record"
15
+ end
16
+
17
+ # Update a CreditUnderwritingRecord object to correct mistakes.
18
+ def correct(params = {}, opts = {})
19
+ request_stripe_object(
20
+ method: :post,
21
+ path: format("/v1/issuing/credit_underwriting_records/%<credit_underwriting_record>s/correct", { credit_underwriting_record: CGI.escape(self["id"]) }),
22
+ params: params,
23
+ opts: opts
24
+ )
25
+ end
26
+
27
+ # Update a CreditUnderwritingRecord object to correct mistakes.
28
+ def self.correct(credit_underwriting_record, params = {}, opts = {})
29
+ request_stripe_object(
30
+ method: :post,
31
+ path: format("/v1/issuing/credit_underwriting_records/%<credit_underwriting_record>s/correct", { credit_underwriting_record: CGI.escape(credit_underwriting_record) }),
32
+ params: params,
33
+ opts: opts
34
+ )
35
+ end
36
+
37
+ # Creates a CreditUnderwritingRecord object with information about a credit application submission.
38
+ def self.create_from_application(params = {}, opts = {})
39
+ request_stripe_object(
40
+ method: :post,
41
+ path: "/v1/issuing/credit_underwriting_records/create_from_application",
42
+ params: params,
43
+ opts: opts
44
+ )
45
+ end
46
+
47
+ # Creates a CreditUnderwritingRecord object from an underwriting decision coming from a proactive review of an existing accountholder.
48
+ def self.create_from_proactive_review(params = {}, opts = {})
49
+ request_stripe_object(
50
+ method: :post,
51
+ path: "/v1/issuing/credit_underwriting_records/create_from_proactive_review",
52
+ params: params,
53
+ opts: opts
54
+ )
55
+ end
56
+
57
+ # Retrieves a list of CreditUnderwritingRecord objects. The objects are sorted in descending order by creation date, with the most-recently-created object appearing first.
58
+ def self.list(filters = {}, opts = {})
59
+ request_stripe_object(
60
+ method: :get,
61
+ path: "/v1/issuing/credit_underwriting_records",
62
+ params: filters,
63
+ opts: opts
64
+ )
65
+ end
66
+
67
+ # Update a CreditUnderwritingRecord object from a decision made on a credit application.
68
+ def report_decision(params = {}, opts = {})
69
+ request_stripe_object(
70
+ method: :post,
71
+ path: format("/v1/issuing/credit_underwriting_records/%<credit_underwriting_record>s/report_decision", { credit_underwriting_record: CGI.escape(self["id"]) }),
72
+ params: params,
73
+ opts: opts
74
+ )
75
+ end
76
+
77
+ # Update a CreditUnderwritingRecord object from a decision made on a credit application.
78
+ def self.report_decision(credit_underwriting_record, params = {}, opts = {})
79
+ request_stripe_object(
80
+ method: :post,
81
+ path: format("/v1/issuing/credit_underwriting_records/%<credit_underwriting_record>s/report_decision", { credit_underwriting_record: CGI.escape(credit_underwriting_record) }),
82
+ params: params,
83
+ opts: opts
84
+ )
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,26 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Issuing
6
+ # Represents a record from the card network of a money movement or change in state for an Issuing dispute. These records are included in the settlement reports that we receive from networks and expose to users as Settlement objects.
7
+ class DisputeSettlementDetail < APIResource
8
+ extend Stripe::APIOperations::List
9
+
10
+ OBJECT_NAME = "issuing.dispute_settlement_detail"
11
+ def self.object_name
12
+ "issuing.dispute_settlement_detail"
13
+ end
14
+
15
+ # Returns a list of Issuing DisputeSettlementDetail objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first.
16
+ def self.list(filters = {}, opts = {})
17
+ request_stripe_object(
18
+ method: :get,
19
+ path: "/v1/issuing/dispute_settlement_details",
20
+ params: filters,
21
+ opts: opts
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ # A (partner) margin represents a specific discount distributed in partner reseller programs to business partners who
6
+ # resell products and services and earn a discount (margin) for doing so.
7
+ class Margin < APIResource
8
+ extend Stripe::APIOperations::Create
9
+ extend Stripe::APIOperations::List
10
+ include Stripe::APIOperations::Save
11
+
12
+ OBJECT_NAME = "margin"
13
+ def self.object_name
14
+ "margin"
15
+ end
16
+
17
+ # Create a margin object to be used with invoices, invoice items, and invoice line items for a customer to represent a partner discount. A margin has a percent_off which is the percent that will be taken off the subtotal after all items and other discounts and promotions) of any invoices for a customer. Calculation of prorations do not include any partner margins applied on the original invoice item.
18
+ def self.create(params = {}, opts = {})
19
+ request_stripe_object(method: :post, path: "/v1/billing/margins", params: params, opts: opts)
20
+ end
21
+
22
+ # Retrieve a list of your margins.
23
+ def self.list(filters = {}, opts = {})
24
+ request_stripe_object(method: :get, path: "/v1/billing/margins", params: filters, opts: opts)
25
+ end
26
+
27
+ # Update the specified margin object. Certain fields of the margin object are not editable.
28
+ def self.update(id, params = {}, opts = {})
29
+ request_stripe_object(
30
+ method: :post,
31
+ path: format("/v1/billing/margins/%<id>s", { id: CGI.escape(id) }),
32
+ params: params,
33
+ opts: opts
34
+ )
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,120 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ # An Order describes a purchase being made by a customer, including the
6
+ # products & quantities being purchased, the order status, the payment information,
7
+ # and the billing/shipping details.
8
+ #
9
+ # Related guide: [Orders overview](https://stripe.com/docs/orders)
10
+ class Order < APIResource
11
+ extend Stripe::APIOperations::Create
12
+ extend Stripe::APIOperations::List
13
+ include Stripe::APIOperations::Save
14
+
15
+ OBJECT_NAME = "order"
16
+ def self.object_name
17
+ "order"
18
+ end
19
+
20
+ # Cancels the order as well as the payment intent if one is attached.
21
+ def cancel(params = {}, opts = {})
22
+ request_stripe_object(
23
+ method: :post,
24
+ path: format("/v1/orders/%<id>s/cancel", { id: CGI.escape(self["id"]) }),
25
+ params: params,
26
+ opts: opts
27
+ )
28
+ end
29
+
30
+ # Cancels the order as well as the payment intent if one is attached.
31
+ def self.cancel(id, params = {}, opts = {})
32
+ request_stripe_object(
33
+ method: :post,
34
+ path: format("/v1/orders/%<id>s/cancel", { id: CGI.escape(id) }),
35
+ params: params,
36
+ opts: opts
37
+ )
38
+ end
39
+
40
+ # Creates a new open order object.
41
+ def self.create(params = {}, opts = {})
42
+ request_stripe_object(method: :post, path: "/v1/orders", params: params, opts: opts)
43
+ end
44
+
45
+ # Returns a list of your orders. The orders are returned sorted by creation date, with the most recently created orders appearing first.
46
+ def self.list(filters = {}, opts = {})
47
+ request_stripe_object(method: :get, path: "/v1/orders", params: filters, opts: opts)
48
+ end
49
+
50
+ # When retrieving an order, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items.
51
+ def list_line_items(params = {}, opts = {})
52
+ request_stripe_object(
53
+ method: :get,
54
+ path: format("/v1/orders/%<id>s/line_items", { id: CGI.escape(self["id"]) }),
55
+ params: params,
56
+ opts: opts
57
+ )
58
+ end
59
+
60
+ # When retrieving an order, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items.
61
+ def self.list_line_items(id, params = {}, opts = {})
62
+ request_stripe_object(
63
+ method: :get,
64
+ path: format("/v1/orders/%<id>s/line_items", { id: CGI.escape(id) }),
65
+ params: params,
66
+ opts: opts
67
+ )
68
+ end
69
+
70
+ # Reopens a submitted order.
71
+ def reopen(params = {}, opts = {})
72
+ request_stripe_object(
73
+ method: :post,
74
+ path: format("/v1/orders/%<id>s/reopen", { id: CGI.escape(self["id"]) }),
75
+ params: params,
76
+ opts: opts
77
+ )
78
+ end
79
+
80
+ # Reopens a submitted order.
81
+ def self.reopen(id, params = {}, opts = {})
82
+ request_stripe_object(
83
+ method: :post,
84
+ path: format("/v1/orders/%<id>s/reopen", { id: CGI.escape(id) }),
85
+ params: params,
86
+ opts: opts
87
+ )
88
+ end
89
+
90
+ # Submitting an Order transitions the status to processing and creates a PaymentIntent object so the order can be paid. If the Order has an amount_total of 0, no PaymentIntent object will be created. Once the order is submitted, its contents cannot be changed, unless the [reopen](https://stripe.com/docs/api#reopen_order) method is called.
91
+ def submit(params = {}, opts = {})
92
+ request_stripe_object(
93
+ method: :post,
94
+ path: format("/v1/orders/%<id>s/submit", { id: CGI.escape(self["id"]) }),
95
+ params: params,
96
+ opts: opts
97
+ )
98
+ end
99
+
100
+ # Submitting an Order transitions the status to processing and creates a PaymentIntent object so the order can be paid. If the Order has an amount_total of 0, no PaymentIntent object will be created. Once the order is submitted, its contents cannot be changed, unless the [reopen](https://stripe.com/docs/api#reopen_order) method is called.
101
+ def self.submit(id, params = {}, opts = {})
102
+ request_stripe_object(
103
+ method: :post,
104
+ path: format("/v1/orders/%<id>s/submit", { id: CGI.escape(id) }),
105
+ params: params,
106
+ opts: opts
107
+ )
108
+ end
109
+
110
+ # Updates the specific order by setting the values of the parameters passed. Any parameters not provided will be left unchanged.
111
+ def self.update(id, params = {}, opts = {})
112
+ request_stripe_object(
113
+ method: :post,
114
+ path: format("/v1/orders/%<id>s", { id: CGI.escape(id) }),
115
+ params: params,
116
+ opts: opts
117
+ )
118
+ end
119
+ end
120
+ end
@@ -182,6 +182,56 @@ module Stripe
182
182
  request_stripe_object(method: :post, path: "/v1/payment_intents", params: params, opts: opts)
183
183
  end
184
184
 
185
+ # Perform a decremental authorization on an eligible
186
+ # [PaymentIntent](https://stripe.com/docs/api/payment_intents/object). To be eligible, the
187
+ # PaymentIntent's status must be requires_capture and
188
+ # [decremental_authorization.status](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card-decremental_authorization)
189
+ # must be available.
190
+ #
191
+ # Decremental authorizations decrease the authorized amount on your customer's card
192
+ # to the new, lower amount provided. A single PaymentIntent can call this endpoint multiple times to further decrease the authorized amount.
193
+ #
194
+ # After decrement, the PaymentIntent object
195
+ # returns with the updated
196
+ # [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount).
197
+ # The PaymentIntent will now be capturable up to the new authorized amount.
198
+ #
199
+ # Each PaymentIntent can have a maximum of 10 decremental or incremental authorization attempts, including declines.
200
+ # After it's fully captured, a PaymentIntent can no longer be decremented.
201
+ def decrement_authorization(params = {}, opts = {})
202
+ request_stripe_object(
203
+ method: :post,
204
+ path: format("/v1/payment_intents/%<intent>s/decrement_authorization", { intent: CGI.escape(self["id"]) }),
205
+ params: params,
206
+ opts: opts
207
+ )
208
+ end
209
+
210
+ # Perform a decremental authorization on an eligible
211
+ # [PaymentIntent](https://stripe.com/docs/api/payment_intents/object). To be eligible, the
212
+ # PaymentIntent's status must be requires_capture and
213
+ # [decremental_authorization.status](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card-decremental_authorization)
214
+ # must be available.
215
+ #
216
+ # Decremental authorizations decrease the authorized amount on your customer's card
217
+ # to the new, lower amount provided. A single PaymentIntent can call this endpoint multiple times to further decrease the authorized amount.
218
+ #
219
+ # After decrement, the PaymentIntent object
220
+ # returns with the updated
221
+ # [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount).
222
+ # The PaymentIntent will now be capturable up to the new authorized amount.
223
+ #
224
+ # Each PaymentIntent can have a maximum of 10 decremental or incremental authorization attempts, including declines.
225
+ # After it's fully captured, a PaymentIntent can no longer be decremented.
226
+ def self.decrement_authorization(intent, params = {}, opts = {})
227
+ request_stripe_object(
228
+ method: :post,
229
+ path: format("/v1/payment_intents/%<intent>s/decrement_authorization", { intent: CGI.escape(intent) }),
230
+ params: params,
231
+ opts: opts
232
+ )
233
+ end
234
+
185
235
  # Perform an incremental authorization on an eligible
186
236
  # [PaymentIntent](https://stripe.com/docs/api/payment_intents/object). To be eligible, the
187
237
  # PaymentIntent's status must be requires_capture and
@@ -7,6 +7,7 @@ module Stripe
7
7
  class Quote < APIResource
8
8
  extend Stripe::APIOperations::Create
9
9
  extend Stripe::APIOperations::List
10
+ extend Stripe::APIOperations::NestedResource
10
11
  include Stripe::APIOperations::Save
11
12
 
12
13
  OBJECT_NAME = "quote"
@@ -14,6 +15,9 @@ module Stripe
14
15
  "quote"
15
16
  end
16
17
 
18
+ nested_resource_class_methods :preview_invoice, operations: %i[list]
19
+ nested_resource_class_methods :preview_subscription_schedule, operations: %i[list]
20
+
17
21
  # Accepts the specified quote.
18
22
  def accept(params = {}, opts = {})
19
23
  request_stripe_object(
@@ -124,6 +128,86 @@ module Stripe
124
128
  )
125
129
  end
126
130
 
131
+ # Retrieves a paginated list of lines for a quote. These lines describe changes that will be used to create new subscription schedules or update existing subscription schedules when the quote is accepted.
132
+ def list_lines(params = {}, opts = {})
133
+ request_stripe_object(
134
+ method: :get,
135
+ path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(self["id"]) }),
136
+ params: params,
137
+ opts: opts
138
+ )
139
+ end
140
+
141
+ # Retrieves a paginated list of lines for a quote. These lines describe changes that will be used to create new subscription schedules or update existing subscription schedules when the quote is accepted.
142
+ def self.list_lines(quote, params = {}, opts = {})
143
+ request_stripe_object(
144
+ method: :get,
145
+ path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(quote) }),
146
+ params: params,
147
+ opts: opts
148
+ )
149
+ end
150
+
151
+ # Preview the invoice line items that would be generated by accepting the quote.
152
+ def list_preview_invoice_lines(preview_invoice, params = {}, opts = {})
153
+ request_stripe_object(
154
+ method: :get,
155
+ path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(self["id"]), preview_invoice: CGI.escape(preview_invoice) }),
156
+ params: params,
157
+ opts: opts
158
+ )
159
+ end
160
+
161
+ # Preview the invoice line items that would be generated by accepting the quote.
162
+ def self.list_preview_invoice_lines(quote, preview_invoice, params = {}, opts = {})
163
+ request_stripe_object(
164
+ method: :get,
165
+ path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(quote), preview_invoice: CGI.escape(preview_invoice) }),
166
+ params: params,
167
+ opts: opts
168
+ )
169
+ end
170
+
171
+ # Converts a stale quote to draft.
172
+ def mark_draft(params = {}, opts = {})
173
+ request_stripe_object(
174
+ method: :post,
175
+ path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(self["id"]) }),
176
+ params: params,
177
+ opts: opts
178
+ )
179
+ end
180
+
181
+ # Converts a stale quote to draft.
182
+ def self.mark_draft(quote, params = {}, opts = {})
183
+ request_stripe_object(
184
+ method: :post,
185
+ path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(quote) }),
186
+ params: params,
187
+ opts: opts
188
+ )
189
+ end
190
+
191
+ # Converts a draft or open quote to stale.
192
+ def mark_stale(params = {}, opts = {})
193
+ request_stripe_object(
194
+ method: :post,
195
+ path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(self["id"]) }),
196
+ params: params,
197
+ opts: opts
198
+ )
199
+ end
200
+
201
+ # Converts a draft or open quote to stale.
202
+ def self.mark_stale(quote, params = {}, opts = {})
203
+ request_stripe_object(
204
+ method: :post,
205
+ path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(quote) }),
206
+ params: params,
207
+ opts: opts
208
+ )
209
+ end
210
+
127
211
  # Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf)
128
212
  def pdf(params = {}, opts = {}, &read_body_chunk_block)
129
213
  opts = { api_base: APIRequestor.active_requestor.config.uploads_base }.merge(opts)
@@ -150,6 +234,26 @@ module Stripe
150
234
  )
151
235
  end
152
236
 
237
+ # Recompute the upcoming invoice estimate for the quote.
238
+ def reestimate(params = {}, opts = {})
239
+ request_stripe_object(
240
+ method: :post,
241
+ path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(self["id"]) }),
242
+ params: params,
243
+ opts: opts
244
+ )
245
+ end
246
+
247
+ # Recompute the upcoming invoice estimate for the quote.
248
+ def self.reestimate(quote, params = {}, opts = {})
249
+ request_stripe_object(
250
+ method: :post,
251
+ path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(quote) }),
252
+ params: params,
253
+ opts: opts
254
+ )
255
+ end
256
+
153
257
  # A quote models prices and services for a customer.
154
258
  def self.update(id, params = {}, opts = {})
155
259
  request_stripe_object(
@@ -0,0 +1,43 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ # Invoices are statements of amounts owed by a customer, and are either
6
+ # generated one-off, or generated periodically from a subscription.
7
+ #
8
+ # They contain [invoice items](https://stripe.com/docs/api#invoiceitems), and proration adjustments
9
+ # that may be caused by subscription upgrades/downgrades (if necessary).
10
+ #
11
+ # If your invoice is configured to be billed through automatic charges,
12
+ # Stripe automatically finalizes your invoice and attempts payment. Note
13
+ # that finalizing the invoice,
14
+ # [when automatic](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection), does
15
+ # not happen immediately as the invoice is created. Stripe waits
16
+ # until one hour after the last webhook was successfully sent (or the last
17
+ # webhook timed out after failing). If you (and the platforms you may have
18
+ # connected to) have no webhooks configured, Stripe waits one hour after
19
+ # creation to finalize the invoice.
20
+ #
21
+ # If your invoice is configured to be billed by sending an email, then based on your
22
+ # [email settings](https://dashboard.stripe.com/account/billing/automatic),
23
+ # Stripe will email the invoice to your customer and await payment. These
24
+ # emails can contain a link to a hosted page to pay the invoice.
25
+ #
26
+ # Stripe applies any customer credit on the account before determining the
27
+ # amount due for the invoice (i.e., the amount that will be actually
28
+ # charged). If the amount due for the invoice is less than Stripe's [minimum allowed charge
29
+ # per currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts), the
30
+ # invoice is automatically marked paid, and we add the amount due to the
31
+ # customer's credit balance which is applied to the next invoice.
32
+ #
33
+ # More details on the customer's credit balance are
34
+ # [here](https://stripe.com/docs/billing/customer/balance).
35
+ #
36
+ # Related guide: [Send invoices to customers](https://stripe.com/docs/billing/invoices/sending)
37
+ class QuotePreviewInvoice < APIResource
38
+ OBJECT_NAME = "quote_preview_invoice"
39
+ def self.object_name
40
+ "quote_preview_invoice"
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ class QuotePreviewSubscriptionSchedule < APIResource
6
+ OBJECT_NAME = "quote_preview_subscription_schedule"
7
+ def self.object_name
8
+ "quote_preview_subscription_schedule"
9
+ end
10
+ end
11
+ end