diff --git a/app/models/purchase.rb b/app/models/purchase.rb index 5ba4b2b01e..1b7732e4ba 100644 --- a/app/models/purchase.rb +++ b/app/models/purchase.rb @@ -3151,6 +3151,8 @@ def create_sales_tax_info! self.purchase_sales_tax_info = purchase_sales_tax_info self.purchase_sales_tax_info.save! + + subscription&.update_business_vat_id!(purchase_sales_tax_info.business_vat_id) if purchase_sales_tax_info.business_vat_id.present? end def charge_discover_fee? diff --git a/app/models/subscription.rb b/app/models/subscription.rb index b76fe504c5..b82c8d4b98 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -263,7 +263,7 @@ def build_purchase(override_params: {}, from_failed_charge_email: false) end purchase.affiliate = original_purchase.affiliate if original_purchase.affiliate.try(:eligible_for_credit?) purchase.is_upgrade_purchase = is_upgrade_purchase if is_upgrade_purchase - get_vat_id_from_original_purchase(purchase) + set_vat_id_for_purchase(purchase) purchase end @@ -462,7 +462,7 @@ def update_current_plan!(new_variants:, new_price:, new_quantity: nil, perceived new_purchase.is_original_subscription_purchase = true new_purchase.perceived_price_cents = perceived_price_cents new_purchase.price_range = perceived_price_cents.present? ? perceived_price_cents / (link.single_unit_currency? ? 1 : 100.0) : nil - new_purchase.business_vat_id = original_purchase.purchase_sales_tax_info&.business_vat_id + new_purchase.business_vat_id = resolve_vat_id new_purchase.quantity = new_quantity if new_quantity.present? original_purchase.purchase_custom_fields.each { new_purchase.purchase_custom_fields << _1.dup } @@ -696,6 +696,29 @@ def resubscribe! end end + def update_business_vat_id!(vat_id) + update!(business_vat_id: vat_id) if vat_id.present? && business_vat_id.blank? + end + + # TODO: Remove fallback logic after running Onetime::BackfillSubscriptionVatIds + def resolve_vat_id + business_vat_id.presence || + original_purchase&.purchase_sales_tax_info&.business_vat_id.presence || + vat_id_from_original_purchase_refund || + vat_id_from_any_subscription_purchase_refund + end + + def vat_id_from_any_subscription_purchase_refund + Refund.joins(:purchase) + .where(purchases: { subscription_id: id }) + .where("refunds.gumroad_tax_cents > 0") + .where("refunds.amount_cents = 0") + .order("refunds.created_at DESC") + .limit(10) + .find { |refund| refund.business_vat_id.present? } + &.business_vat_id + end + def last_resubscribed_at if defined?(@_last_resubscribed_at) @_last_resubscribed_at @@ -935,12 +958,18 @@ def fetch_last_payment_option payment_options.alive.last end - def get_vat_id_from_original_purchase(purchase) - if original_purchase.purchase_sales_tax_info&.business_vat_id - purchase.business_vat_id = original_purchase.purchase_sales_tax_info.business_vat_id - elsif original_purchase.refunds.where("gumroad_tax_cents > 0").where("amount_cents = 0").exists? - purchase.business_vat_id = original_purchase.refunds.where("gumroad_tax_cents > 0").where("amount_cents = 0").first.business_vat_id - end + def set_vat_id_for_purchase(purchase) + vat_id = resolve_vat_id + purchase.business_vat_id = vat_id if vat_id.present? + end + + def vat_id_from_original_purchase_refund + original_purchase.refunds + .where("gumroad_tax_cents > 0") + .where("amount_cents = 0") + .order(created_at: :desc) + .find { |refund| refund.business_vat_id.present? } + &.business_vat_id end def schedule_member_cancellation_workflow_jobs diff --git a/app/modules/purchase/refundable.rb b/app/modules/purchase/refundable.rb index 321a842b84..388ea70104 100644 --- a/app/modules/purchase/refundable.rb +++ b/app/modules/purchase/refundable.rb @@ -294,6 +294,9 @@ def refund_gumroad_taxes!(refunding_user_id:, note: nil, business_vat_id: nil) refunds << refund save! Credit.create_for_vat_refund!(refund:) if paypal_order_id.present? || merchant_account&.is_a_stripe_connect_account? + + # Store VAT ID on subscription so future recurring charges are automatically VAT-exempt + subscription&.update_business_vat_id!(business_vat_id) if business_vat_id.present? end true rescue ChargeProcessorAlreadyRefundedError => e diff --git a/app/services/onetime/backfill_subscription_vat_ids.rb b/app/services/onetime/backfill_subscription_vat_ids.rb new file mode 100644 index 0000000000..665817e120 --- /dev/null +++ b/app/services/onetime/backfill_subscription_vat_ids.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Onetime + class BackfillSubscriptionVatIds + def self.process + new.process + end + + def process + count = 0 + + Subscription.where(business_vat_id: nil).find_each do |subscription| + vat_id = subscription.resolve_vat_id + next if vat_id.blank? + + subscription.update!(business_vat_id: vat_id) + count += 1 + + Rails.logger.info("Backfilled VAT ID for subscription #{subscription.id}") + ReplicaLagWatcher.watch + rescue StandardError => e + Rails.logger.error("Failed to backfill VAT ID for subscription #{subscription.id}: #{e.message}") + end + + Rails.logger.info("Backfilled VAT IDs for #{count} subscriptions") + count + end + end +end diff --git a/db/migrate/20251210053000_add_business_vat_id_to_subscriptions.rb b/db/migrate/20251210053000_add_business_vat_id_to_subscriptions.rb new file mode 100644 index 0000000000..f1330343e3 --- /dev/null +++ b/db/migrate/20251210053000_add_business_vat_id_to_subscriptions.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddBusinessVatIdToSubscriptions < ActiveRecord::Migration[7.1] + def change + add_column :subscriptions, :business_vat_id, :string, limit: 191 + end +end diff --git a/db/schema.rb b/db/schema.rb index 1d5dbb4c48..8f5ea13dc4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2171,6 +2171,7 @@ t.bigint "seller_id" t.string "token" t.datetime "token_expires_at" + t.string "business_vat_id", limit: 191 t.index ["cancelled_at"], name: "index_subscriptions_on_cancelled_at" t.index ["deactivated_at"], name: "index_subscriptions_on_deactivated_at" t.index ["ended_at"], name: "index_subscriptions_on_ended_at" diff --git a/spec/models/purchase_spec.rb b/spec/models/purchase_spec.rb index 1b7cfc4ae6..6af0e9ed54 100644 --- a/spec/models/purchase_spec.rb +++ b/spec/models/purchase_spec.rb @@ -3765,6 +3765,19 @@ def parse_zip(user_input_zip) expect(purchase.purchase_sales_tax_info).to eq(purchase_sales_tax_info) end + it "stores VAT ID on subscription when present in sales tax info" do + product = create(:subscription_product) + subscription = create(:subscription, link: product, business_vat_id: nil) + purchase = build(:free_purchase, link: product, subscription:, is_original_subscription_purchase: true, + country: "Ireland", business_vat_id: "IE6388047V") + + allow(VatValidationService).to receive_message_chain(:new, :process).and_return(true) + + purchase.send(:create_sales_tax_info!) + + expect(subscription.reload.business_vat_id).to eq "IE6388047V" + end + it "handles invalid countries from GEOIP lookup for IP address" do purchase = create(:purchase, price_cents: 100_00, chargeable: create(:chargeable)) purchase.sales_tax_country_code_election = Compliance::Countries::DEU.alpha2 diff --git a/spec/models/subscription_spec.rb b/spec/models/subscription_spec.rb index bbfb688b3b..dcf288f418 100644 --- a/spec/models/subscription_spec.rb +++ b/spec/models/subscription_spec.rb @@ -676,6 +676,51 @@ expect(charge_purchase.gumroad_tax_cents).to eq 0 end + it "transfers VAT ID from subscription's stored business_vat_id to recurring charge" do + create(:zip_tax_rate, country: "IT", zip_code: nil, state: nil, combined_rate: 0.22, is_seller_responsible: false) + + subscription = create(:subscription, user: create(:user, credit_card: create(:credit_card)), link: @product, business_vat_id: "IE6388047V") + original_purchase = create(:purchase, is_original_subscription_purchase: true, link: @product, + subscription:, chargeable: build(:chargeable), purchase_state: "in_progress", + full_name: "gum stein", ip_address: "2.47.255.255", country: "Italy", created_at: 2.days.ago) + original_purchase.process!(off_session: false) + expect(original_purchase.gumroad_tax_cents).to eq 22 + + subscription.charge! + charge_purchase = subscription.reload.purchases.last + expect(charge_purchase.purchase_state).to eq "successful" + expect(charge_purchase.purchase_sales_tax_info.business_vat_id).to eq "IE6388047V" + expect(charge_purchase.gumroad_tax_cents).to eq 0 + end + + it "transfers VAT ID from a recurring charge's VAT refund to subsequent recurring charges" do + create(:zip_tax_rate, country: "IT", zip_code: nil, state: nil, combined_rate: 0.22, is_seller_responsible: false) + + subscription = create(:subscription, user: create(:user, credit_card: create(:credit_card)), link: @product) + original_purchase = create(:purchase, is_original_subscription_purchase: true, link: @product, + subscription:, chargeable: build(:chargeable), purchase_state: "in_progress", + full_name: "gum stein", ip_address: "2.47.255.255", country: "Italy", created_at: 2.months.ago) + + travel_to(2.months.ago) do + original_purchase.process!(off_session: false) + expect(original_purchase.gumroad_tax_cents).to eq 22 + end + + travel_to(1.month.ago) do + first_recurring_purchase = subscription.charge! + expect(first_recurring_purchase.purchase_state).to eq "successful" + expect(first_recurring_purchase.gumroad_tax_cents).to eq 22 + + first_recurring_purchase.refund_gumroad_taxes!(refunding_user_id: @product.user.id, note: "Sample Note", business_vat_id: "IE6388047V") + expect(subscription.reload.business_vat_id).to eq "IE6388047V" + end + + second_recurring_purchase = subscription.charge! + expect(second_recurring_purchase.purchase_state).to eq "successful" + expect(second_recurring_purchase.purchase_sales_tax_info.business_vat_id).to eq "IE6388047V" + expect(second_recurring_purchase.gumroad_tax_cents).to eq 0 + end + describe "handling of unexpected errors", :vcr do context "when a rate limit error occurs" do it "does not leave the purchase in in_progress state" do @@ -3762,4 +3807,160 @@ end end end + + describe "#update_business_vat_id!" do + let(:seller) { create(:user) } + let(:product) { create(:subscription_product, user: seller) } + let(:subscription) { create(:subscription, link: product, business_vat_id: nil) } + + it "updates subscription's business_vat_id when not already set" do + subscription.update_business_vat_id!("IE6388047V") + + expect(subscription.reload.business_vat_id).to eq "IE6388047V" + end + + it "does not update subscription's business_vat_id when already set" do + subscription.update!(business_vat_id: "DE123456789") + + subscription.update_business_vat_id!("IE6388047V") + + expect(subscription.reload.business_vat_id).to eq "DE123456789" + end + + it "does not update subscription's business_vat_id when nil is provided" do + subscription.update_business_vat_id!(nil) + + expect(subscription.reload.business_vat_id).to be_nil + end + + it "does not update subscription's business_vat_id when empty string is provided" do + subscription.update_business_vat_id!("") + + expect(subscription.reload.business_vat_id).to be_nil + end + end + + describe "#resolve_vat_id" do + let(:seller) { create(:user) } + let(:product) { create(:subscription_product, user: seller) } + + before do + create(:zip_tax_rate, country: "IT", zip_code: nil, state: nil, combined_rate: 0.22, is_seller_responsible: false) + end + + it "prioritizes subscription's stored business_vat_id" do + subscription = create(:subscription, link: product, business_vat_id: "SUBSCRIPTION_VAT") + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + original_purchase.create_purchase_sales_tax_info!(business_vat_id: "PURCHASE_VAT", country_code: "IT") + + expect(subscription.resolve_vat_id).to eq "SUBSCRIPTION_VAT" + end + + it "falls back to original purchase's sales tax info" do + subscription = create(:subscription, link: product, business_vat_id: nil) + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + original_purchase.create_purchase_sales_tax_info!(business_vat_id: "PURCHASE_VAT", country_code: "IT") + + expect(subscription.resolve_vat_id).to eq "PURCHASE_VAT" + end + + it "falls back to original purchase's VAT refund" do + subscription = create(:subscription, link: product, business_vat_id: nil) + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:, country: "Italy") + create(:refund, purchase: original_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: "REFUND_VAT") + + expect(subscription.resolve_vat_id).to eq "REFUND_VAT" + end + + it "falls back to any subscription purchase's VAT refund" do + subscription = create(:subscription, link: product, business_vat_id: nil) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + recurring_purchase = create(:free_purchase, is_original_subscription_purchase: false, link: product, subscription:, country: "Italy") + create(:refund, purchase: recurring_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: "RECURRING_REFUND_VAT") + + expect(subscription.resolve_vat_id).to eq "RECURRING_REFUND_VAT" + end + + it "returns nil when no VAT ID exists" do + subscription = create(:subscription, link: product, business_vat_id: nil) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + + expect(subscription.resolve_vat_id).to be_nil + end + end + + describe "VAT ID lookup methods" do + let(:seller) { create(:user) } + let(:product) { create(:subscription_product, user: seller) } + + before do + create(:zip_tax_rate, country: "IT", zip_code: nil, state: nil, combined_rate: 0.22, is_seller_responsible: false) + end + + describe "#vat_id_from_original_purchase_refund" do + it "returns the VAT ID from the most recent VAT-only refund on original purchase" do + subscription = create(:subscription, link: product) + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription:, full_name: "gum stein", country: "Italy") + create(:refund, purchase: original_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: "IE6388047V") + + result = subscription.send(:vat_id_from_original_purchase_refund) + expect(result).to eq "IE6388047V" + end + + it "returns nil when no VAT-only refunds exist" do + subscription = create(:subscription, link: product) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + + result = subscription.send(:vat_id_from_original_purchase_refund) + expect(result).to be_nil + end + + it "returns nil when refunds exist but don't have a business_vat_id" do + subscription = create(:subscription, link: product) + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + create(:refund, purchase: original_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: nil) + + result = subscription.send(:vat_id_from_original_purchase_refund) + expect(result).to be_nil + end + end + + describe "#vat_id_from_any_subscription_purchase_refund" do + it "returns the VAT ID from a VAT-only refund on any subscription purchase" do + subscription = create(:subscription, link: product) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + recurring_purchase = create(:free_purchase, is_original_subscription_purchase: false, link: product, + subscription:, country: "Italy") + create(:refund, purchase: recurring_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: "DE987654321") + + result = subscription.send(:vat_id_from_any_subscription_purchase_refund) + expect(result).to eq "DE987654321" + end + + it "returns nil when no VAT-only refunds with business_vat_id exist" do + subscription = create(:subscription, link: product) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + + result = subscription.send(:vat_id_from_any_subscription_purchase_refund) + expect(result).to be_nil + end + + it "returns the most recent VAT ID when multiple refunds exist" do + subscription = create(:subscription, link: product) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + recurring_purchase1 = create(:free_purchase, is_original_subscription_purchase: false, link: product, + subscription:, country: "Italy") + recurring_purchase2 = create(:free_purchase, is_original_subscription_purchase: false, link: product, + subscription:, country: "Italy") + create(:refund, purchase: recurring_purchase1, gumroad_tax_cents: 22, amount_cents: 0, + business_vat_id: "OLD_VAT_ID", created_at: 2.days.ago) + create(:refund, purchase: recurring_purchase2, gumroad_tax_cents: 22, amount_cents: 0, + business_vat_id: "NEW_VAT_ID", created_at: 1.day.ago) + + result = subscription.send(:vat_id_from_any_subscription_purchase_refund) + expect(result).to eq "NEW_VAT_ID" + end + end + end end diff --git a/spec/services/onetime/backfill_subscription_vat_ids_spec.rb b/spec/services/onetime/backfill_subscription_vat_ids_spec.rb new file mode 100644 index 0000000000..d234976c3d --- /dev/null +++ b/spec/services/onetime/backfill_subscription_vat_ids_spec.rb @@ -0,0 +1,88 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe Onetime::BackfillSubscriptionVatIds do + describe ".process" do + let(:seller) { create(:user) } + let(:product) { create(:subscription_product, user: seller) } + + before do + create(:zip_tax_rate, country: "IT", zip_code: nil, state: nil, combined_rate: 0.22, is_seller_responsible: false) + end + + it "backfills VAT ID from original purchase's sales tax info" do + subscription = create(:subscription, link: product, business_vat_id: nil) + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription:, full_name: "gum stein", country: "Italy") + original_purchase.create_purchase_sales_tax_info!(business_vat_id: "IE6388047V", country_code: "IT") + + expect { described_class.process }.to change { subscription.reload.business_vat_id }.from(nil).to("IE6388047V") + end + + it "backfills VAT ID from VAT refund on any subscription purchase" do + subscription = create(:subscription, link: product, business_vat_id: nil) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + recurring_purchase = create(:free_purchase, is_original_subscription_purchase: false, link: product, + subscription:, country: "Italy") + create(:refund, purchase: recurring_purchase, gumroad_tax_cents: 22, amount_cents: 0, business_vat_id: "IE6388047V") + + expect { described_class.process }.to change { subscription.reload.business_vat_id }.from(nil).to("IE6388047V") + end + + it "does not update subscriptions that already have a VAT ID" do + subscription = create(:subscription, link: product, business_vat_id: "DE123456789") + original_purchase = create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + original_purchase.create_purchase_sales_tax_info!(business_vat_id: "IE6388047V", country_code: "IT") + + expect { described_class.process }.not_to change { subscription.reload.business_vat_id } + end + + it "skips subscriptions without any VAT ID source" do + subscription = create(:subscription, link: product, business_vat_id: nil) + create(:free_purchase, is_original_subscription_purchase: true, link: product, subscription:) + + expect { described_class.process }.not_to change { subscription.reload.business_vat_id } + end + + it "returns count of backfilled subscriptions" do + subscription1 = create(:subscription, link: product, business_vat_id: nil) + subscription2 = create(:subscription, link: product, business_vat_id: nil) + + original_purchase1 = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription: subscription1) + original_purchase1.create_purchase_sales_tax_info!(business_vat_id: "IE6388047V", country_code: "IT") + + original_purchase2 = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription: subscription2) + original_purchase2.create_purchase_sales_tax_info!(business_vat_id: "DE123456789", country_code: "DE") + + count = described_class.process + + expect(count).to eq 2 + end + + it "continues processing if one subscription fails" do + subscription1 = create(:subscription, link: product, business_vat_id: nil) + subscription2 = create(:subscription, link: product, business_vat_id: nil) + + original_purchase1 = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription: subscription1) + original_purchase1.create_purchase_sales_tax_info!(business_vat_id: "IE6388047V", country_code: "IT") + + original_purchase2 = create(:free_purchase, is_original_subscription_purchase: true, link: product, + subscription: subscription2) + original_purchase2.create_purchase_sales_tax_info!(business_vat_id: "DE123456789", country_code: "DE") + + call_count = 0 + allow_any_instance_of(Subscription).to receive(:update!).and_wrap_original do |method, *args| + call_count += 1 + raise StandardError.new("Test error") if call_count == 1 + method.call(*args) + end + + expect { described_class.process }.not_to raise_error + expect(subscription2.reload.business_vat_id).to eq "DE123456789" + end + end +end diff --git a/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_a_recurring_charge_s_VAT_refund_to_subsequent_recurring_charges.yml b/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_a_recurring_charge_s_VAT_refund_to_subsequent_recurring_charges.yml new file mode 100644 index 0000000000..c95ce7a791 --- /dev/null +++ b/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_a_recurring_charge_s_VAT_refund_to_subsequent_recurring_charges.yml @@ -0,0 +1,2960 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + Idempotency-Key: + - '02280a7b-34d7-4e3f-857c-3b19913d652a' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:17 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - '02280a7b-34d7-4e3f-857c-3b19913d652a' + Original-Request: + - req_mG08OReJyUj8yU + Request-Id: + - req_mG08OReJyUj8yU + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCDIBOqvOFDrf6ofo81Nw", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345457, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:44:17 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgCDIBOqvOFDrf6ofo81Nw + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_mG08OReJyUj8yU","request_duration_ms":536}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:17 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_a1EQmHO2gnKfFS + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCDIBOqvOFDrf6ofo81Nw", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345457, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:44:17 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgCDIBOqvOFDrf6ofo81Nw + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_a1EQmHO2gnKfFS","request_duration_ms":451}}' + Idempotency-Key: + - 044ae921-270b-4a1e-98bd-21e68a4bddbb + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:18 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 044ae921-270b-4a1e-98bd-21e68a4bddbb + Original-Request: + - req_IJY8UYyoAcAZw0 + Request-Id: + - req_IJY8UYyoAcAZw0 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZprhb3MXewBqP", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345458, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "PZC4B7N7", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:44:18 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_IJY8UYyoAcAZw0","request_duration_ms":718}}' + Idempotency-Key: + - a873efef-87ac-4c7f-9732-8d963ee4ea17 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:19 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - a873efef-87ac-4c7f-9732-8d963ee4ea17 + Original-Request: + - req_L3UOTnsWmoeer6 + Request-Id: + - req_L3UOTnsWmoeer6 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345458, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:44:19 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgCEIBOqvOFDrf8Ylbbyoy + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_L3UOTnsWmoeer6","request_duration_ms":401}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:19 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_tymQHS4HBRA4lF + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345458, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:44:19 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgCEIBOqvOFDrf8Ylbbyoy + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_tymQHS4HBRA4lF","request_duration_ms":301}}' + Idempotency-Key: + - 72fbe964-08af-4477-a598-25c8683ae3de + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:20 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 72fbe964-08af-4477-a598-25c8683ae3de + Original-Request: + - req_rrlYLSfEmJ1MDx + Request-Id: + - req_rrlYLSfEmJ1MDx + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZprrCyjfLGT82", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345459, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "XXKDYQ0M", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:44:20 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_rrlYLSfEmJ1MDx","request_duration_ms":815}}' + Idempotency-Key: + - '05484803-312f-4038-afb3-a168b17d37c3' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:20 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - '05484803-312f-4038-afb3-a168b17d37c3' + Original-Request: + - req_86JetYM7a9hd7F + Request-Id: + - req_86JetYM7a9hd7F + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCGIBOqvOFDrfZU90VIoR", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345460, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:44:20 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgCGIBOqvOFDrfZU90VIoR + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_86JetYM7a9hd7F","request_duration_ms":326}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:21 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_Jjx4MsKascD0MQ + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgCGIBOqvOFDrfZU90VIoR", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345460, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Fri, 10 Oct 2025 05:44:20 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgCGIBOqvOFDrfZU90VIoR + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_Jjx4MsKascD0MQ","request_duration_ms":305}}' + Idempotency-Key: + - fe590a84-2875-4699-8e4d-2ce4e90a8820 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:21 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - fe590a84-2875-4699-8e4d-2ce4e90a8820 + Original-Request: + - req_XCgREV2AhFbW8h + Request-Id: + - req_XCgREV2AhFbW8h + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpseaA8iJhpzc", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345461, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "QLXUYDNT", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Fri, 10 Oct 2025 05:44:20 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents + body: + encoding: UTF-8 + string: amount=122¤cy=usd&description=You+bought+http%3A%2F%2Fedgar2b7186d51.test.gumroad.com%3A31337%2Fl%2Fw%21&metadata[purchase]=HzC3Xn2aCZdT0oemNBZWnA%3D%3D&transfer_group=36&payment_method_types[0]=card&off_session=false&setup_future_usage=off_session&customer=cus_TZpseaA8iJhpzc&payment_method=pm_1ScgCGIBOqvOFDrfZU90VIoR&statement_descriptor_suffix=edgar2b7186d51 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_XCgREV2AhFbW8h","request_duration_ms":699}}' + Idempotency-Key: + - 29d2b237-e688-4e5c-a1b8-4831aeb1ba18 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:22 GMT + Content-Type: + - application/json + Content-Length: + - '1556' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 29d2b237-e688-4e5c-a1b8-4831aeb1ba18 + Original-Request: + - req_dMQkON9vEjkMUT + Request-Id: + - req_dMQkON9vEjkMUT + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgCIIBOqvOFDrf0dVaHE3B", + "object": "payment_intent", + "amount": 122, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 0, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgCIIBOqvOFDrf0dVaHE3B_secret_OhkWixIYU9nrR87KGLIBko4Vq", + "confirmation_method": "automatic", + "created": 1765345462, + "currency": "usd", + "customer": "cus_TZpseaA8iJhpzc", + "customer_account": null, + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": null, + "livemode": false, + "metadata": { + "purchase": "HzC3Xn2aCZdT0oemNBZWnA==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgCGIBOqvOFDrfZU90VIoR", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": "off_session", + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "requires_confirmation", + "transfer_data": null, + "transfer_group": "36" + } + recorded_at: Fri, 10 Oct 2025 05:44:20 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents/pi_3ScgCIIBOqvOFDrf0dVaHE3B/confirm + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_dMQkON9vEjkMUT","request_duration_ms":346}}' + Idempotency-Key: + - 9738055a-b9a4-4c53-a873-6dde0a0cb054 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:23 GMT + Content-Type: + - application/json + Content-Length: + - '1571' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 9738055a-b9a4-4c53-a873-6dde0a0cb054 + Original-Request: + - req_F51GfK8JcCrnxl + Request-Id: + - req_F51GfK8JcCrnxl + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgCIIBOqvOFDrf0dVaHE3B", + "object": "payment_intent", + "amount": 122, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 122, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgCIIBOqvOFDrf0dVaHE3B_secret_OhkWixIYU9nrR87KGLIBko4Vq", + "confirmation_method": "automatic", + "created": 1765345462, + "currency": "usd", + "customer": "cus_TZpseaA8iJhpzc", + "customer_account": null, + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_3ScgCIIBOqvOFDrf05IKOllm", + "livemode": false, + "metadata": { + "purchase": "HzC3Xn2aCZdT0oemNBZWnA==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgCGIBOqvOFDrfZU90VIoR", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": "off_session", + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "36" + } + recorded_at: Fri, 10 Oct 2025 05:44:20 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgCIIBOqvOFDrf05IKOllm?expand%5B%5D=application_fee.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_F51GfK8JcCrnxl","request_duration_ms":1098}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:23 GMT + Content-Type: + - application/json + Content-Length: + - '3737' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_e7lMR8xQYlJyxJ + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgCIIBOqvOFDrf05IKOllm", + "object": "charge", + "amount": 122, + "amount_captured": 122, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgCIIBOqvOFDrf0LoFyZQT", + "object": "balance_transaction", + "amount": 122, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345462, + "currency": "usd", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "exchange_rate": null, + "fee": 34, + "fee_details": [ + { + "amount": 34, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 88, + "reporting_category": "charge", + "source": "ch_3ScgCIIBOqvOFDrf05IKOllm", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR2B7186D51", + "captured": true, + "created": 1765345462, + "currency": "usd", + "customer": "cus_TZpseaA8iJhpzc", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "HzC3Xn2aCZdT0oemNBZWnA==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 7, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgCIIBOqvOFDrf0dVaHE3B", + "payment_method": "pm_1ScgCGIBOqvOFDrfZU90VIoR", + "payment_method_details": { + "card": { + "amount_authorized": 122, + "authorization_code": "668442", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 122, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKLeR5MkGMgYf6TY14lA6LBYvJ__vYKrMCjCNbBMyEbB3HkaH56NjrRUj8W0dSCH-Sek9wYoZszjwMBQc", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "36" + } + recorded_at: Fri, 10 Oct 2025 05:44:20 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents + body: + encoding: UTF-8 + string: amount=122¤cy=usd&description=You+bought+http%3A%2F%2Fedgar2b7186d51.test.gumroad.com%3A31337%2Fl%2Fw%21&metadata[purchase]=Htnx4QAw5rFtt1IRgykb8w%3D%3D&transfer_group=37&payment_method_types[0]=card&off_session=true&confirm=true&customer=cus_TZprrCyjfLGT82&payment_method=pm_1ScgCEIBOqvOFDrf8Ylbbyoy&statement_descriptor_suffix=edgar2b7186d51 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_e7lMR8xQYlJyxJ","request_duration_ms":369}}' + Idempotency-Key: + - 2de5f469-6406-46bb-844f-d9a07f3ae592 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:25 GMT + Content-Type: + - application/json + Content-Length: + - '1562' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 2de5f469-6406-46bb-844f-d9a07f3ae592 + Original-Request: + - req_KYfjMyRKE3fx5m + Request-Id: + - req_KYfjMyRKE3fx5m + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgCKIBOqvOFDrf0063kH60", + "object": "payment_intent", + "amount": 122, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 122, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgCKIBOqvOFDrf0063kH60_secret_ZUNnBhHp6JRvAoO3aKfQc5mR1", + "confirmation_method": "automatic", + "created": 1765345464, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "customer_account": null, + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "livemode": false, + "metadata": { + "purchase": "Htnx4QAw5rFtt1IRgykb8w==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "37" + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgCKIBOqvOFDrf0rjyBi6W?expand%5B%5D=application_fee.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_KYfjMyRKE3fx5m","request_duration_ms":1146}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:25 GMT + Content-Type: + - application/json + Content-Length: + - '3737' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_pu3Za0ipUxDFqq + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "object": "charge", + "amount": 122, + "amount_captured": 122, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgCKIBOqvOFDrf0wYRjKEL", + "object": "balance_transaction", + "amount": 122, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345464, + "currency": "usd", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "exchange_rate": null, + "fee": 34, + "fee_details": [ + { + "amount": 34, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 88, + "reporting_category": "charge", + "source": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR2B7186D51", + "captured": true, + "created": 1765345464, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "Htnx4QAw5rFtt1IRgykb8w==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 1, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgCKIBOqvOFDrf0063kH60", + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_details": { + "card": { + "amount_authorized": 122, + "authorization_code": "260656", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 122, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKLmR5MkGMgZhgRhLhPk6LBZMa1gDik5TDa6ZGHNOZ_4-yVhfatNGXgnRtVSEqpPE1ci_A8xrJjmUGjqn", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "37" + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgCKIBOqvOFDrf0rjyBi6W + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_pu3Za0ipUxDFqq","request_duration_ms":352}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:26 GMT + Content-Type: + - application/json + Content-Length: + - '3083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_QtToPTFsz0DxqE + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "object": "charge", + "amount": 122, + "amount_captured": 122, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": "txn_3ScgCKIBOqvOFDrf0wYRjKEL", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR2B7186D51", + "captured": true, + "created": 1765345464, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "Htnx4QAw5rFtt1IRgykb8w==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 1, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgCKIBOqvOFDrf0063kH60", + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_details": { + "card": { + "amount_authorized": 122, + "authorization_code": "260656", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 122, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKLmR5MkGMgaUxuI9tis6LBYXNJXcMEipY0NHseUJjiOO7dXv4u8OVrJrs1Aa98ppO4DeSH-e0KiR9XMh", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "37" + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: post + uri: https://api.stripe.com/v1/refunds + body: + encoding: UTF-8 + string: charge=ch_3ScgCKIBOqvOFDrf0rjyBi6W&amount=22 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_QtToPTFsz0DxqE","request_duration_ms":331}}' + Idempotency-Key: + - 3163dbd8-ac89-49f6-bcbf-33e2b7c206c5 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:26 GMT + Content-Type: + - application/json + Content-Length: + - '613' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 3163dbd8-ac89-49f6-bcbf-33e2b7c206c5 + Original-Request: + - req_qfkX0gTsHJH2XY + Request-Id: + - req_qfkX0gTsHJH2XY + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "re_3ScgCKIBOqvOFDrf0V1i2Vmk", + "object": "refund", + "amount": 22, + "balance_transaction": "txn_3ScgCKIBOqvOFDrf0ccsOh66", + "charge": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "created": 1765345466, + "currency": "usd", + "destination_details": { + "card": { + "reference_status": "pending", + "reference_type": "acquirer_reference_number", + "type": "refund" + }, + "type": "card" + }, + "metadata": {}, + "payment_intent": "pi_3ScgCKIBOqvOFDrf0063kH60", + "reason": null, + "receipt_number": null, + "source_transfer_reversal": null, + "status": "succeeded", + "transfer_reversal": null + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: get + uri: https://api.stripe.com/v1/refunds/re_3ScgCKIBOqvOFDrf0V1i2Vmk?expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_qfkX0gTsHJH2XY","request_duration_ms":1292}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:27 GMT + Content-Type: + - application/json + Content-Length: + - '1151' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_0KndVJ5lC0f06c + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "re_3ScgCKIBOqvOFDrf0V1i2Vmk", + "object": "refund", + "amount": 22, + "balance_transaction": { + "id": "txn_3ScgCKIBOqvOFDrf0ccsOh66", + "object": "balance_transaction", + "amount": -22, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345466, + "currency": "usd", + "description": "REFUND FOR CHARGE (You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!)", + "exchange_rate": null, + "fee": 0, + "fee_details": [], + "net": -22, + "reporting_category": "refund", + "source": "re_3ScgCKIBOqvOFDrf0V1i2Vmk", + "status": "pending", + "type": "refund" + }, + "charge": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "created": 1765345466, + "currency": "usd", + "destination_details": { + "card": { + "reference": "2093740096031595", + "reference_status": "available", + "reference_type": "acquirer_reference_number", + "type": "refund" + }, + "type": "card" + }, + "metadata": {}, + "payment_intent": "pi_3ScgCKIBOqvOFDrf0063kH60", + "reason": null, + "receipt_number": null, + "source_transfer_reversal": null, + "status": "succeeded", + "transfer_reversal": null + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgCKIBOqvOFDrf0rjyBi6W?expand%5B%5D=application_fee.refunds.data.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_0KndVJ5lC0f06c","request_duration_ms":355}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:28 GMT + Content-Type: + - application/json + Content-Length: + - '3738' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_7xth0IATuCaBxX + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "object": "charge", + "amount": 122, + "amount_captured": 122, + "amount_refunded": 22, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgCKIBOqvOFDrf0wYRjKEL", + "object": "balance_transaction", + "amount": 122, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345464, + "currency": "usd", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "exchange_rate": null, + "fee": 34, + "fee_details": [ + { + "amount": 34, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 88, + "reporting_category": "charge", + "source": "ch_3ScgCKIBOqvOFDrf0rjyBi6W", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR2B7186D51", + "captured": true, + "created": 1765345464, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "Htnx4QAw5rFtt1IRgykb8w==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 1, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgCKIBOqvOFDrf0063kH60", + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_details": { + "card": { + "amount_authorized": 122, + "authorization_code": "260656", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 122, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKLuR5MkGMgYuWWOvVb06LBbqhUKkkNoehPG7Ug8X392R1Z9s-ZKklh710CpjM4_O_r_Yo4TuUBqZHRAb", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "37" + } + recorded_at: Mon, 10 Nov 2025 05:44:23 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents + body: + encoding: UTF-8 + string: amount=100¤cy=usd&description=You+bought+http%3A%2F%2Fedgar2b7186d51.test.gumroad.com%3A31337%2Fl%2Fw%21&metadata[purchase]=8tlJ6g_aQ9JEqFima7o3kw%3D%3D&transfer_group=38&payment_method_types[0]=card&off_session=true&confirm=true&customer=cus_TZprrCyjfLGT82&payment_method=pm_1ScgCEIBOqvOFDrf8Ylbbyoy&statement_descriptor_suffix=edgar2b7186d51 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_7xth0IATuCaBxX","request_duration_ms":345}}' + Idempotency-Key: + - 8b350390-7a33-4c49-a4bb-c3b73a13af62 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:30 GMT + Content-Type: + - application/json + Content-Length: + - '1562' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Idempotency-Key: + - 8b350390-7a33-4c49-a4bb-c3b73a13af62 + Original-Request: + - req_Vu0wKXbOLMSexp + Request-Id: + - req_Vu0wKXbOLMSexp + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgCPIBOqvOFDrf05mqY3hm", + "object": "payment_intent", + "amount": 100, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 100, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgCPIBOqvOFDrf05mqY3hm_secret_jMmondAE1ZCOY94tyntcbyDFS", + "confirmation_method": "automatic", + "created": 1765345469, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "customer_account": null, + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_3ScgCPIBOqvOFDrf0yNTovmM", + "livemode": false, + "metadata": { + "purchase": "8tlJ6g_aQ9JEqFima7o3kw==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "38" + } + recorded_at: Wed, 10 Dec 2025 05:44:30 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgCPIBOqvOFDrf0yNTovmM?expand%5B%5D=application_fee.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_Vu0wKXbOLMSexp","request_duration_ms":1106}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:44:30 GMT + Content-Type: + - application/json + Content-Length: + - '3738' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=M3pQohS3iBBLbe_l9G8Upt58KOiYZ8sDy2AES8UtP6oBy6omTlUjr3k_a90nccxNhNCVGYJ7O9f6xamH + Request-Id: + - req_Sd2U0eZD75AqoH + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgCPIBOqvOFDrf0yNTovmM", + "object": "charge", + "amount": 100, + "amount_captured": 100, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgCPIBOqvOFDrf0SA1RUO5", + "object": "balance_transaction", + "amount": 100, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345469, + "currency": "usd", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "exchange_rate": null, + "fee": 33, + "fee_details": [ + { + "amount": 33, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 67, + "reporting_category": "charge", + "source": "ch_3ScgCPIBOqvOFDrf0yNTovmM", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR2B7186D51", + "captured": true, + "created": 1765345469, + "currency": "usd", + "customer": "cus_TZprrCyjfLGT82", + "description": "You bought http://edgar2b7186d51.test.gumroad.com:31337/l/w!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "8tlJ6g_aQ9JEqFima7o3kw==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 30, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgCPIBOqvOFDrf05mqY3hm", + "payment_method": "pm_1ScgCEIBOqvOFDrf8Ylbbyoy", + "payment_method_details": { + "card": { + "amount_authorized": 100, + "authorization_code": "917849", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 100, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKL6R5MkGMgY9NUkvzvI6LBZ3MIk2n06vNqQEVuOioUatzKMOMw1vvqLA7s8glftHQb1iYdMlCKT75hR2", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar2b7186d51", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "38" + } + recorded_at: Wed, 10 Dec 2025 05:44:30 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_subscription_s_stored_business_vat_id_to_recurring_charge.yml b/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_subscription_s_stored_business_vat_id_to_recurring_charge.yml new file mode 100644 index 0000000000..76f34d81e2 --- /dev/null +++ b/spec/support/fixtures/vcr_cassettes/Subscription/_charge_/transfers_VAT_ID_from_subscription_s_stored_business_vat_id_to_recurring_charge.yml @@ -0,0 +1,1978 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_W6fZcyn0wkdVa4","request_duration_ms":1}}' + Idempotency-Key: + - 43b804b1-fd34-40d8-9883-bb0ee6fbdc00 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:49 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 43b804b1-fd34-40d8-9883-bb0ee6fbdc00 + Original-Request: + - req_UFVWMhdH573AUA + Request-Id: + - req_UFVWMhdH573AUA + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAnIBOqvOFDrf3stzrYHz", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345369, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:49 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgAnIBOqvOFDrf3stzrYHz + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_UFVWMhdH573AUA","request_duration_ms":602}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:49 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Request-Id: + - req_gdF8cgfWWOgiXk + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAnIBOqvOFDrf3stzrYHz", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345369, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:49 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgAnIBOqvOFDrf3stzrYHz + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_gdF8cgfWWOgiXk","request_duration_ms":324}}' + Idempotency-Key: + - 61c86ced-2736-42ef-a99b-453cd3e4b476 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:50 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 61c86ced-2736-42ef-a99b-453cd3e4b476 + Original-Request: + - req_8YsYqgZYqFfgwC + Request-Id: + - req_8YsYqgZYqFfgwC + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpqESLLaXv4IW", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345370, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "WN0BLROO", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:42:50 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_8YsYqgZYqFfgwC","request_duration_ms":780}}' + Idempotency-Key: + - 9b0ca338-e72a-4ee5-a48b-6df6b93f3786 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:51 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 9b0ca338-e72a-4ee5-a48b-6df6b93f3786 + Original-Request: + - req_Sy9e0soUBpzPk1 + Request-Id: + - req_Sy9e0soUBpzPk1 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAoIBOqvOFDrfRE2YERAh", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345371, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:51 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgAoIBOqvOFDrfRE2YERAh + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_Sy9e0soUBpzPk1","request_duration_ms":446}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:51 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Request-Id: + - req_JsRTKzWtTtswlq + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAoIBOqvOFDrfRE2YERAh", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345371, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:51 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgAoIBOqvOFDrfRE2YERAh + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_JsRTKzWtTtswlq","request_duration_ms":324}}' + Idempotency-Key: + - 3f2e3297-c4aa-4c58-9154-b7ea4c3943c8 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:52 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 3f2e3297-c4aa-4c58-9154-b7ea4c3943c8 + Original-Request: + - req_VLFsoMpVs6YcsK + Request-Id: + - req_VLFsoMpVs6YcsK + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpqJ5pCslWMJk", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345371, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "6EALKFPA", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:42:52 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_VLFsoMpVs6YcsK","request_duration_ms":716}}' + Idempotency-Key: + - 3277aad5-a7a5-4dcb-b40f-20041a11acea + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:52 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 3277aad5-a7a5-4dcb-b40f-20041a11acea + Original-Request: + - req_VSLQ4h4kx4ozQk + Request-Id: + - req_VSLQ4h4kx4ozQk + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAqIBOqvOFDrfulufOg0k", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345372, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:52 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1ScgAqIBOqvOFDrfulufOg0k + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_VSLQ4h4kx4ozQk","request_duration_ms":327}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:53 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Request-Id: + - req_9s95eFzDIYQqHh + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1ScgAqIBOqvOFDrfulufOg0k", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345372, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:42:53 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1ScgAqIBOqvOFDrfulufOg0k + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_9s95eFzDIYQqHh","request_duration_ms":614}}' + Idempotency-Key: + - '07418cfd-848f-4fbb-af96-91ba1964afe4' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:54 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - '07418cfd-848f-4fbb-af96-91ba1964afe4' + Original-Request: + - req_rxGNKfx5Og4EFp + Request-Id: + - req_rxGNKfx5Og4EFp + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpq4oIp9fzLmY", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345373, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "MXY752UG", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:42:54 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents + body: + encoding: UTF-8 + string: amount=122¤cy=usd&description=You+bought+http%3A%2F%2Fedgar02866c987.test.gumroad.com%3A31337%2Fl%2Fa%21&metadata[purchase]=PH9MZRiDkh_gD1YVEZY2YA%3D%3D&transfer_group=26&payment_method_types[0]=card&off_session=false&setup_future_usage=off_session&customer=cus_TZpq4oIp9fzLmY&payment_method=pm_1ScgAqIBOqvOFDrfulufOg0k&statement_descriptor_suffix=edgar02866c987 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_rxGNKfx5Og4EFp","request_duration_ms":744}}' + Idempotency-Key: + - dd3435ba-d426-4538-8640-2097cf88d2c2 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:54 GMT + Content-Type: + - application/json + Content-Length: + - '1556' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - dd3435ba-d426-4538-8640-2097cf88d2c2 + Original-Request: + - req_SX51S1ceIVlVTr + Request-Id: + - req_SX51S1ceIVlVTr + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgAsIBOqvOFDrf0oIop9hF", + "object": "payment_intent", + "amount": 122, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 0, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgAsIBOqvOFDrf0oIop9hF_secret_3PkMxNMifbEBYvOnSn8n4XHom", + "confirmation_method": "automatic", + "created": 1765345374, + "currency": "usd", + "customer": "cus_TZpq4oIp9fzLmY", + "customer_account": null, + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": null, + "livemode": false, + "metadata": { + "purchase": "PH9MZRiDkh_gD1YVEZY2YA==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgAqIBOqvOFDrfulufOg0k", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": "off_session", + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar02866c987", + "status": "requires_confirmation", + "transfer_data": null, + "transfer_group": "26" + } + recorded_at: Wed, 10 Dec 2025 05:42:54 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents/pi_3ScgAsIBOqvOFDrf0oIop9hF/confirm + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_SX51S1ceIVlVTr","request_duration_ms":387}}' + Idempotency-Key: + - fbaaff44-7a0c-4ab7-b0f9-245dfeb6fbdb + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:55 GMT + Content-Type: + - application/json + Content-Length: + - '1571' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - fbaaff44-7a0c-4ab7-b0f9-245dfeb6fbdb + Original-Request: + - req_0l4a5xCZDvu5ty + Request-Id: + - req_0l4a5xCZDvu5ty + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgAsIBOqvOFDrf0oIop9hF", + "object": "payment_intent", + "amount": 122, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 122, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgAsIBOqvOFDrf0oIop9hF_secret_3PkMxNMifbEBYvOnSn8n4XHom", + "confirmation_method": "automatic", + "created": 1765345374, + "currency": "usd", + "customer": "cus_TZpq4oIp9fzLmY", + "customer_account": null, + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_3ScgAsIBOqvOFDrf0tjDLbuC", + "livemode": false, + "metadata": { + "purchase": "PH9MZRiDkh_gD1YVEZY2YA==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgAqIBOqvOFDrfulufOg0k", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": "off_session", + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar02866c987", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "26" + } + recorded_at: Wed, 10 Dec 2025 05:42:55 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgAsIBOqvOFDrf0tjDLbuC?expand%5B%5D=application_fee.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_0l4a5xCZDvu5ty","request_duration_ms":1157}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:56 GMT + Content-Type: + - application/json + Content-Length: + - '3738' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Request-Id: + - req_DSM5BMCvfhPmUA + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgAsIBOqvOFDrf0tjDLbuC", + "object": "charge", + "amount": 122, + "amount_captured": 122, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgAsIBOqvOFDrf0z2jr4PG", + "object": "balance_transaction", + "amount": 122, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345374, + "currency": "usd", + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "exchange_rate": null, + "fee": 34, + "fee_details": [ + { + "amount": 34, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 88, + "reporting_category": "charge", + "source": "ch_3ScgAsIBOqvOFDrf0tjDLbuC", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR02866C987", + "captured": true, + "created": 1765345374, + "currency": "usd", + "customer": "cus_TZpq4oIp9fzLmY", + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "PH9MZRiDkh_gD1YVEZY2YA==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 39, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgAsIBOqvOFDrf0oIop9hF", + "payment_method": "pm_1ScgAqIBOqvOFDrfulufOg0k", + "payment_method_details": { + "card": { + "amount_authorized": 122, + "authorization_code": "552842", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 122, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKN-Q5MkGMgYx3GZq7WQ6LBY6QXKw4gQx9CQpeehHQIItktLo-mIu6lBQvI9b_gC3iG_Mv3JGRqdiLbtt", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar02866c987", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "26" + } + recorded_at: Wed, 10 Dec 2025 05:42:56 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_intents + body: + encoding: UTF-8 + string: amount=100¤cy=usd&description=You+bought+http%3A%2F%2Fedgar02866c987.test.gumroad.com%3A31337%2Fl%2Fa%21&metadata[purchase]=OVEhZclDfjf9OENvGvQwGw%3D%3D&transfer_group=27&payment_method_types[0]=card&off_session=true&confirm=true&customer=cus_TZpqJ5pCslWMJk&payment_method=pm_1ScgAoIBOqvOFDrfRE2YERAh&statement_descriptor_suffix=edgar02866c987 + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_DSM5BMCvfhPmUA","request_duration_ms":388}}' + Idempotency-Key: + - 1697d6f9-022c-4f3d-8145-532781a6a6c1 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:57 GMT + Content-Type: + - application/json + Content-Length: + - '1562' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Idempotency-Key: + - 1697d6f9-022c-4f3d-8145-532781a6a6c1 + Original-Request: + - req_VsDFSrYRqmSJ2k + Request-Id: + - req_VsDFSrYRqmSJ2k + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pi_3ScgAvIBOqvOFDrf1SUN5Wso", + "object": "payment_intent", + "amount": 100, + "amount_capturable": 0, + "amount_details": { + "tip": {} + }, + "amount_received": 100, + "application": null, + "application_fee_amount": null, + "automatic_payment_methods": null, + "canceled_at": null, + "cancellation_reason": null, + "capture_method": "automatic", + "client_secret": "pi_3ScgAvIBOqvOFDrf1SUN5Wso_secret_WS3Kpz41R9lvOAKZuowsbD57i", + "confirmation_method": "automatic", + "created": 1765345377, + "currency": "usd", + "customer": "cus_TZpqJ5pCslWMJk", + "customer_account": null, + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "excluded_payment_method_types": null, + "invoice": null, + "last_payment_error": null, + "latest_charge": "ch_3ScgAvIBOqvOFDrf1tIjwetn", + "livemode": false, + "metadata": { + "purchase": "OVEhZclDfjf9OENvGvQwGw==" + }, + "next_action": null, + "on_behalf_of": null, + "payment_method": "pm_1ScgAoIBOqvOFDrfRE2YERAh", + "payment_method_configuration_details": null, + "payment_method_options": { + "card": { + "installments": null, + "mandate_options": null, + "network": null, + "request_three_d_secure": "automatic" + } + }, + "payment_method_types": [ + "card" + ], + "processing": null, + "receipt_email": null, + "review": null, + "setup_future_usage": null, + "shipping": null, + "source": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar02866c987", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "27" + } + recorded_at: Wed, 10 Dec 2025 05:42:57 GMT +- request: + method: get + uri: https://api.stripe.com/v1/charges/ch_3ScgAvIBOqvOFDrf1tIjwetn?expand%5B%5D=application_fee.balance_transaction&expand%5B%5D=balance_transaction + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_VsDFSrYRqmSJ2k","request_duration_ms":919}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:42:58 GMT + Content-Type: + - application/json + Content-Length: + - '3738' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=lFiIPmvPmwBlFMal9mqcJZuLB-hhd9BVitEATDm30H-YdqyTl-rkfaheDJz433rPJEYvkHJMK7PkPZ7z + Request-Id: + - req_TfoAMbClKbUPdW + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "ch_3ScgAvIBOqvOFDrf1tIjwetn", + "object": "charge", + "amount": 100, + "amount_captured": 100, + "amount_refunded": 0, + "application": null, + "application_fee": null, + "application_fee_amount": null, + "balance_transaction": { + "id": "txn_3ScgAvIBOqvOFDrf1thgcMtg", + "object": "balance_transaction", + "amount": 100, + "available_on": 1765929600, + "balance_type": "payments", + "created": 1765345377, + "currency": "usd", + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "exchange_rate": null, + "fee": 33, + "fee_details": [ + { + "amount": 33, + "application": null, + "currency": "usd", + "description": "Stripe processing fees", + "type": "stripe_fee" + } + ], + "net": 67, + "reporting_category": "charge", + "source": "ch_3ScgAvIBOqvOFDrf1tIjwetn", + "status": "pending", + "type": "charge" + }, + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "calculated_statement_descriptor": "STRIPE* EDGAR02866C987", + "captured": true, + "created": 1765345377, + "currency": "usd", + "customer": "cus_TZpqJ5pCslWMJk", + "description": "You bought http://edgar02866c987.test.gumroad.com:31337/l/a!", + "destination": null, + "dispute": null, + "disputed": false, + "failure_balance_transaction": null, + "failure_code": null, + "failure_message": null, + "fraud_details": {}, + "invoice": null, + "livemode": false, + "metadata": { + "purchase": "OVEhZclDfjf9OENvGvQwGw==" + }, + "on_behalf_of": null, + "order": null, + "outcome": { + "advice_code": null, + "network_advice_code": null, + "network_decline_code": null, + "network_status": "approved_by_network", + "reason": null, + "risk_level": "normal", + "risk_score": 50, + "seller_message": "Payment complete.", + "type": "authorized" + }, + "paid": true, + "payment_intent": "pi_3ScgAvIBOqvOFDrf1SUN5Wso", + "payment_method": "pm_1ScgAoIBOqvOFDrfRE2YERAh", + "payment_method_details": { + "card": { + "amount_authorized": 100, + "authorization_code": "512596", + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 12, + "exp_year": 2026, + "extended_authorization": { + "status": "disabled" + }, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "incremental_authorization": { + "status": "unavailable" + }, + "installments": null, + "last4": "4242", + "mandate": null, + "multicapture": { + "status": "unavailable" + }, + "network": "visa", + "network_token": { + "used": false + }, + "network_transaction_id": "104115107115746", + "overcapture": { + "maximum_amount_capturable": 100, + "status": "unavailable" + }, + "regulated_status": "unregulated", + "three_d_secure": null, + "wallet": null + }, + "type": "card" + }, + "radar_options": {}, + "receipt_email": null, + "receipt_number": null, + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU05FZ3NJQk9xdk9GRHJmKOKQ5MkGMgZ5igejarM6LBYHAsbUWU71H9UTOGuoHg0wZg7R2GeBkQL5zG4Zyyy5RV7CEDTqmrxCImN6", + "refunded": false, + "review": null, + "shipping": null, + "source": null, + "source_transfer": null, + "statement_descriptor": null, + "statement_descriptor_suffix": "edgar02866c987", + "status": "succeeded", + "transfer_data": null, + "transfer_group": "27" + } + recorded_at: Wed, 10 Dec 2025 05:42:58 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/finds_VAT_ID_from_any_subscription_purchase_s_VAT_refund.yml b/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/finds_VAT_ID_from_any_subscription_purchase_s_VAT_refund.yml new file mode 100644 index 0000000000..c9879be4ff --- /dev/null +++ b/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/finds_VAT_ID_from_any_subscription_purchase_s_VAT_refund.yml @@ -0,0 +1,753 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_Cjpc3VtIYgBJSX","request_duration_ms":757}}' + Idempotency-Key: + - 0700bebe-0689-49d3-8632-f4ba3f4f9cef + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:40 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - 0700bebe-0689-49d3-8632-f4ba3f4f9cef + Original-Request: + - req_qUke4CJXzPr0OQ + Request-Id: + - req_qUke4CJXzPr0OQ + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6mIBOqvOFDrfMXVn3Fee", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345120, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:40 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1Scg6mIBOqvOFDrfMXVn3Fee + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_qUke4CJXzPr0OQ","request_duration_ms":335}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:40 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Request-Id: + - req_rfNlqRVkcW2bqu + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6mIBOqvOFDrfMXVn3Fee", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345120, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:40 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1Scg6mIBOqvOFDrfMXVn3Fee + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_rfNlqRVkcW2bqu","request_duration_ms":310}}' + Idempotency-Key: + - 85f7f314-1e56-4c8d-af9e-68a1e90cd18f + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:41 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - 85f7f314-1e56-4c8d-af9e-68a1e90cd18f + Original-Request: + - req_3BJK9Wdni5F6eS + Request-Id: + - req_3BJK9Wdni5F6eS + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpmPrqR2tnGHm", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345121, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "DS9EMHUY", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:38:41 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_3BJK9Wdni5F6eS","request_duration_ms":741}}' + Idempotency-Key: + - c1a3e64f-fe88-4d7b-a8b8-276fec375089 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:41 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - c1a3e64f-fe88-4d7b-a8b8-276fec375089 + Original-Request: + - req_XlOo1Vrus0ZpZA + Request-Id: + - req_XlOo1Vrus0ZpZA + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6nIBOqvOFDrf3J1JfvwZ", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345121, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:42 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1Scg6nIBOqvOFDrf3J1JfvwZ + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_XlOo1Vrus0ZpZA","request_duration_ms":329}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:42 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Request-Id: + - req_XTQGlEKy8FOgzo + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6nIBOqvOFDrf3J1JfvwZ", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345121, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:42 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1Scg6nIBOqvOFDrf3J1JfvwZ + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_XTQGlEKy8FOgzo","request_duration_ms":342}}' + Idempotency-Key: + - a4e8e3e3-2d61-4a3a-9a85-552da7442119 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:43 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - a4e8e3e3-2d61-4a3a-9a85-552da7442119 + Original-Request: + - req_5NOXCsNGl8PBu0 + Request-Id: + - req_5NOXCsNGl8PBu0 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpmy8MW4BusFH", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345122, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "QAYQCSGW", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:38:43 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/prioritizes_subscription_s_business_vat_id_over_original_purchase_s_VAT_ID.yml b/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/prioritizes_subscription_s_business_vat_id_over_original_purchase_s_VAT_ID.yml new file mode 100644 index 0000000000..3c425962da --- /dev/null +++ b/spec/support/fixtures/vcr_cassettes/Subscription_VAT_ID_handling_for_recurring_charges/_get_vat_id_from_original_purchase/prioritizes_subscription_s_business_vat_id_over_original_purchase_s_VAT_ID.yml @@ -0,0 +1,751 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + Idempotency-Key: + - 9992b2e9-3c5e-47d6-81bd-2715c555a81e + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:35 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - 9992b2e9-3c5e-47d6-81bd-2715c555a81e + Original-Request: + - req_YEfPav6J0MEvTw + Request-Id: + - req_YEfPav6J0MEvTw + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6hIBOqvOFDrf99YEnp2P", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345115, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:35 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1Scg6hIBOqvOFDrf99YEnp2P + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_YEfPav6J0MEvTw","request_duration_ms":633}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:36 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Request-Id: + - req_xwWDC4xrmg0ZOA + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6hIBOqvOFDrf99YEnp2P", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345115, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:36 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1Scg6hIBOqvOFDrf99YEnp2P + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_xwWDC4xrmg0ZOA","request_duration_ms":467}}' + Idempotency-Key: + - d23f98a3-84a5-4b45-bd6c-50f0a8c7b317 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:36 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - d23f98a3-84a5-4b45-bd6c-50f0a8c7b317 + Original-Request: + - req_H1ScHdT8zgEmMK + Request-Id: + - req_H1ScHdT8zgEmMK + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpm45ADpHimPx", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345116, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "O5EVXBFV", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:38:36 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[token]=tok_visa + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_H1ScHdT8zgEmMK","request_duration_ms":752}}' + Idempotency-Key: + - d8d99498-f591-470f-bc0f-ced38bc7937d + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:37 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - d8d99498-f591-470f-bc0f-ced38bc7937d + Original-Request: + - req_IRJJ9VLikuKe31 + Request-Id: + - req_IRJJ9VLikuKe31 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6jIBOqvOFDrfRTLeHkac", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345117, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:37 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1Scg6jIBOqvOFDrfRTLeHkac + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_IRJJ9VLikuKe31","request_duration_ms":337}}' + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:38 GMT + Content-Type: + - application/json + Content-Length: + - '1083' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Request-Id: + - req_7kwwAQNbG5rygW + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "pm_1Scg6jIBOqvOFDrfRTLeHkac", + "object": "payment_method", + "allow_redisplay": "unspecified", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null, + "tax_id": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "US", + "display_brand": "visa", + "exp_month": 12, + "exp_year": 2026, + "fingerprint": "hsksJCaNjbEGzjqP", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "regulated_status": "unregulated", + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1765345117, + "customer": null, + "customer_account": null, + "livemode": false, + "metadata": {}, + "type": "card" + } + recorded_at: Wed, 10 Dec 2025 05:38:38 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers + body: + encoding: UTF-8 + string: description=&payment_method=pm_1Scg6jIBOqvOFDrfRTLeHkac + headers: + User-Agent: + - Stripe/v1 RubyBindings/12.5.0 + Authorization: + - Bearer + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_7kwwAQNbG5rygW","request_duration_ms":402}}' + Idempotency-Key: + - c5590d85-ff92-441e-946a-db1095e72882 + Stripe-Version: + - '2023-10-16' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"12.5.0","lang":"ruby","lang_version":"3.4.3 p32 (2025-04-14)","platform":"arm64-darwin25","engine":"ruby","publisher":"stripe","uname":"Darwin + Adityas-MacBook-Air-M2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Aug + 27 20:24:16 PDT 2025; root:xnu-12377.1.9~17/RELEASE_ARM64_T8112 arm64","hostname":"Adityas-MacBook-Air-M2.local"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Wed, 10 Dec 2025 05:38:39 GMT + Content-Type: + - application/json + Content-Length: + - '642' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, HEAD, PUT, PATCH, POST, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, Stripe-Should-Retry, X-Stripe-External-Auth-Required, + X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Content-Security-Policy: + - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; + img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ujomgcpNKurwQ-4Rc6w8p69YdWUQRCOqJ9K61RuUQjqDRx2H_2g__OIA8e5mqz3n2Pf7Mr9tbdlEuksL + Idempotency-Key: + - c5590d85-ff92-441e-946a-db1095e72882 + Original-Request: + - req_Cjpc3VtIYgBJSX + Request-Id: + - req_Cjpc3VtIYgBJSX + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2023-10-16' + Vary: + - Origin + X-Stripe-Priority-Routing-Enabled: + - 'true' + X-Stripe-Routing-Context-Priority-Tier: + - api-testmode + X-Wc: + - ABGHIJ + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "id": "cus_TZpmYhBjHNhotk", + "object": "customer", + "address": null, + "balance": 0, + "created": 1765345118, + "currency": null, + "customer_account": null, + "default_source": null, + "delinquent": false, + "description": null, + "discount": null, + "email": null, + "invoice_prefix": "DPY3V4T9", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": null, + "footer": null, + "rendering_options": null + }, + "livemode": false, + "metadata": {}, + "name": null, + "next_invoice_sequence": 1, + "phone": null, + "preferred_locales": [], + "shipping": null, + "tax_exempt": "none", + "test_clock": null + } + recorded_at: Wed, 10 Dec 2025 05:38:39 GMT +recorded_with: VCR 6.2.0