stripe 11.1.0 → 11.3.0.pre.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1317 -652
  3. data/OPENAPI_VERSION +1 -1
  4. data/README.md +11 -0
  5. data/VERSION +1 -1
  6. data/lib/stripe/api_operations/request.rb +2 -1
  7. data/lib/stripe/api_version.rb +1 -0
  8. data/lib/stripe/object_types.rb +16 -0
  9. data/lib/stripe/request_signing_authenticator.rb +79 -0
  10. data/lib/stripe/resources/account_notice.rb +32 -0
  11. data/lib/stripe/resources/capital/financing_offer.rb +49 -0
  12. data/lib/stripe/resources/capital/financing_summary.rb +15 -0
  13. data/lib/stripe/resources/capital/financing_transaction.rb +27 -0
  14. data/lib/stripe/resources/financial_connections/account.rb +3 -0
  15. data/lib/stripe/resources/financial_connections/account_inferred_balance.rb +14 -0
  16. data/lib/stripe/resources/gift_cards/card.rb +59 -0
  17. data/lib/stripe/resources/gift_cards/transaction.rb +93 -0
  18. data/lib/stripe/resources/invoice.rb +113 -0
  19. data/lib/stripe/resources/invoice_payment.rb +12 -0
  20. data/lib/stripe/resources/issuing/credit_underwriting_record.rb +88 -0
  21. data/lib/stripe/resources/margin.rb +37 -0
  22. data/lib/stripe/resources/order.rb +120 -0
  23. data/lib/stripe/resources/payment_intent.rb +50 -0
  24. data/lib/stripe/resources/quote.rb +104 -0
  25. data/lib/stripe/resources/quote_phase.rb +39 -0
  26. data/lib/stripe/resources/quote_preview_invoice.rb +43 -0
  27. data/lib/stripe/resources/quote_preview_subscription_schedule.rb +11 -0
  28. data/lib/stripe/resources/subscription_schedule.rb +20 -0
  29. data/lib/stripe/resources/tax/form.rb +49 -0
  30. data/lib/stripe/resources/terminal/reader.rb +60 -0
  31. data/lib/stripe/resources.rb +15 -0
  32. data/lib/stripe/stripe_client.rb +62 -28
  33. data/lib/stripe/stripe_configuration.rb +2 -1
  34. data/lib/stripe/util.rb +8 -1
  35. data/lib/stripe/version.rb +1 -1
  36. data/lib/stripe.rb +54 -0
  37. metadata +20 -4
data/OPENAPI_VERSION CHANGED
@@ -1 +1 @@
1
- v961
1
+ v962
data/README.md CHANGED
@@ -339,6 +339,17 @@ If your beta feature requires a `Stripe-Version` header to be sent, set the `Str
339
339
  Stripe.add_beta_version("feature_beta", "v3")
340
340
  ```
341
341
 
342
+ ### Custom requests
343
+
344
+ If you would like to send a request to an undocumented API (for example you are in a private beta), or if you prefer to bypass the method definitions in the library and specify your request details directly, you can use the `raw_request` method on `Stripe`.
345
+
346
+ ```ruby
347
+ resp = Stripe.raw_request(:post, "/v1/beta_endpoint", {param: 123}, {stripe_version: "2022-11-15; feature_beta=v3"})
348
+
349
+ # (Optional) resp is a StripeResponse. You can use `Stripe.deserialize` to get a StripeObject.
350
+ deserialized_resp = Stripe.deserialize(resp.http_body)
351
+ ```
352
+
342
353
  ## Support
343
354
 
344
355
  New features and bug fixes are released on the latest major version of the Stripe Ruby library. If you are on an older major version, we recommend that you upgrade to the latest in order to use the new features and bug fixes including those for security vulnerabilities. Older major versions of the package will continue to be available for use, but will not be receiving any updates.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 11.1.0
1
+ 11.3.0-beta.1
@@ -48,13 +48,14 @@ module Stripe
48
48
  api_key = headers.delete(:api_key)
49
49
  api_base = headers.delete(:api_base)
50
50
  client = headers.delete(:client)
51
+ api_mode = headers.delete(:api_mode)
51
52
  # Assume all remaining opts must be headers
52
53
 
