diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java
index eb97c1bd57dded333c3185753c10c391b42e39f0..475a90a3310ce72bda9889e0d74e7799ff5a261f 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java
@@ -190,10 +190,10 @@ public class SubscriptionController {
         }));
   }
 
-  // This logic to exclude some iOS client versions from receiving SEPA_DEBIT
+  // This logic to exclude some iOS client versions from receiving SEPA_DEBIT or IDEAL
   // as a supported payment method can be removed after 01-23-24.
   private boolean excludePaymentMethod(@Nullable final UserAgent userAgent, final PaymentMethod paymentMethod) {
-    return paymentMethod == PaymentMethod.SEPA_DEBIT
+    return (paymentMethod == PaymentMethod.SEPA_DEBIT || paymentMethod == PaymentMethod.IDEAL)
         && userAgent != null
         && userAgent.getPlatform() == ClientPlatform.IOS
         && userAgent.getVersion().isLowerThanOrEqualTo(LAST_PROBLEMATIC_IOS_VERSION);
@@ -392,7 +392,7 @@ public class SubscriptionController {
 
   private SubscriptionProcessorManager getManagerForPaymentMethod(PaymentMethod paymentMethod) {
     return switch (paymentMethod) {
-      case CARD, SEPA_DEBIT -> stripeManager;
+      case CARD, SEPA_DEBIT, IDEAL -> stripeManager;
       case PAYPAL -> braintreeManager;
       case UNKNOWN -> throw new BadRequestException("Invalid payment method");
     };
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java
index 1477e45c3ce73eaf403e8a0201d2e5a92f6c6c37..2dfa09d92309bf7f3d6441378cbf330189a4c3ad 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java
@@ -19,4 +19,8 @@ public enum PaymentMethod {
    * A SEPA debit account
    */
   SEPA_DEBIT,
+  /**
+   * An iDEAL account
+   */
+  IDEAL,
 }
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
index 741df5e4651d88a1508b2f5c82fe38947d3af2d5..35b6fa921ddc3aca82e9bcf05cfc5aac390ec736 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
@@ -107,7 +107,9 @@ public class StripeManager implements SubscriptionProcessorManager {
 
   @Override
   public boolean supportsPaymentMethod(PaymentMethod paymentMethod) {
-    return paymentMethod == PaymentMethod.CARD || paymentMethod == PaymentMethod.SEPA_DEBIT;
+    return paymentMethod == PaymentMethod.CARD
+        || paymentMethod == PaymentMethod.SEPA_DEBIT
+        || paymentMethod == PaymentMethod.IDEAL;
   }
 
   private RequestOptions commonOptions() {
diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java
index 98f61156b01f493d4f14a85b9bcd7b916541b878..6ca617adc55016b4ef70b0ef78bf69943da3af30 100644
--- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java
+++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java
@@ -132,6 +132,8 @@ class SubscriptionControllerTest {
         .thenReturn(Set.of("usd", "jpy", "bif", "eur"));
     when(STRIPE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.SEPA_DEBIT))
         .thenReturn(Set.of("eur"));
+    when(STRIPE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.IDEAL))
+        .thenReturn(Set.of("eur"));
     when(BRAINTREE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.PAYPAL))
         .thenReturn(Set.of("usd", "jpy"));
   }
@@ -733,7 +735,7 @@ class SubscriptionControllerTest {
 
   @ParameterizedTest
   @MethodSource
-  void getSubscriptionConfiguration(final String userAgent, final boolean expectSepa) {
+  void getSubscriptionConfiguration(final String userAgent, final boolean expectNonCardPaymentMethods) {
     when(BADGE_TRANSLATOR.translate(any(), eq("B1"))).thenReturn(new Badge("B1", "cat1", "name1", "desc1",
         List.of("l", "m", "h", "x", "xx", "xxx"), "SVG",
         List.of(new BadgeSvg("sl", "sd"), new BadgeSvg("ml", "md"), new BadgeSvg("ll", "ld"))));
@@ -811,7 +813,7 @@ class SubscriptionControllerTest {
                 List.of(BigDecimal.valueOf(5))));
         assertThat(currency.subscription()).isEqualTo(
             Map.of("5", BigDecimal.valueOf(5), "15", BigDecimal.valueOf(15),"35", BigDecimal.valueOf(35)));
-        final List<String> expectedPaymentMethods = expectSepa ? List.of("CARD", "SEPA_DEBIT") : List.of("CARD");
+        final List<String> expectedPaymentMethods = expectNonCardPaymentMethods ? List.of("CARD", "SEPA_DEBIT", "IDEAL") : List.of("CARD");
         assertThat(currency.supportedPaymentMethods()).isEqualTo(expectedPaymentMethods);
       });
     });