Driftwatch

Stripe / Stripe API /

Breakingdirection flip: their tools call this safe

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"

What changed

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

Affects device_type on deleted_terminal.reader reachable from 3 operations.

New values: simulated_verifone_m425, simulated_verifone_p630, simulated_verifone_ux700, simulated_verifone_v660p, verifone_m425, verifone_p630, verifone_ux700, verifone_v660p.

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

Who is affected

Code that reads Stripe's deleted_terminal.reader objects, used by 15 Stripe operations.

Before and after

WhereBeforeAfter
deleted_terminal.reader.device_type"bbpos_chipper2x", "bbpos_wisepad3", "bbpos_wisepos_e", "mobile_phone_reader", "simulated_stripe_s700", "simulated_stripe_s710", "simulated_wisepos_e", "stripe_m2", "stripe_s700", "stripe_s710", "verifone_P400""bbpos_chipper2x", "bbpos_wisepad3", "bbpos_wisepos_e", "mobile_phone_reader", "simulated_stripe_s700", "simulated_stripe_s710", "simulated_verifone_m425", "simulated_verifone_p630", "simulated_verifone_ux700", "simulated_verifone_v660p", "simulated_wisepos_e", "stripe_m2", "stripe_s700", "stripe_s710", "verifone_P400", "verifone_m425", "verifone_p630", "verifone_ux700", "verifone_v660p"
terminal.reader.device_type"bbpos_chipper2x", "bbpos_wisepad3", "bbpos_wisepos_e", "mobile_phone_reader", "simulated_stripe_s700", "simulated_stripe_s710", "simulated_wisepos_e", "stripe_m2", "stripe_s700", "stripe_s710", "verifone_P400""bbpos_chipper2x", "bbpos_wisepad3", "bbpos_wisepos_e", "mobile_phone_reader", "simulated_stripe_s700", "simulated_stripe_s710", "simulated_verifone_m425", "simulated_verifone_p630", "simulated_verifone_ux700", "simulated_verifone_v660p", "simulated_wisepos_e", "stripe_m2", "stripe_s700", "stripe_s710", "verifone_P400", "verifone_m425", "verifone_p630", "verifone_ux700", "verifone_v660p"

Code that breaks

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

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