53
54
  resp, opts[:api_key] = client.send(
54
55
  client_request_method_sym,
55
56
  method, url,
56
57
  api_base: api_base, api_key: api_key,
57
- headers: headers, params: params, usage: usage,
58
+ headers: headers, params: params, usage: usage, api_mode: api_mode,
58
59
  &read_body_chunk_block
59
60
  )
60
61
 
@@ -4,5 +4,6 @@
4
4
  module Stripe
5
5
  module ApiVersion
6
6
  CURRENT = "2024-04-10"
7
+ PREVIEW = "2024-04-11.preview-v2"
7
8
  end
8
9
  end
@@ -15,6 +15,7 @@ module Stripe
15
15
  # object classes: The beginning of the section generated from our OpenAPI spec
16
16
  Account.object_name => Account,
17
17
  AccountLink.object_name => AccountLink,
18
+ AccountNotice.object_name => AccountNotice,
18
19
  AccountSession.object_name => AccountSession,
19
20
  ApplePayDomain.object_name => ApplePayDomain,
20
21
  ApplicationFee.object_name => ApplicationFee,
@@ -30,6 +31,9 @@ module Stripe
30
31
  BillingPortal::Configuration.object_name => BillingPortal::Configuration,
31
32
  BillingPortal::Session.object_name => BillingPortal::Session,
32
33
  Capability.object_name => Capability,
34
+ Capital::FinancingOffer.object_name => Capital::FinancingOffer,
35
+ Capital::FinancingSummary.object_name => Capital::FinancingSummary,
36
+ Capital::FinancingTransaction.object_name => Capital::FinancingTransaction,
33
37
  Card.object_name => Card,
34
38
  CashBalance.object_name => CashBalance,
35
39
  Charge.object_name => Charge,
@@ -56,20 +60,26 @@ module Stripe
56
60
  File.object_name => File,
57
61
  FileLink.object_name => FileLink,
58
62
  FinancialConnections::Account.object_name => FinancialConnections::Account,
63
+ FinancialConnections::AccountInferredBalance.object_name =>
64
+ FinancialConnections::AccountInferredBalance,
59
65
  FinancialConnections::AccountOwner.object_name => FinancialConnections::AccountOwner,
60
66
  FinancialConnections::AccountOwnership.object_name => FinancialConnections::AccountOwnership,
61
67
  FinancialConnections::Session.object_name => FinancialConnections::Session,
62
68
  FinancialConnections::Transaction.object_name => FinancialConnections::Transaction,
63
69
  Forwarding::Request.object_name => Forwarding::Request,
64
70
  FundingInstructions.object_name => FundingInstructions,
71
+ GiftCards::Card.object_name => GiftCards::Card,
72
+ GiftCards::Transaction.object_name => GiftCards::Transaction,
65
73
  Identity::VerificationReport.object_name => Identity::VerificationReport,
66
74
  Identity::VerificationSession.object_name => Identity::VerificationSession,
67
75
  Invoice.object_name => Invoice,
68
76
  InvoiceItem.object_name => InvoiceItem,
69
77
  InvoiceLineItem.object_name => InvoiceLineItem,
78
+ InvoicePayment.object_name => InvoicePayment,
70
79
  Issuing::Authorization.object_name => Issuing::Authorization,
71
80
  Issuing::Card.object_name => Issuing::Card,
72
81
  Issuing::Cardholder.object_name => Issuing::Cardholder,
82
+ Issuing::CreditUnderwritingRecord.object_name => Issuing::CreditUnderwritingRecord,
73
83
  Issuing::Dispute.object_name => Issuing::Dispute,
74
84
  Issuing::PersonalizationDesign.object_name => Issuing::PersonalizationDesign,
75
85
  Issuing::PhysicalBundle.object_name => Issuing::PhysicalBundle,
@@ -78,6 +88,8 @@ module Stripe
78
88
  LineItem.object_name => LineItem,
79
89
  LoginLink.object_name => LoginLink,
80
90
  Mandate.object_name => Mandate,
91
+ Margin.object_name => Margin,
92
+ Order.object_name => Order,
81
93
  PaymentIntent.object_name => PaymentIntent,
82
94
  PaymentLink.object_name => PaymentLink,
83
95
  PaymentMethod.object_name => PaymentMethod,
@@ -91,6 +103,9 @@ module Stripe
91
103
  ProductFeature.object_name => ProductFeature,
