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,
});Additivepath.added
/v1/apps/installs added
No action needed.
/v1/apps/installs · 12 call sites
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