driftwatch

Stripe

19 spec versions tracked, back to 2025-11-12. 224 published breaking changes. Provider docs.

Stripe2026-09-25 · 2bab97681 additive
  • Additiveresponse.property.added

    Response field india added

    No action needed unless you validate responses against a closed schema.

    card_mandate_payment_method_details.india · reachable from 126 operations
Stripe2026-09-23 · c8faccbd24 breaking117 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection fliprequest.property.removed

    igic is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    27 places: POST /v1/tax/registrations · country_options.at.igic, POST /v1/tax/registrations · country_options.be.igic, POST /v1/tax/registrations · country_options.bg.igic, POST /v1/tax/registrations · country_options.cy.igic, POST /v1/tax/registrations · country_options.cz.igic, POST /v1/tax/registrations · country_options.de.igic +21 more
    await client.post("/v1/tax/registrations", {
      // igic is now ignored, not rejected
      igic: value,
    });
  • Breakingdirection flipresponse.enum.value-added

    type can now return "paypay", "sequra"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "paypay", "sequra"

    5 places: confirmation_tokens_resource_payment_method_preview.type, payment_intent.excluded_payment_method_types[], payment_link.payment_method_types[], payment_method.type, setup_intent.excluded_payment_method_types[]
    switch (response.type) {
      // existing branches …
      // no branch for "paypay"
      // no branch for "sequra"
      default:
        throw new Error("unexpected type");
    }
  • Breakingrequest.property.became-required

    type is now required

    Partial payloads are rejected.

    3 places: POST /v1/invoices/create_preview · subscription_details.billing_cycle_anchor.type, POST /v1/subscriptions/{subscription_exposed_id} · billing_cycle_anchor.type, POST /v1/subscriptions/{subscription}/resume · billing_cycle_anchor.type
    await client.post("/v1/invoices/create_preview", {
      // …
      type: /* now required */,
    });
  • Breakingdirection flipresponse.enum.value-added

    allowed_payment_method_types can now return "card_present", "interac_present"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "card_present", "interac_present"

    2 places: payment_intent.allowed_payment_method_types[], setup_intent.allowed_payment_method_types[]
    switch (response.allowed_payment_method_types[0]) {
      // existing branches …
      // no branch for "card_present"
      // no branch for "interac_present"
      default:
        throw new Error("unexpected allowed_payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "blik"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "blik"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "blik"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    setup_future_usage can now return "off_session"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "off_session"

    2 places: checkout_bancontact_payment_method_options.setup_future_usage, payment_intent_payment_method_options_blik.setup_future_usage
    switch (response.setup_future_usage) {
      // existing branches …
      // no branch for "off_session"
      default:
        throw new Error("unexpected setup_future_usage");
    }
  • Breakingdirection flipresponse.enum.value-added

    network can now return "rtp"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "rtp"

    2 places: treasury.received_credit.network, treasury_financial_accounts_resource_financial_address.supported_networks[]
    switch (response.network) {
      // existing branches …
      // no branch for "rtp"
      default:
        throw new Error("unexpected network");
    }
  • Breakingdirection flipresponse.enum.value-added

    tax_type can now return "admissions_tax", "attendance_tax", "digital_excise_tax", "entertainment_tax", "gross_receipts_tax", "hospitality_tax", "luxury_tax", "recycling_fee", "resort_tax", "tourism_tax", "utility_users_tax"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "admissions_tax", "attendance_tax", "digital_excise_tax", "entertainment_tax", "gross_receipts_tax", "hospitality_tax", "luxury_tax", "recycling_fee", "resort_tax", "tourism_tax", "utility_users_tax"

    2 places: tax_product_resource_line_item_tax_rate_details.tax_type, tax_product_resource_tax_rate_details.tax_type
    switch (response.tax_type) {
      // existing branches …
      // no branch for "admissions_tax"
      // no branch for "attendance_tax"
      // no branch for "digital_excise_tax"
      // no branch for "entertainment_tax"
      // no branch for "gross_receipts_tax"
      // no branch for "hospitality_tax"
      // no branch for "luxury_tax"
      // no branch for "recycling_fee"
      // no branch for "resort_tax"
      // no branch for "tourism_tax"
      // no branch for "utility_users_tax"
      default:
        throw new Error("unexpected tax_type");
    }
  • Breakingdirection flipresponse.enum.value-added

    code can now return "invalid_address_cmra_address", "invalid_address_registered_agent_address"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    account_requirements_error.code · reachable from 575 operations
    switch (response.code) {
      // existing branches …
      // no branch for "invalid_address_cmra_address"
      // no branch for "invalid_address_registered_agent_address"
      default:
        throw new Error("unexpected code");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "issuing_dispute_provisional_credit", "issuing_dispute_provisional_credit_reversal"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    balance_transaction.type · reachable from 553 operations
    switch (response.type) {
      // existing branches …
      // no branch for "issuing_dispute_provisional_credit"
      // no branch for "issuing_dispute_provisional_credit_reversal"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    tax_type can now return "digital_excise_tax", "utility_users_tax"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    tax_rate.tax_type · reachable from 543 operations
    switch (response.tax_type) {
      // existing branches …
      // no branch for "digital_excise_tax"
      // no branch for "utility_users_tax"
      default:
        throw new Error("unexpected tax_type");
    }
  • Breakingdirection flipresponse.enum.value-added

    version can now return "2.3.0", "2.3.1"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.version · reachable from 143 operations
    switch (response.version) {
      // existing branches …
      // no branch for "2.3.0"
      // no branch for "2.3.1"
      default:
        throw new Error("unexpected version");
    }
  • Breakingdirection flipresponse.enum.value-added

    ui_mode can now return "form"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    checkout.session.ui_mode · reachable from 15 operations
    switch (response.ui_mode) {
      // existing branches …
      // no branch for "form"
      default:
        throw new Error("unexpected ui_mode");
    }
  • Breakingdirection flipresponse.enum.value-added

    status can now return "expired", "pending"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    bank_connections_resource_account_number_details.status · reachable from 14 operations
    switch (response.status) {
      // existing branches …
      // no branch for "expired"
      // no branch for "pending"
      default:
        throw new Error("unexpected status");
    }
  • Breakingdirection fliprequest.property.removed

    payment_method_types is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/checkout/sessions · payment_method_types · 6 call sites
    await client.post("/v1/checkout/sessions", {
      // payment_method_types is now ignored, not rejected
      payment_method_types: value,
    });
  • Breakingresponse.property.removed

    Response field countries removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    bank_connections_resource_link_account_session_filters.countries · reachable from 4 operations
    // response.countries is now undefined
    const countries = response.countries;
  • Breakingresponse.property.removed

    Response field igic removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    tax_product_registrations_resource_country_options_europe.igic · reachable from 4 operations
    // response.igic is now undefined
    const igic = response.igic;
  • Breakingdirection flipresponse.enum.value-added

    type can now return "admissions_tax", "attendance_tax", "entertainment_tax", "gross_receipts_tax", "hospitality_tax", "luxury_tax", "resort_tax", "tourism_tax"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    tax_product_registrations_resource_country_options_united_states.type · reachable from 4 operations
    switch (response.type) {
      // existing branches …
      // no branch for "admissions_tax"
      // no branch for "attendance_tax"
      // no branch for "entertainment_tax"
      // no branch for "gross_receipts_tax"
      // no branch for "hospitality_tax"
      // no branch for "luxury_tax"
      // no branch for "resort_tax"
      // no branch for "tourism_tax"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    sourcing can now return "performance"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    tax_product_resource_line_item_tax_breakdown.sourcing · reachable from 3 operations
    switch (response.sourcing) {
      // existing branches …
      // no branch for "performance"
      default:
        throw new Error("unexpected sourcing");
    }
  • Breakingdirection fliprequest.property.removed

    countries is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/financial_connections/sessions · filters.countries · 2 call sites
    await client.post("/v1/financial_connections/sessions", {
      // countries is now ignored, not rejected
      countries: value,
    });
  • Breakingrequest.property.type-changed

    billing_cycle_anchor changed type

    Serialization mismatch. Integer-to-string moves are the usual cause and the usual outage.

    POST /v1/subscriptions/{subscription_exposed_id} · billing_cycle_anchor · 2 call sites
    // payload.billing_cycle_anchor
    // was: string
    // now: object
  • Breakingdirection flipresponse.property.became-optional

    Response field score is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    insights_resources_payment_evaluation_signal_v2.score · reachable from 1 operation
    // response.score may now be absent or null
    const score = response.score ?? fallback;
  • Breakingdirection flipresponse.enum.value-added

    type can now return "rerouted"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    insights_resources_payment_evaluation_outcome.type · reachable from 1 operation
    switch (response.type) {
      // existing branches …
      // no branch for "rerouted"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection fliprequest.property.removed

    payto is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/payment_methods/{payment_method} · payto
    await client.post("/v1/payment_methods/{payment_method}", {
      // payto is now ignored, not rejected
      payto: value,
    });
  • Additiverequest.enum.constraint-removed

    Value restriction lifted

    A relaxation, not a break. Everything you could send before still works, and more is accepted now.

    POST /v1/subscriptions/{subscription_exposed_id} · billing_cycle_anchor · 2 call sites
  • Additivepath.added

    /v1/apps/installs added

    No action needed.

    /v1/apps/installs
  • Additivepath.added

    /v1/product_catalog/trial_offers/{id} added

    No action needed.

    /v1/product_catalog/trial_offers/{id}
  • Additivepath.added

    /v1/apps/installs/{id} added

    No action needed.

    /v1/apps/installs/{id}
  • Additivepath.added

    /v1/apps/installs/{id}/uninstall added

    No action needed.

    /v1/apps/installs/{id}/uninstall
  • Additivepath.added

    /v1/product_catalog/trial_offers added

    No action needed.

    /v1/product_catalog/trial_offers
  • Additivepath.added

    /v1/subscriptions/{subscription}/pause added

    No action needed.

    /v1/subscriptions/{subscription}/pause
  • Additivepath.added

    /v1/tax/locations added

    No action needed.

    /v1/tax/locations
  • Additivepath.added

    /v1/tax/locations/{location} added

    No action needed.

    /v1/tax/locations/{location}
  • Additivepath.added

    /v1/three_d_secure/authentications added

    No action needed.

    /v1/three_d_secure/authentications
  • Additivepath.added

    /v1/three_d_secure/authentications/{authentication} added

    No action needed.

    /v1/three_d_secure/authentications/{authentication}
  • Additivepath.added

    /v1/three_d_secure/authentications/{authentication}/cancel added

    No action needed.

    /v1/three_d_secure/authentications/{authentication}/cancel
  • Additivepath.added

    /v1/three_d_secure/authentications/{authentication}/submit added

    No action needed.

    /v1/three_d_secure/authentications/{authentication}/submit

Additive56 new response fieldspayment_method.paypay, payment_method.sequra, payment_intent.payment_record, account_capabilities.blik_recurring_payments, account_capabilities.paypay_payments, account_capabilities.sequra_payments, account_business_profile.specified_commercial_transactions_act_url, account_settings.paypay_payments +48 more

Additive48 new request propertiespayment_method_data.paypay, payment_method_data.sequra, payment_settings.payment_method_options.billie.company_details, payment_settings.payment_method_options.blik, payment_method_options.blik, payment_method_options.sequra, items[].current_trial, trial_settings.end_behavior.billing_cycle_anchor +40 more

Stripe2026-08-26 · 30d3391c4 breaking56 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    allowed_payment_method_types can now return "touch_n_go"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "touch_n_go"

    2 places: payment_intent.allowed_payment_method_types[], setup_intent.allowed_payment_method_types[]
    switch (response.allowed_payment_method_types[0]) {
      // existing branches …
      // no branch for "touch_n_go"
      default:
        throw new Error("unexpected allowed_payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "billie"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "billie"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "billie"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingresponse.property.removed

    Response field cryptogram removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.cryptogram · reachable from 48 operations
    // response.cryptogram is now undefined
    const cryptogram = response.cryptogram;
  • Breakingdirection flipresponse.enum.value-added

    type can now return "customer_update"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    portal_flows_flow.type · reachable from 1 operation
    switch (response.type) {
      // existing branches …
      // no branch for "customer_update"
      default:
        throw new Error("unexpected type");
    }
  • Additivepath.added

    /v1/billing/feedback_options added

    No action needed.

    /v1/billing/feedback_options
  • Additivepath.added

    /v1/billing/feedback_options/{id} added

    No action needed.

    /v1/billing/feedback_options/{id}
  • Additivepath.added

    /v1/billing/feedback_options/{id}/deactivate added

    No action needed.

    /v1/billing/feedback_options/{id}/deactivate

Additive15 new response fieldscancellation_details.feedback_option, subscriptions_resource_payment_method_options.billie, invoices_payment_method_options.billie, payment_method_details_link.funding_source_group, payment_method_details_card_wallet_link.funding_source_group, payment_pages_private_card_payment_method_options_resource_restrictions.funding_types_blocked, portal_subscription_cancellation_reason.feedback_options, bank_connections_resource_link_account_session_filters.country +7 more

Additive38 new request propertiespayment_settings.payment_method_options.billie, cancellation_details.feedback_option, features.subscription_cancel.cancellation_reason.feedback_options, components.payment_method_settings, payment_method_options.card.restrictions.funding_types_blocked, components.active_entitlements, components.customer_portal, application_fee_amount +30 more

Stripe2026-07-29 · af5309ca10 breaking43 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "ic_nif"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "ic_nif"

    4 places: invoices_resource_invoice_tax_id.type, payment_pages_checkout_session_tax_id.type, tax_id.type, tax_product_resource_customer_details_resource_tax_id.type
    switch (response.type) {
      // existing branches …
      // no branch for "ic_nif"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "mass_transit_parking_tax", "parking_tax"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "mass_transit_parking_tax", "parking_tax"

    4 places: tax_product_registrations_resource_country_options_united_states.type, tax_product_resource_line_item_tax_rate_details.tax_type, tax_product_resource_tax_rate_details.tax_type, tax_rate.tax_type
    switch (response.type) {
      // existing branches …
      // no branch for "mass_transit_parking_tax"
      // no branch for "parking_tax"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    result can now return "data_share_only"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "data_share_only"

    3 places: payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.result, three_d_secure_details.result, three_d_secure_details_charge.result
    switch (response.result) {
      // existing branches …
      // no branch for "data_share_only"
      default:
        throw new Error("unexpected result");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "alipay", "mb_way"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "alipay", "mb_way"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "alipay"
      // no branch for "mb_way"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingresponse.property.removed

    Response field iin removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    card.iin · reachable from 572 operations
    // response.iin is now undefined
    const iin = response.iin;
  • Breakingdirection flipresponse.enum.value-added

    supported_networks can now return "chaps"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    funding_instructions_bank_transfer_financial_address.supported_networks[] · reachable from 399 operations
    switch (response.supported_networks[0]) {
      // existing branches …
      // no branch for "chaps"
      default:
        throw new Error("unexpected supported_networks");
    }
  • Breakingdirection flipresponse.enum.value-added

    reason can now return "stripe_internal_error"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    issuing_authorization_request.reason · reachable from 184 operations
    switch (response.reason) {
      // existing branches …
      // no branch for "stripe_internal_error"
      default:
        throw new Error("unexpected reason");
    }
  • Breakingdirection flipresponse.enum.value-added

    carrier can now return "correos"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    issuing_card_shipping.carrier · reachable from 165 operations
    switch (response.carrier) {
      // existing branches …
      // no branch for "correos"
      default:
        throw new Error("unexpected carrier");
    }
  • Breakingrequest.enum.value-removed

    mode no longer accepts "custom"

    A value you may have hardcoded is now rejected.

    POST /v1/financial_connections/sessions · manual_entry.mode · 2 call sites
    // sending "custom" for manual_entry.mode is now rejected
  • Breakingdirection fliprequest.property.removed

    proof_of_registration is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/accounts · documents.proof_of_registration
    await client.post("/v1/accounts", {
      // proof_of_registration is now ignored, not rejected
      proof_of_registration: value,
    });
  • Additivepath.added

    /v1/accounts/{account}/unreject added

    No action needed.

    /v1/accounts/{account}/unreject
  • Additivepath.added

    /v1/payment_records added

    No action needed.

    /v1/payment_records

Additive22 new response fieldssetup_intent.allowed_payment_method_types, payment_intent.allowed_payment_method_types, legal_entity_company.administrative_address, legal_entity_company.principal_place_of_business, refund.payment_method, refund.customer, refund.customer_account, subscription_schedule_phase_configuration.trial +14 more

Additive19 new request propertiesallowed_payment_method_types, payment_method_options.payco.setup_future_usage, payment_method_options.samsung_pay.setup_future_usage, company.administrative_address, company.principal_place_of_business, shipping.business_name, radar_options.referrer, components.disputes_list.features.smart_disputes_management +11 more

Stripe2026-07-01 · 7061322c2 breaking28 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    bank can now return "bnp_paribas", "citibank", "mbsb_bank"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "bnp_paribas", "citibank", "mbsb_bank"

    2 places: payment_method_details_fpx.bank, payment_method_fpx.bank
    switch (response.bank) {
      // existing branches …
      // no branch for "bnp_paribas"
      // no branch for "citibank"
      // no branch for "mbsb_bank"
      default:
        throw new Error("unexpected bank");
    }
  • Breakingdirection fliprequest.property.removed

    dynamic_tax_rates is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/checkout/sessions · line_items[].dynamic_tax_rates
    await client.post("/v1/checkout/sessions", {
      // dynamic_tax_rates is now ignored, not rejected
      dynamic_tax_rates: value,
    });

Additive14 new response fieldsinvoice_setting_subscription_schedule_setting.custom_fields, invoice_setting_subscription_schedule_setting.description, invoice_setting_subscription_schedule_setting.footer, invoice_setting_subscription_schedule_phase_setting.custom_fields, invoice_setting_subscription_schedule_phase_setting.description, invoice_setting_subscription_schedule_phase_setting.footer, dispute_payment_method_details_card.network, invoice_setting_quote_setting.custom_fields +6 more

Additive14 new request propertiesfilters.require_payment_method_support, limits, manual_entry, invoice_settings.custom_fields, invoice_settings.description, invoice_settings.footer, default_settings.invoice_settings.custom_fields, default_settings.invoice_settings.description +6 more

Stripe2026-06-23 · f4ac6d9a10 breaking31 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "satispay"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "satispay"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "satispay"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "tax_fund"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    balance_transaction.type · reachable from 530 operations
    switch (response.type) {
      // existing branches …
      // no branch for "tax_fund"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    network can now return "sui"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_method_details_crypto.network · reachable from 262 operations
    switch (response.network) {
      // existing branches …
      // no branch for "sui"
      default:
        throw new Error("unexpected network");
    }
  • Breakingdirection flipresponse.enum.value-added

    token_currency can now return "usdsui"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_method_details_crypto.token_currency · reachable from 262 operations
    switch (response.token_currency) {
      // existing branches …
      // no branch for "usdsui"
      default:
        throw new Error("unexpected token_currency");
    }
  • Breakingdirection flipresponse.enum.value-added

    enhanced_eligibility_types can now return "mastercard_compliance"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    dispute.enhanced_eligibility_types[] · reachable from 169 operations
    switch (response.enhanced_eligibility_types[0]) {
      // existing branches …
      // no branch for "mastercard_compliance"
      default:
        throw new Error("unexpected enhanced_eligibility_types");
    }
  • Breakingresponse.property.removed

    Response field description removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payments_primitives_payment_records_resource_payment_method_card_details.description · reachable from 99 operations
    // response.description is now undefined
    const description = response.description;
  • Breakingresponse.property.removed

    Response field iin removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payments_primitives_payment_records_resource_payment_method_card_details.iin · reachable from 99 operations
    // response.iin is now undefined
    const iin = response.iin;
  • Breakingresponse.property.removed

    Response field issuer removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payments_primitives_payment_records_resource_payment_method_card_details.issuer · reachable from 99 operations
    // response.issuer is now undefined
    const issuer = response.issuer;
  • Breakingresponse.property.removed

    Response field stored_credential_usage removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payments_primitives_payment_records_resource_payment_method_card_details.stored_credential_usage · reachable from 99 operations
    // response.stored_credential_usage is now undefined
    const stored_credential_usage = response.stored_credential_usage;
  • Breakingdirection flipresponse.enum.value-added

    status can now return "validated"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    verification_session_redaction.status · reachable from 6 operations
    switch (response.status) {
      // existing branches …
      // no branch for "validated"
      default:
        throw new Error("unexpected status");
    }

Additive19 new response fieldspayment_method_bizum.buyer_id, payment_method_blik.buyer_id, payment_method_pix.fingerprint, subscriptions_resource_subscription_invoice_settings.custom_fields, subscriptions_resource_subscription_invoice_settings.description, subscriptions_resource_subscription_invoice_settings.footer, setup_attempt_payment_method_details.satispay, payment_intent_payment_method_options.sunbit +11 more

Additive12 new request propertiescard.network_token, card.encrypted, card.swipe_data, payment_method_options.sunbit, invoice_settings.custom_fields, invoice_settings.description, invoice_settings.footer, payment_method_options.satispay.setup_future_usage +4 more

Stripe2026-05-23 · 6a1ea0ab14 breaking69 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "bizum", "scalapay"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "bizum", "scalapay"

    4 places: confirmation_tokens_resource_payment_method_preview.type, payment_intent.excluded_payment_method_types[], payment_method.type, setup_intent.excluded_payment_method_types[]
    switch (response.type) {
      // existing branches …
      // no branch for "bizum"
      // no branch for "scalapay"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "twint"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "twint"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "twint"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    setup_future_usage can now return "off_session"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "off_session"

    2 places: checkout_twint_payment_method_options.setup_future_usage, payment_method_options_twint.setup_future_usage
    switch (response.setup_future_usage) {
      // existing branches …
      // no branch for "off_session"
      default:
        throw new Error("unexpected setup_future_usage");
    }
  • Breakingdirection flipresponse.enum.value-added

    device_type can now return "simulated_verifone_m425", "simulated_verifone_p630", "simulated_verifone_ux700", "simulated_verifone_v660p", "verifone_m425", "verifone_p630", "verifone_ux700", "verifone_v660p"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "simulated_verifone_m425", "simulated_verifone_p630", "simulated_verifone_ux700", "simulated_verifone_v660p", "verifone_m425", "verifone_p630", "verifone_ux700", "verifone_v660p"

    2 places: deleted_terminal.reader.device_type, terminal.reader.device_type
    switch (response.device_type) {
      // existing branches …
      // no branch for "simulated_verifone_m425"
      // no branch for "simulated_verifone_p630"
      // no branch for "simulated_verifone_ux700"
      // no branch for "simulated_verifone_v660p"
      // no branch for "verifone_m425"
      // no branch for "verifone_p630"
      // no branch for "verifone_ux700"
      // no branch for "verifone_v660p"
      default:
        throw new Error("unexpected device_type");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "bizum"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_link.payment_method_types[] · reachable from 19 operations
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "bizum"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "print_content"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    terminal_reader_reader_resource_reader_action.type · reachable from 15 operations
    switch (response.type) {
      // existing branches …
      // no branch for "print_content"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    network can now return "mastercard"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    issuing.settlement.network · reachable from 4 operations
    switch (response.network) {
      // existing branches …
      // no branch for "mastercard"
      default:
        throw new Error("unexpected network");
    }
  • Breakingdirection fliprequest.property.removed

    metadata is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · metadata
    await client.post("/v1/terminal/refunds", {
      // metadata is now ignored, not rejected
      metadata: value,
    });
  • Breakingdirection fliprequest.property.removed

    amount is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · amount
    await client.post("/v1/terminal/refunds", {
      // amount is now ignored, not rejected
      amount: value,
    });
  • Breakingdirection fliprequest.property.removed

    charge is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · charge
    await client.post("/v1/terminal/refunds", {
      // charge is now ignored, not rejected
      charge: value,
    });
  • Breakingdirection fliprequest.property.removed

    payment_intent is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · payment_intent
    await client.post("/v1/terminal/refunds", {
      // payment_intent is now ignored, not rejected
      payment_intent: value,
    });
  • Breakingdirection fliprequest.property.removed

    reason is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · reason
    await client.post("/v1/terminal/refunds", {
      // reason is now ignored, not rejected
      reason: value,
    });
  • Breakingdirection fliprequest.property.removed

    refund_application_fee is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · refund_application_fee
    await client.post("/v1/terminal/refunds", {
      // refund_application_fee is now ignored, not rejected
      refund_application_fee: value,
    });
  • Breakingdirection fliprequest.property.removed

    reverse_transfer is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/refunds · reverse_transfer
    await client.post("/v1/terminal/refunds", {
      // reverse_transfer is now ignored, not rejected
      reverse_transfer: value,
    });
  • Additiveresponse.property.type-narrowed

    Response type narrowed

    A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.

    payments_primitives_payment_records_resource_payment_method_alma_details_resource_installments.count · reachable from 49 operations
  • Additiverequest.param.optional-added

    active is now optional

    No action needed.

    GET /v1/payment_method_configurations · active

Additive43 new response fieldspayment_method.bizum, payment_method.scalapay, account_capabilities.bizum_payments, account_capabilities.scalapay_payments, subscription.billing_schedules, payment_method_details.bizum, payment_method_details.scalapay, invoice.amount_paid_off_stripe +35 more

Additive24 new request propertiespayment_method_data.bizum, payment_method_data.scalapay, payment_method_options.bizum, add_invoice_items[].discountable, payment_method_options.scalapay, transfer_data.description, bizum, scalapay +16 more

Stripe2026-04-20 · d771243f10 breaking50 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "sunbit"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "sunbit"

    5 places: confirmation_tokens_resource_payment_method_preview.type, payment_intent.excluded_payment_method_types[], payment_link.payment_method_types[], payment_method.type, setup_intent.excluded_payment_method_types[]
    switch (response.type) {
      // existing branches …
      // no branch for "sunbit"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "fo_vat", "gi_tin", "it_cf", "py_ruc"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "fo_vat", "gi_tin", "it_cf", "py_ruc"

    4 places: invoices_resource_invoice_tax_id.type, payment_pages_checkout_session_tax_id.type, tax_id.type, tax_product_resource_customer_details_resource_tax_id.type
    switch (response.type) {
      // existing branches …
      // no branch for "fo_vat"
      // no branch for "gi_tin"
      // no branch for "it_cf"
      // no branch for "py_ruc"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "pix", "upi"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "pix", "upi"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "pix"
      // no branch for "upi"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    setup_future_usage can now return "off_session"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "off_session"

    2 places: checkout_pix_payment_method_options.setup_future_usage, payment_method_options_pix.setup_future_usage
    switch (response.setup_future_usage) {
      // existing branches …
      // no branch for "off_session"
      default:
        throw new Error("unexpected setup_future_usage");
    }
  • Breakingdirection flipresponse.enum.value-added

    cancellation_reason can now return "fulfillment_error"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "fulfillment_error"

    2 places: issuing.card.cancellation_reason, issuing.card.replacement_reason
    switch (response.cancellation_reason) {
      // existing branches …
      // no branch for "fulfillment_error"
      default:
        throw new Error("unexpected cancellation_reason");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "fee_credit_funding", "inbound_transfer", "inbound_transfer_reversal"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    balance_transaction.type · reachable from 530 operations
    switch (response.type) {
      // existing branches …
      // no branch for "fee_credit_funding"
      // no branch for "inbound_transfer"
      // no branch for "inbound_transfer_reversal"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    capture_method can now return "automatic_delayed"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_intent_type_specific_payment_method_options_client.capture_method · reachable from 404 operations
    switch (response.capture_method) {
      // existing branches …
      // no branch for "automatic_delayed"
      default:
        throw new Error("unexpected capture_method");
    }
  • Breakingdirection flipresponse.enum.value-added

    token_currency can now return "phantom_cash", "usdt"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_method_details_crypto.token_currency · reachable from 262 operations
    switch (response.token_currency) {
      // existing branches …
      // no branch for "phantom_cash"
      // no branch for "usdt"
      default:
        throw new Error("unexpected token_currency");
    }
  • Breakingdirection flipresponse.enum.value-added

    item_type can now return "account"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    radar.value_list.item_type · reachable from 4 operations
    switch (response.item_type) {
      // existing branches …
      // no branch for "account"
      default:
        throw new Error("unexpected item_type");
    }
  • Breakingdirection flipresponse.enum.value-added

    risk_level can now return "low", "not_assessed", "unknown"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    insights_resources_payment_evaluation_signal_v2.risk_level · reachable from 1 operation
    switch (response.risk_level) {
      // existing branches …
      // no branch for "low"
      // no branch for "not_assessed"
      // no branch for "unknown"
      default:
        throw new Error("unexpected risk_level");
    }

Additive36 new response fieldspayment_method.sunbit, setup_intent.managed_payments, payment_intent.managed_payments, account_capabilities.app_distribution, account_capabilities.sunbit_payments, subscription.managed_payments, payment_method_details.sunbit, setup_attempt_payment_method_details.pix +28 more

Additive14 new request propertiespayment_method_data.sunbit, payment_settings.payment_method_options.pix, payment_settings.payment_method_options.upi, payment_method_options.pix.mandate_options, spending_controls.allowed_card_presences, spending_controls.blocked_card_presences, sunbit, payment_method_options.pix +6 more

Stripe2026-03-23 · a54c38881 breaking1 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingrequest.enum.value-removed

    ui_mode no longer accepts "custom", "embedded", "form", "hosted"

    A value you may have hardcoded is now rejected.

    POST /v1/checkout/sessions · ui_mode
    // sending "custom" for ui_mode is now rejected
    // sending "embedded" for ui_mode is now rejected
    // sending "form" for ui_mode is now rejected
    // sending "hosted" for ui_mode is now rejected
  • Additiveresponse.property.added

    Response field presentment_details added

    No action needed unless you validate responses against a closed schema.

    subscription.presentment_details · reachable from 548 operations
Stripe2026-03-17 · cfe95bf416 breaking38 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "upi"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "upi"

    5 places: confirmation_tokens_resource_payment_method_preview.type, payment_intent.excluded_payment_method_types[], payment_link.payment_method_types[], payment_method.type, setup_intent.excluded_payment_method_types[]
    switch (response.type) {
      // existing branches …
      // no branch for "upi"
      default:
        throw new Error("unexpected type");
    }
  • Breakingrequest.property.became-required

    level is now required

    Partial payloads are rejected.

    2 places: POST /v1/test_helpers/issuing/authorizations · risk_assessment.card_testing_risk.level, POST /v1/test_helpers/issuing/authorizations · risk_assessment.merchant_dispute_risk.level
    await client.post("/v1/test_helpers/issuing/authorizations", {
      // …
      level: /* now required */,
    });
  • Breakingdirection fliprequest.property.removed

    risk_level is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    2 places: POST /v1/test_helpers/issuing/authorizations · risk_assessment.card_testing_risk.risk_level, POST /v1/test_helpers/issuing/authorizations · risk_assessment.merchant_dispute_risk.risk_level
    await client.post("/v1/test_helpers/issuing/authorizations", {
      // risk_level is now ignored, not rejected
      risk_level: value,
    });
  • Breakingdirection flipresponse.enum.value-added

    reason can now return "canceled_by_retention_policy"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    cancellation_details.reason · reachable from 488 operations
    switch (response.reason) {
      // existing branches …
      // no branch for "canceled_by_retention_policy"
      default:
        throw new Error("unexpected reason");
    }
  • Breakingdirection flipresponse.enum.value-added

    network can now return "tempo"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    payment_method_details_crypto.network · reachable from 262 operations
    switch (response.network) {
      // existing branches …
      // no branch for "tempo"
      default:
        throw new Error("unexpected network");
    }
  • Breakingdirection flipresponse.property.became-optional

    Response field card_reference_id is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    issuing_network_token_visa.card_reference_id · reachable from 147 operations
    // response.card_reference_id may now be absent or null
    const card_reference_id = response.card_reference_id ?? fallback;
  • Breakingdirection flipresponse.property.became-optional

    Response field brand is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    payments_primitives_payment_records_resource_payment_method_card_details.brand · reachable from 99 operations
    // response.brand may now be absent or null
    const brand = response.brand ?? fallback;
  • Breakingdirection flipresponse.property.became-optional

    Response field exp_month is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    payments_primitives_payment_records_resource_payment_method_card_details.exp_month · reachable from 99 operations
    // response.exp_month may now be absent or null
    const exp_month = response.exp_month ?? fallback;
  • Breakingdirection flipresponse.property.became-optional

    Response field exp_year is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    payments_primitives_payment_records_resource_payment_method_card_details.exp_year · reachable from 99 operations
    // response.exp_year may now be absent or null
    const exp_year = response.exp_year ?? fallback;
  • Breakingdirection flipresponse.property.became-optional

    Response field funding is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    payments_primitives_payment_records_resource_payment_method_card_details.funding · reachable from 99 operations
    // response.funding may now be absent or null
    const funding = response.funding ?? fallback;
  • Breakingdirection flipresponse.property.became-optional

    Response field last4 is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    payments_primitives_payment_records_resource_payment_method_card_details.last4 · reachable from 99 operations
    // response.last4 may now be absent or null
    const last4 = response.last4 ?? fallback;
  • Breakingdirection flipresponse.enum.value-added

    ui_mode can now return "elements", "embedded_page", "form", "hosted_page"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    checkout.session.ui_mode · reachable from 15 operations
    switch (response.ui_mode) {
      // existing branches …
      // no branch for "elements"
      // no branch for "embedded_page"
      // no branch for "form"
      // no branch for "hosted_page"
      default:
        throw new Error("unexpected ui_mode");
    }
  • Breakingdirection flipresponse.enum.value-added

    removal_pathway can now return "marine_carbon_removal"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    climate.supplier.removal_pathway · reachable from 9 operations
    switch (response.removal_pathway) {
      // existing branches …
      // no branch for "marine_carbon_removal"
      default:
        throw new Error("unexpected removal_pathway");
    }
  • Breakingdirection flipresponse.enum.value-added

    item_type can now return "crypto_fingerprint"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    radar.value_list.item_type · reachable from 4 operations
    switch (response.item_type) {
      // existing branches …
      // no branch for "crypto_fingerprint"
      default:
        throw new Error("unexpected item_type");
    }
  • Breakingdirection flipresponse.property.became-optional

    Response field insights is no longer guaranteed

    Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.

    radar.payment_evaluation.insights · reachable from 1 operation
    // response.insights may now be absent or null
    const insights = response.insights ?? fallback;
  • Breakingresponse.property.removed

    Response field insights removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    radar.payment_evaluation.insights · reachable from 1 operation
    // response.insights is now undefined
    const insights = response.insights;

Additive24 new response fieldspayment_method.upi, account_capabilities.upi_payments, payment_method_details.upi, setup_attempt_payment_method_details.upi, payment_intent_next_action.upi_handle_redirect_or_display_qr_code, payment_intent_payment_method_options.upi, line_item.quantity_decimal, mandate_payment_method_details.upi +16 more

Additive14 new request propertiespayment_method_options.upi, payment_method_data.upi, lines[].metadata, quantity_decimal, upi, capabilities.upi_payments, lines[].quantity_decimal, payment_method_options.crypto +6 more

Stripe2026-02-23 · da3eadb21 breaking2 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    device_type can now return "simulated_stripe_s710", "stripe_s710"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "simulated_stripe_s710", "stripe_s710"

    2 places: deleted_terminal.reader.device_type, terminal.reader.device_type
    switch (response.device_type) {
      // existing branches …
      // no branch for "simulated_stripe_s710"
      // no branch for "stripe_s710"
      default:
        throw new Error("unexpected device_type");
    }
  • Additiveresponse.property.added

    Response field stripe_s710 added

    No action needed unless you validate responses against a closed schema.

    terminal.configuration.stripe_s710 · reachable from 4 operations
  • Additiverequest.property.added

    Request property stripe_s710 added

    No action needed unless it is required.

    POST /v1/terminal/configurations · stripe_s710 · 2 call sites
Stripe2026-02-23 · 0aaf9a656 breaking18 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "lk_vat"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "lk_vat"

    4 places: invoices_resource_invoice_tax_id.type, payment_pages_checkout_session_tax_id.type, tax_id.type, tax_product_resource_customer_details_resource_tax_id.type
    switch (response.type) {
      // existing branches …
      // no branch for "lk_vat"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    payment_method_types can now return "pay_by_bank"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "pay_by_bank"

    2 places: invoices_payment_settings.payment_method_types[], subscriptions_resource_payment_settings.payment_method_types[]
    switch (response.payment_method_types[0]) {
      // existing branches …
      // no branch for "pay_by_bank"
      default:
        throw new Error("unexpected payment_method_types");
    }
  • Breakingdirection flipresponse.enum.value-added

    purpose can now return "terminal_wifi_certificate", "terminal_wifi_private_key"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    file.purpose · reachable from 547 operations
    switch (response.purpose) {
      // existing branches …
      // no branch for "terminal_wifi_certificate"
      // no branch for "terminal_wifi_private_key"
      default:
        throw new Error("unexpected purpose");
    }
  • Breakingpath.removed

    /v1/fabric/service/integration_config removed

    Requests to this path now 404.

    /v1/fabric/service/integration_config
    // Was:
    await client.request("GET", "/v1/fabric/service/integration_config");
    // Now: 404
  • Breakingresponse.property.removed

    Response field card_issuer_decline removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    insights_resources_payment_evaluation_insights.card_issuer_decline · reachable from 1 operation
    // response.card_issuer_decline is now undefined
    const card_issuer_decline = response.card_issuer_decline;
  • Breakingpath.removed

    /v1/fabric/service/subscribe removed

    Requests to this path now 404.

    /v1/fabric/service/subscribe
    // Was:
    await client.request("GET", "/v1/fabric/service/subscribe");
    // Now: 404
  • Additiveresponse.property.type-narrowed

    Response type narrowed

    A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.

    payment_method_details_payment_record_us_bank_account.expected_debit_date · reachable from 99 operations
  • Additivepath.added

    /v1/terminal/refunds added

    No action needed.

    /v1/terminal/refunds

Additive11 new response fieldspayment_method_details_card_present.location, payment_method_details_card_present.reader, payment_intent_payment_method_options_us_bank_account.transaction_purpose, payment_method_details_interac_present.location, payment_method_details_interac_present.reader, mandate_bacs_debit.display_name, mandate_bacs_debit.service_user_number, tax_product_registrations_resource_country_options.lk +3 more

Additive5 new request propertiespayment_method_options.us_bank_account.transaction_purpose, cellular, payment_behavior, optional_items, country_options.lk

Stripe2026-01-27 · a402765c1 additive
  • Additiveresponse.property.added

    Response field adjustable_quantity added

    No action needed unless you validate responses against a closed schema.

    item.adjustable_quantity · reachable from 30 operations
Stripe2026-01-22 · 7d73d55910 breaking4 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "pl_nip"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "pl_nip"

    4 places: invoices_resource_invoice_tax_id.type, payment_pages_checkout_session_tax_id.type, tax_id.type, tax_product_resource_customer_details_resource_tax_id.type
    switch (response.type) {
      // existing branches …
      // no branch for "pl_nip"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    bank can now return "adyen"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "adyen"

    3 places: payment_method_details_ideal.bank, payment_method_ideal.bank, setup_attempt_payment_method_details_ideal.bank
    switch (response.bank) {
      // existing branches …
      // no branch for "adyen"
      default:
        throw new Error("unexpected bank");
    }
  • Breakingdirection flipresponse.enum.value-added

    bic can now return "ADYBNL2A"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "ADYBNL2A"

    3 places: payment_method_details_ideal.bic, payment_method_ideal.bic, setup_attempt_payment_method_details_ideal.bic
    switch (response.bic) {
      // existing branches …
      // no branch for "ADYBNL2A"
      default:
        throw new Error("unexpected bic");
    }
  • Breakingdirection flipresponse.enum.value-added

    version can now return "2.3.0", "2.3.1"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "2.3.0", "2.3.1"

    2 places: three_d_secure_details.version, three_d_secure_details_charge.version
    switch (response.version) {
      // existing branches …
      // no branch for "2.3.0"
      // no branch for "2.3.1"
      default:
        throw new Error("unexpected version");
    }
  • Breakingdirection flipresponse.enum.value-added

    balance_type can now return "risk_reserved"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    balance_transaction.balance_type · reachable from 531 operations
    switch (response.balance_type) {
      // existing branches …
      // no branch for "risk_reserved"
      default:
        throw new Error("unexpected balance_type");
    }
  • Breakingdirection flipresponse.enum.value-added

    type can now return "reserve_hold", "reserve_release"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    balance_transaction.type · reachable from 531 operations
    switch (response.type) {
      // existing branches …
      // no branch for "reserve_hold"
      // no branch for "reserve_release"
      default:
        throw new Error("unexpected type");
    }
  • Breakingresponse.property.removed

    Response field preferred_settlement_speed removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    payment_intent_payment_method_options_us_bank_account.preferred_settlement_speed · reachable from 405 operations
    // response.preferred_settlement_speed is now undefined
    const preferred_settlement_speed = response.preferred_settlement_speed;
  • Breakingresponse.property.removed

    Response field bgn removed

    Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.

    terminal_configuration_configuration_resource_tipping.bgn · reachable from 4 operations
    // response.bgn is now undefined
    const bgn = response.bgn;
  • Breakingdirection fliprequest.property.removed

    preferred_settlement_speed is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/payment_intents · payment_method_options.us_bank_account.preferred_settlement_speed · 3 call sites
    await client.post("/v1/payment_intents", {
      // preferred_settlement_speed is now ignored, not rejected
      preferred_settlement_speed: value,
    });
  • Breakingdirection fliprequest.property.removed

    bgn is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    POST /v1/terminal/configurations · tipping.bgn · 2 call sites
    await client.post("/v1/terminal/configurations", {
      // bgn is now ignored, not rejected
      bgn: value,
    });
  • Additivepath.added

    /v1/radar/payment_evaluations added

    No action needed.

    /v1/radar/payment_evaluations
  • Additiverequest.property.added

    Request property enforce_arithmetic_validation added

    No action needed unless it is required.

    POST /v1/payment_intents · amount_details.enforce_arithmetic_validation · 5 call sites

Additive2 new response fieldspayment_flows_amount_details.error, treasury_received_debits_resource_linked_flows.topup

Stripe2025-12-12 · 03af40461 additive
  • Additiveresponse.property.added

    Response field subtotal added

    No action needed unless you validate responses against a closed schema.

    line_item.subtotal · reachable from 423 operations
Stripe2025-12-11 · ed93b9427 additive

Additive7 new response fieldspayment_method_details_acss_debit.expected_debit_date, payment_method_details_au_becs_debit.expected_debit_date, payment_method_details_bacs_debit.expected_debit_date, payment_method_details_nz_bank_account.expected_debit_date, payment_method_details_sepa_debit.expected_debit_date, payment_method_details_us_bank_account.expected_debit_date, payment_method_details_payment_record_us_bank_account.expected_debit_date

Stripe2025-12-08 · 14a40f813 breaking73 additive

Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it.

  • Breakingdirection flipresponse.enum.value-added

    type can now return "payto"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "payto"

    7 places: confirmation_tokens_resource_payment_method_preview.type, invoices_payment_settings.payment_method_types[], payment_intent.excluded_payment_method_types[], payment_link.payment_method_types[], payment_method.type, setup_intent.excluded_payment_method_types[] +1 more
    switch (response.type) {
      // existing branches …
      // no branch for "payto"
      default:
        throw new Error("unexpected type");
    }
  • Breakingdirection flipresponse.enum.value-added

    bank can now return "mollie"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "mollie"

    3 places: payment_method_details_ideal.bank, payment_method_ideal.bank, setup_attempt_payment_method_details_ideal.bank
    switch (response.bank) {
      // existing branches …
      // no branch for "mollie"
      default:
        throw new Error("unexpected bank");
    }
  • Breakingdirection flipresponse.enum.value-added

    bic can now return "MLLENL2A"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "MLLENL2A"

    3 places: payment_method_details_ideal.bic, payment_method_ideal.bic, setup_attempt_payment_method_details_ideal.bic
    switch (response.bic) {
      // existing branches …
      // no branch for "MLLENL2A"
      default:
        throw new Error("unexpected bic");
    }
  • Additiverequest.param.optional-added

    customer_account is now optional

    No action needed.

    GET /v1/invoices · customer_account · 14 call sites
  • Additivepath.added

    /v1/fabric/service/integration_config added

    No action needed.

    /v1/fabric/service/integration_config
  • Additiverequest.param.optional-added

    invoice is now optional

    No action needed.

    GET /v1/customers/{customer}/balance_transactions · invoice
  • Additiverequest.param.optional-added

    related_customer_account is now optional

    No action needed.

    GET /v1/identity/verification_sessions · related_customer_account
  • Additiverequest.param.optional-added

    allow_redisplay is now optional

    No action needed.

    GET /v1/payment_methods · allow_redisplay
  • Additivepath.added

    /v1/fabric/service/subscribe added

    No action needed.

    /v1/fabric/service/subscribe

Additive53 new response fieldscustomer.customer_account, payment_method.customer_account, payment_method.payto, setup_intent.customer_account, payment_intent.customer_account, account_capabilities.payto_payments, tax_id.customer_account, discount.customer_account +45 more

Additive14 new request propertiescustomer_account, payment_method_options.payto, payment_method_data.payto, payment_settings.payment_method_options.payto, account_holder.customer_account, payto, capabilities.payto_payments, documents.proof_of_registration.signer +6 more