92
104
  PromotionCode.object_name => PromotionCode,
93
105
  Quote.object_name => Quote,
106
+ QuotePhase.object_name => QuotePhase,
107
+ QuotePreviewInvoice.object_name => QuotePreviewInvoice,
108
+ QuotePreviewSubscriptionSchedule.object_name => QuotePreviewSubscriptionSchedule,
94
109
  Radar::EarlyFraudWarning.object_name => Radar::EarlyFraudWarning,
95
110
  Radar::ValueList.object_name => Radar::ValueList,
96
111
  Radar::ValueListItem.object_name => Radar::ValueListItem,
@@ -110,6 +125,7 @@ module Stripe
110
125
  SubscriptionSchedule.object_name => SubscriptionSchedule,
111
126
  Tax::Calculation.object_name => Tax::Calculation,
112
127
  Tax::CalculationLineItem.object_name => Tax::CalculationLineItem,
128
+ Tax::Form.object_name => Tax::Form,
113
129
  Tax::Registration.object_name => Tax::Registration,
114
130
  Tax::Settings.object_name => Tax::Settings,
115
131
  Tax::Transaction.object_name => Tax::Transaction,
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stripe
4
+ class RequestSigningAuthenticator
5
+ AUTHORIZATION_HEADER_NAME = "Authorization"
6
+ CONTENT_TYPE_HEADER_NAME = "Content-Type"
7
+ STRIPE_CONTEXT_HEADER_NAME = "Stripe-Context"
8
+ STRIPE_ACCOUNT_HEADER_NAME = "Stripe-Account"
9
+ CONTENT_DIGEST_HEADER_NAME = "Content-Digest"
10
+ SIGNATURE_INPUT_HEADER_NAME = "Signature-Input"
11
+ SIGNATURE_HEADER_NAME = "Signature"
12
+
13
+ attr_reader :auth_token, :sign_lambda
14
+
15
+ def initialize(auth_token, sign_lambda)
16
+ raise ArgumentError, "auth_token must be a string" unless auth_token.is_a?(String)
17
+ raise ArgumentError, "sign_lambda must be a lambda" unless sign_lambda.is_a?(Proc)
18
+
19
+ @auth_token = auth_token
20
+ @sign_lambda = sign_lambda
21
+ end
22
+
23
+ def authenticate(method, headers, body)
24
+ covered_headers = [CONTENT_TYPE_HEADER_NAME,
25
+ CONTENT_DIGEST_HEADER_NAME,
26
+ STRIPE_CONTEXT_HEADER_NAME,
27
+ STRIPE_ACCOUNT_HEADER_NAME,
28
+ AUTHORIZATION_HEADER_NAME,]
29
+
30
+ headers[AUTHORIZATION_HEADER_NAME] = "STRIPE-V2-SIG #{auth_token}"
31
+
32
+ if method == :get
33
+ covered_headers -= [CONTENT_TYPE_HEADER_NAME,
34
+ CONTENT_DIGEST_HEADER_NAME,]
35
+ else
36
+ content = body || ""
37
+ headers[CONTENT_DIGEST_HEADER_NAME] =
38
+ %(sha-256=:#{content_digest(content)}:)
39
+ end
40
+
41
+ covered_headers_formatted = covered_headers
42
+ .map { |string| %("#{string.downcase}") }
43
+ .join(" ")
44
+
45
+ signature_input = "(#{covered_headers_formatted});created=#{created_time}"
46
+
47
+ inputs = covered_headers
48
+ .map { |header| %("#{header.downcase}": #{headers[header]}) }
49
+ .join("\n")
50
+
51
+ signature_base = %(#{inputs}\n"@signature-params": #{signature_input})
52
+ .encode(Encoding::UTF_8)
53
+
54
+ headers[SIGNATURE_INPUT_HEADER_NAME] = "sig1=#{signature_input}"
55
+
56
+ headers[SIGNATURE_HEADER_NAME] =
57
+ "sig1=:#{encoded_signature(signature_base)}:"
58
+ end
59
+
60
+ private def sign(signature_base)
61
+ @sign_lambda.call(signature_base)
62
+ end
63
+
64
+ private def encoded_signature(signature_base)
65
+ Base64.strict_encode64(sign(signature_base))
66
+ rescue StandardError
67
+ raise AuthenticationError, "Encountered '#{e.message} (#{e.class})' " \
68
+ "when calculating request signature."
69
+ end
70
+
71
+ private def content_digest(content)
72
+ Base64.strict_encode64(OpenSSL::Digest.new("SHA256").digest(content))
73
+ end
74
+
75
+ private def created_time
76
+ Time.now.to_i
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,32 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ # A notice to a Connected account. Notice can be sent by Stripe on your behalf or you can opt to send the notices yourself.
6
+ #
7
+ # See the [guide to send notices](https://stripe.com/docs/issuing/compliance-us/issuing-regulated-customer-notices) to your connected accounts.
8
+ class AccountNotice < APIResource
9
+ extend Stripe::APIOperations::List
10
+ include Stripe::APIOperations::Save
11
+
12
+ OBJECT_NAME = "account_notice"
13
+ def self.object_name
14
+ "account_notice"
15
+ end
16
+
17
+ # Retrieves a list of AccountNotice objects. The objects are sorted in descending order by creation date, with the most-recently-created object appearing first.
18
+ def self.list(filters = {}, opts = {})
19
+ request_stripe_object(method: :get, path: "/v1/account_notices", params: filters, opts: opts)
20
+ end
21
+
22
+ # Updates an AccountNotice object.
23
+ def self.update(id, params = {}, opts = {})
24
+ request_stripe_object(
25
+ method: :post,
26
+ path: format("/v1/account_notices/%<id>s", { id: CGI.escape(id) }),
27
+ params: params,
28
+ opts: opts
29
+ )
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,49 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Capital
6
+ # This is an object representing an offer of financing from
7
+ # Stripe Capital to a Connect subaccount.
8
+ class FinancingOffer < APIResource
9
+ extend Stripe::APIOperations::List
10
+
11
+ OBJECT_NAME = "capital.financing_offer"
12
+ def self.object_name
13
+ "capital.financing_offer"
14
+ end
15
+
16
+ # Retrieves the financing offers available for Connected accounts that belong to your platform.
17
+ def self.list(filters = {}, opts = {})
18
+ request_stripe_object(
19
+ method: :get,
20
+ path: "/v1/capital/financing_offers",
21
+ params: filters,
22
+ opts: opts
23
+ )
24
+ end
25
+
26
+ # Acknowledges that platform has received and delivered the financing_offer to
27
+ # the intended merchant recipient.
28
+ def mark_delivered(params = {}, opts = {})
29
+ request_stripe_object(
30
+ method: :post,
31
+ path: format("/v1/capital/financing_offers/%<financing_offer>s/mark_delivered", { financing_offer: CGI.escape(self["id"]) }),
32
+ params: params,
33
+ opts: opts
34
+ )
35
+ end
36
+
37
+ # Acknowledges that platform has received and delivered the financing_offer to
38
+ # the intended merchant recipient.
39
+ def self.mark_delivered(financing_offer, params = {}, opts = {})
40
+ request_stripe_object(
41
+ method: :post,
42
+ path: format("/v1/capital/financing_offers/%<financing_offer>s/mark_delivered", { financing_offer: CGI.escape(financing_offer) }),
43
+ params: params,
44
+ opts: opts
45
+ )
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Capital
6
+ # A financing object describes an account's current financing state. Used by Connect
7
+ # platforms to read the state of Capital offered to their connected accounts.
8
+ class FinancingSummary < SingletonAPIResource
9
+ OBJECT_NAME = "capital.financing_summary"
10
+ def self.object_name
11
+ "capital.financing_summary"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Capital
6
+ # This is an object representing the details of a transaction on a Capital financing object.
7
+ class FinancingTransaction < APIResource
8
+ extend Stripe::APIOperations::List
9
+
10
+ OBJECT_NAME = "capital.financing_transaction"
11
+ def self.object_name
12
+ "capital.financing_transaction"
13
+ end
14
+
15
+ # Returns a list of financing transactions. The transactions are returned in sorted order,
16
+ # with the most recent transactions appearing first.
17
+ def self.list(filters = {}, opts = {})
18
+ request_stripe_object(
19
+ method: :get,
20
+ path: "/v1/capital/financing_transactions",
21
+ params: filters,
22
+ opts: opts
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -6,12 +6,15 @@ module Stripe
6
6
  # A Financial Connections Account represents an account that exists outside of Stripe, to which you have been granted some degree of access.
7
7
  class Account < APIResource
8
8
  extend Stripe::APIOperations::List
9
+ extend Stripe::APIOperations::NestedResource
9
10
 
10
11
  OBJECT_NAME = "financial_connections.account"
11
12
  def self.object_name
12
13
  "financial_connections.account"
13
14
  end
14
15
 
16
+ nested_resource_class_methods :inferred_balance, operations: %i[list]
17
+
15
18
  # Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions).
16
19
  def disconnect(params = {}, opts = {})
17
20
  request_stripe_object(
@@ -0,0 +1,14 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module FinancialConnections
6
+ # A historical balance for the account on a particular day. It may be sourced from a balance snapshot provided by a financial institution, or inferred using transactions data.
7
+ class AccountInferredBalance < APIResource
8
+ OBJECT_NAME = "financial_connections.account_inferred_balance"
9
+ def self.object_name
10
+ "financial_connections.account_inferred_balance"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,59 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module GiftCards
6
+ # A gift card represents a single gift card owned by a customer, including the
7
+ # remaining balance, gift card code, and whether or not it is active.
8
+ class Card < APIResource
9
+ extend Stripe::APIOperations::Create
10
+ extend Stripe::APIOperations::List
11
+ include Stripe::APIOperations::Save
12
+
13
+ OBJECT_NAME = "gift_cards.card"
14
+ def self.object_name
15
+ "gift_cards.card"
16
+ end
17
+
18
+ # Creates a new gift card object.
19
+ def self.create(params = {}, opts = {})
20
+ request_stripe_object(
21
+ method: :post,
22
+ path: "/v1/gift_cards/cards",
23
+ params: params,
24
+ opts: opts
25
+ )
26
+ end
27
+
28
+ # List gift cards for an account
29
+ def self.list(filters = {}, opts = {})
30
+ request_stripe_object(
31
+ method: :get,
32
+ path: "/v1/gift_cards/cards",
33
+ params: filters,
34
+ opts: opts
35
+ )
36
+ end
37
+
38
+ # Update a gift card
39
+ def self.update(id, params = {}, opts = {})
40
+ request_stripe_object(
41
+ method: :post,
42
+ path: format("/v1/gift_cards/cards/%<id>s", { id: CGI.escape(id) }),
43
+ params: params,
44
+ opts: opts
45
+ )
46
+ end
47
+
48
+ # Validates a gift card code, returning the matching gift card object if it exists.
49
+ def self.validate(params = {}, opts = {})
50
+ request_stripe_object(
51
+ method: :post,
52
+ path: "/v1/gift_cards/cards/validate",
53
+ params: params,
54
+ opts: opts
55
+ )
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,93 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module GiftCards
6
+ # A gift card transaction represents a single transaction on a referenced gift card.
7
+ # A transaction is in one of three states, `confirmed`, `held` or `canceled`. A `confirmed`
8
+ # transaction is one that has added/deducted funds. A `held` transaction has created a
9
+ # temporary hold on funds, which can then be cancelled or confirmed. A `held` transaction
10
+ # can be confirmed into a `confirmed` transaction, or canceled into a `canceled` transaction.
11
+ # A `canceled` transaction has no effect on a gift card's balance.
12
+ class Transaction < APIResource
13
+ extend Stripe::APIOperations::Create
14
+ extend Stripe::APIOperations::List
15
+ include Stripe::APIOperations::Save
16
+
17
+ OBJECT_NAME = "gift_cards.transaction"
18
+ def self.object_name
19
+ "gift_cards.transaction"
20
+ end
21
+
22
+ # Cancel a gift card transaction
23
+ def cancel(params = {}, opts = {})
24
+ request_stripe_object(
25
+ method: :post,
26
+ path: format("/v1/gift_cards/transactions/%<id>s/cancel", { id: CGI.escape(self["id"]) }),
27
+ params: params,
28
+ opts: opts
29
+ )
30
+ end
31
+
32
+ # Cancel a gift card transaction
33
+ def self.cancel(id, params = {}, opts = {})
34
+ request_stripe_object(
35
+ method: :post,
36
+ path: format("/v1/gift_cards/transactions/%<id>s/cancel", { id: CGI.escape(id) }),
37
+ params: params,
38
+ opts: opts
39
+ )
40
+ end
41
+
42
+ # Confirm a gift card transaction
43
+ def confirm(params = {}, opts = {})
44
+ request_stripe_object(
45
+ method: :post,
46
+ path: format("/v1/gift_cards/transactions/%<id>s/confirm", { id: CGI.escape(self["id"]) }),
47
+ params: params,
48
+ opts: opts
49
+ )
50
+ end
51
+
52
+ # Confirm a gift card transaction
53
+ def self.confirm(id, params = {}, opts = {})
54
+ request_stripe_object(
55
+ method: :post,
56
+ path: format("/v1/gift_cards/transactions/%<id>s/confirm", { id: CGI.escape(id) }),
57
+ params: params,
58
+ opts: opts
59
+ )
60
+ end
61
+
62
+ # Create a gift card transaction
63
+ def self.create(params = {}, opts = {})
64
+ request_stripe_object(
65
+ method: :post,
66
+ path: "/v1/gift_cards/transactions",
67
+ params: params,
68
+ opts: opts
69
+ )
70
+ end
71
+
72
+ # List gift card transactions for a gift card
73
+ def self.list(filters = {}, opts = {})
74
+ request_stripe_object(
75
+ method: :get,
76
+ path: "/v1/gift_cards/transactions",
77
+ params: filters,
78
+ opts: opts
79
+ )
80
+ end
81
+
82
+ # Update a gift card transaction
83
+ def self.update(id, params = {}, opts = {})
84
+ request_stripe_object(
85
+ method: :post,
86
+ path: format("/v1/gift_cards/transactions/%<id>s", { id: CGI.escape(id) }),
87
+ params: params,
88
+ opts: opts
89
+ )
90
+ end
91
+ end
92
+ end
93
+ end
@@ -38,6 +38,7 @@ module Stripe
38
38
  extend Stripe::APIOperations::Create
39
39
  include Stripe::APIOperations::Delete
40
40
  extend Stripe::APIOperations::List
41
+ extend Stripe::APIOperations::NestedResource
41
42
  extend Stripe::APIOperations::Search
42
43
  include Stripe::APIOperations::Save
43
44
 
@@ -46,11 +47,83 @@ module Stripe
46
47
  "invoice"
47
48
  end
48
49
 
50
+ nested_resource_class_methods :payment, operations: %i[retrieve list]
51
+
52
+ # Adds multiple line items to an invoice. This is only possible when an invoice is still a draft.
53
+ def add_lines(params = {}, opts = {})
54
+ request_stripe_object(
55
+ method: :post,
56
+ path: format("/v1/invoices/%<invoice>s/add_lines", { invoice: CGI.escape(self["id"]) }),
57
+ params: params,
58
+ opts: opts
59
+ )
60
+ end
61
+
62
+ # Adds multiple line items to an invoice. This is only possible when an invoice is still a draft.
63
+ def self.add_lines(invoice, params = {}, opts = {})
64
+ request_stripe_object(
65
+ method: :post,
66
+ path: format("/v1/invoices/%<invoice>s/add_lines", { invoice: CGI.escape(invoice) }),
67
+ params: params,
68
+ opts: opts
69
+ )
70
+ end
71
+
72
+ # Attaches a PaymentIntent to the invoice, adding it to the list of payments.
73
+ # When the PaymentIntent's status changes to succeeded, the payment is credited
74
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
75
+ # invoice's status becomes paid.
76
+ #
77
+ # If the PaymentIntent's status is already succeeded when it is attached, it is
78
+ # credited to the invoice immediately.
79
+ #
80
+ # Related guide: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create)
81
+ def attach_payment_intent(params = {}, opts = {})
82
+ request_stripe_object(
83
+ method: :post,
84
+ path: format("/v1/invoices/%<invoice>s/attach_payment_intent", { invoice: CGI.escape(self["id"]) }),
85
+ params: params,
86
+ opts: opts
87
+ )
88
+ end
89
+
90
+ # Attaches a PaymentIntent to the invoice, adding it to the list of payments.
91
+ # When the PaymentIntent's status changes to succeeded, the payment is credited
92
+ # to the invoice, increasing its amount_paid. When the invoice is fully paid, the
93
+ # invoice's status becomes paid.
94
+ #
95
+ # If the PaymentIntent's status is already succeeded when it is attached, it is
96
+ # credited to the invoice immediately.
97
+ #
98
+ # Related guide: [Create an invoice payment](https://stripe.com/docs/invoicing/payments/create)
99
+ def self.attach_payment_intent(invoice, params = {}, opts = {})
100
+ request_stripe_object(
101
+ method: :post,
102
+ path: format("/v1/invoices/%<invoice>s/attach_payment_intent", { invoice: CGI.escape(invoice) }),
103
+ params: params,
104
+ opts: opts
105
+ )
106
+ end
107
+
49
108
  # 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.
50
109
  def self.create(params = {}, opts = {})
51
110
  request_stripe_object(method: :post, path: "/v1/invoices", params: params, opts: opts)
52
111
  end
53
112
 
113
+ # At any time, you can preview the upcoming invoice for a customer. This will show you all the charges that are pending, including subscription renewal charges, invoice item charges, etc. It will also show you any discounts that are applicable to the invoice.
114
+ #
115
+ # Note that when you are viewing an upcoming invoice, you are simply viewing a preview – the invoice has not yet been created. As such, the upcoming invoice will not show up in invoice listing calls, and you cannot use the API to pay or edit the invoice. If you want to change the amount that your customer will be billed, you can add, remove, or update pending invoice items, or update the customer's discount.
116
+ #
117
+ # You can preview the effects of updating a subscription, including a preview of what proration will take place. To ensure that the actual proration is calculated exactly the same as the previewed proration, you should pass the subscription_details.proration_date parameter when doing the actual subscription update. The recommended way to get only the prorations being previewed is to consider only proration line items where period[start] is equal to the subscription_details.proration_date value passed in the request.
118
+ def self.create_preview(params = {}, opts = {})
119
+ request_stripe_object(
120
+ method: :post,
121
+ path: "/v1/invoices/create_preview",
122
+ params: params,
123
+ opts: opts
124
+ )
125
+ end
126
+
54
127
  # Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://stripe.com/docs/api#void_invoice).
55
128
  def self.delete(id, params = {}, opts = {})
56
129
  request_stripe_object(
@@ -146,6 +219,26 @@ module Stripe
146
219
  )
147
220
  end
148
221
 
222
+ # Removes multiple line items from an invoice. This is only possible when an invoice is still a draft.
223
+ def remove_lines(params = {}, opts = {})
224
+ request_stripe_object(
225
+ method: :post,
226
+ path: format("/v1/invoices/%<invoice>s/remove_lines", { invoice: CGI.escape(self["id"]) }),
227
+ params: params,
228
+ opts: opts
229
+ )
230
+ end
231
+
232
+ # Removes multiple line items from an invoice. This is only possible when an invoice is still a draft.
233
+ def self.remove_lines(invoice, params = {}, opts = {})
234
+ request_stripe_object(
235
+ method: :post,
236
+ path: format("/v1/invoices/%<invoice>s/remove_lines", { invoice: CGI.escape(invoice) }),
237
+ params: params,
238
+ opts: opts
239
+ )
240
+ end
241
+
149
242
  def self.search(params = {}, opts = {})
150
243
  request_stripe_object(method: :get, path: "/v1/invoices/search", params: params, opts: opts)
151
244
  end
@@ -202,6 +295,26 @@ module Stripe
202
295
  )
203
296
  end
204
297
 
298
+ # Updates multiple line items on an invoice. This is only possible when an invoice is still a draft.
299
+ def update_lines(params = {}, opts = {})
300
+ request_stripe_object(
301
+ method: :post,
302
+ path: format("/v1/invoices/%<invoice>s/update_lines", { invoice: CGI.escape(self["id"]) }),
303
+ params: params,
304
+ opts: opts
305
+ )
306
+ end
307
+
308
+ # Updates multiple line items on an invoice. This is only possible when an invoice is still a draft.
309
+ def self.update_lines(invoice, params = {}, opts = {})
310
+ request_stripe_object(
311
+ method: :post,
312
+ path: format("/v1/invoices/%<invoice>s/update_lines", { invoice: CGI.escape(invoice) }),
313
+ params: params,
314
+ opts: opts
315
+ )
316
+ end
317
+
205
318
  # Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://stripe.com/docs/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found.
206
319
  #
207
320
  # Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or <a href="#create_credit_note">credit note](https://stripe.com/docs/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business.
@@ -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