Search code examples
javastripe-payments

Stripe SetupIntent automatic payment method shows SEPA for USD connected account


While upgrading our Stripe API Version (and thus also our java library version) i wanted to make use of the newly added automatic_payment_method field for SetupIntents we use with for connected Accounts.

We manage multiple connected Accounts in different parts of the World (USA, Europe and Australia) and thus our active payment method defaults include SEPA, iDEAL etc.

I was a bit surprised to learn that Stripe seems to offer SEPA Direct Debit for a connected Account in USA, for a customer who has their address in USA as well. Is there a way to tell Stripe that this is a USD transaction and thus it automatically hides payment methods, which are not applicable (even though it is enabled in the connected account)?

This is how we create the SetupIntent

SetupIntentCreateParams.Builder paramsBuilder = SetupIntentCreateParams.builder()
      .setCustomer(customer.getStripeId())
      .setAutomaticPaymentMethods(AutomaticPaymentMethods.builder()
          .setEnabled(true)
              .build())
      .setOnBehalfOf(stripeConnectedAccountId)
      .setUsage(SetupIntentCreateParams.Usage.OFF_SESSION);

Solution

  • SEPA DD is available to US Stripe accounts as international payment methods.
    https://stripe.com/pricing/local-payment-methods

    As such, the only way to natively restrict what payment methods are automatically rendered on the payment intent would be with the currency, however Setup Intents have no notion of currency.

    Frankly, if you need to not display SEPA for Setup Intents made on behalf of connected accounts, I'd recommend reverting to using payment_method_types instead of using automatic_payment_methods.