Driftwatch

Stripe / Stripe API /

Breakingdirection flip: their tools call this safe

allowed_payment_method_types can now return "card_present", "interac_present"

What changed

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

Affects allowed_payment_method_types[] on setup_intent reachable from 609 operations.

New values: card_present, interac_present.

can now return "card_present", "interac_present"

Who is affected

Code that reads Stripe's setup_intent objects, used by 609 Stripe operations.

Before and after

WhereBeforeAfter
setup_intent.allowed_payment_method_types[]"acss_debit", "affirm", "afterpay_clearpay", "alipay", "alma", "amazon_pay", "au_becs_debit", "bacs_debit", "bancontact", "billie", "bizum", "blik", "boku_promptpay", "boleto", "capchase_pay", "card", "cashapp", "check_scan", "click_to_pay", "crypto", "customer_balance", "demo_pay", "duitnow", "dummy_auth_push", "dummy_passthrough_card", "edenred", "eps", "fpx", "gcash", "getbalance", "gift_card", "giropay", "gopay", "grabpay", "id_bank_transfer", "ideal", "kakao_pay", "klarna", "knet", "konbini", "kr_card", "kr_market", "kriya", "link", "mb_way", "mobilepay", "momo", "mondu", "multibanco", "naver_pay", "netbanking", "ng_bank", "ng_bank_transfer", "ng_card", "ng_market", "ng_ussd", "ng_wallet", "nz_bank_account", "octopus", "oxxo", "p24", "paper_check", "pay_by_bank", "payco", "paynow", "paypal", "paypay", "payto", "pix", "promptpay", "qris", "rechnung", "revolut_pay", "samsung_pay", "satispay", "scalapay", "sepa_debit", "sequra", "shop_pay", "shopeepay", "sofort", "south_korea_market", "stripe_balance", "sunbit", "swish", "tamara", "test_pay", "touch_n_go", "truemoney", "twint", "upi", "us_bank_account", "us_cash_voucher", "vipps", "wechat_pay", "wero", "zip""acss_debit", "affirm", "afterpay_clearpay", "alipay", "alma", "amazon_pay", "au_becs_debit", "bacs_debit", "bancontact", "billie", "bizum", "blik", "boku_promptpay", "boleto", "capchase_pay", "card", "card_present", "cashapp", "check_scan", "click_to_pay", "crypto", "customer_balance", "demo_pay", "duitnow", "dummy_auth_push", "dummy_passthrough_card", "edenred", "eps", "fpx", "gcash", "getbalance", "gift_card", "giropay", "gopay", "grabpay", "id_bank_transfer", "ideal", "interac_present", "kakao_pay", "klarna", "knet", "konbini", "kr_card", "kr_market", "kriya", "link", "mb_way", "mobilepay", "momo", "mondu", "multibanco", "naver_pay", "netbanking", "ng_bank", "ng_bank_transfer", "ng_card", "ng_market", "ng_ussd", "ng_wallet", "nz_bank_account", "octopus", "oxxo", "p24", "paper_check", "pay_by_bank", "payco", "paynow", "paypal", "paypay", "payto", "pix", "promptpay", "qris", "rechnung", "revolut_pay", "samsung_pay", "satispay", "scalapay", "sepa_debit", "sequra", "shop_pay", "shopeepay", "sofort", "south_korea_market", "stripe_balance", "sunbit", "swish", "tamara", "test_pay", "touch_n_go", "truemoney", "twint", "upi", "us_bank_account", "us_cash_voucher", "vipps", "wechat_pay", "wero", "zip"
payment_intent.allowed_payment_method_types[]"acss_debit", "affirm", "afterpay_clearpay", "alipay", "alma", "amazon_pay", "au_becs_debit", "bacs_debit", "bancontact", "billie", "bizum", "blik", "boku_promptpay", "boleto", "capchase_pay", "card", "cashapp", "check_scan", "click_to_pay", "crypto", "customer_balance", "demo_pay", "duitnow", "dummy_auth_push", "dummy_passthrough_card", "edenred", "eps", "fpx", "gcash", "getbalance", "gift_card", "giropay", "gopay", "grabpay", "id_bank_transfer", "ideal", "kakao_pay", "klarna", "knet", "konbini", "kr_card", "kr_market", "kriya", "link", "mb_way", "mobilepay", "momo", "mondu", "multibanco", "naver_pay", "netbanking", "ng_bank", "ng_bank_transfer", "ng_card", "ng_market", "ng_ussd", "ng_wallet", "nz_bank_account", "octopus", "oxxo", "p24", "paper_check", "pay_by_bank", "payco", "paynow", "paypal", "paypay", "payto", "pix", "promptpay", "qris", "rechnung", "revolut_pay", "samsung_pay", "satispay", "scalapay", "sepa_debit", "sequra", "shop_pay", "shopeepay", "sofort", "south_korea_market", "stripe_balance", "sunbit", "swish", "tamara", "test_pay", "touch_n_go", "truemoney", "twint", "upi", "us_bank_account", "us_cash_voucher", "vipps", "wechat_pay", "wero", "zip""acss_debit", "affirm", "afterpay_clearpay", "alipay", "alma", "amazon_pay", "au_becs_debit", "bacs_debit", "bancontact", "billie", "bizum", "blik", "boku_promptpay", "boleto", "capchase_pay", "card", "card_present", "cashapp", "check_scan", "click_to_pay", "crypto", "customer_balance", "demo_pay", "duitnow", "dummy_auth_push", "dummy_passthrough_card", "edenred", "eps", "fpx", "gcash", "getbalance", "gift_card", "giropay", "gopay", "grabpay", "id_bank_transfer", "ideal", "interac_present", "kakao_pay", "klarna", "knet", "konbini", "kr_card", "kr_market", "kriya", "link", "mb_way", "mobilepay", "momo", "mondu", "multibanco", "naver_pay", "netbanking", "ng_bank", "ng_bank_transfer", "ng_card", "ng_market", "ng_ussd", "ng_wallet", "nz_bank_account", "octopus", "oxxo", "p24", "paper_check", "pay_by_bank", "payco", "paynow", "paypal", "paypay", "payto", "pix", "promptpay", "qris", "rechnung", "revolut_pay", "samsung_pay", "satispay", "scalapay", "sepa_debit", "sequra", "shop_pay", "shopeepay", "sofort", "south_korea_market", "stripe_balance", "sunbit", "swish", "tamara", "test_pay", "touch_n_go", "truemoney", "twint", "upi", "us_bank_account", "us_cash_voucher", "vipps", "wechat_pay", "wero", "zip"

Code that breaks

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");
}

Based on Stripe’s published API specification. How severity is decided.