Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
    Overview
    Payment method integration options
    Manage default payment methods in the Dashboard
    Payment method types
    Cards
      CITs and MITs
      How cards work
      Card Product Codes
      Cartes Bancaires
      eftpos Australia
      Co-badged cards compliance
      Installments
    Pay with Stripe balance
    Bank debits
    Bank redirects
    Bank transfers
    Credit transfers (Sources)
    Buy now, pay later
    Real-time payments
    Vouchers
    Wallets
    Enable local payment methods by country
    Custom payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsAdd payment methodsCards

Co-badged cards compliance

Learn about EU regulations requiring customer choice for co-badged cards.

Copy page

Does this regulation apply to me?

Regulation (EU) 2015/751 applies to all businesses in the EEA that can process Cartes Bancaires. Sign in and return to this section to view if co-badged card regulation applies to you.

Applicable in:

Austria
Belgium
Bulgaria
Croatia
Cyprus
Czech Republic
Denmark
Estonia
Finland
France
Germany
Greece
Hungary
Iceland
Ireland
Italy
Latvia
Liechtenstein
Lithuania
Luxembourg
Malta
Netherlands
Norway
Poland
Portugal
Romania
Slovakia
Slovenia
Spain
Sweden

Regulatory requirements

Regulation (EU) 2015/751 requires businesses in the European Economic Area (EEA) to honor customers’ card brand choice for co-badged cards (for example, Cartes Bancaires cards co-badged with Visa). In practice, this means you must enable cardholders to select a preferred card brand within your checkout form in accordance with these guidelines:

  • Display the available card networks in your checkout form: All available card networks must be clearly identified during the checkout process. The visual quality, clarity, and size of the brand logos must be consistent, and it should be clear to cardholders how to select a card network.
  • Abide by the cardholder’s preferred card network: Where the cardholder chooses their preferred card network, you must use it when confirming a payment or storing card details for future use. If the cardholder doesn’t make a choice, you can choose your card network for the transaction.
  • Allow updates to the preferred card network: You must present cardholders updating their payment methods that are saved for future use with the option to change their preferred card network when they’re updating their payment details. For example, you can provide a customer portal for managing saved payment methods.

When regulation applies

Cartes Bancaires co-badged cards are the only Stripe-supported cards that fall under this regulation. As a result, Regulation (EU) 2015/751 applies to businesses that:

  • Are in the EEA
  • Can process Cartes Bancaires

Connect users

In Connect integrations, the merchant of record on a transaction is the business we use to determine if co-badged regulation applies. Depending on the Connect integration, this can either be the Platform or the Connected account.

Businesses that meet the above criteria are required to present customers with a choice of card network for all transactions that can processed with Cartes Bancaires. A transaction is eligible for Cartes Bancaires if:

  • The business can process Cartes Bancaires
  • The currency is EUR
  • The payment method is a co-badged Cartes Bancaires card

Using sandbox enviornments

Cartes Bancaires is always enabled in sandbox environments. As a result, you might see the network selector on Stripe-hosted UIs in a sandbox even if you don’t enable Cartes Bancaires. This allows you to preview how Stripe-hosted UIs might handle co-badged cards if Cartes Bancaires was enabled.

Integration guides

Stripe-hosted UIs, such as Checkout, Payment Links, and Elements, will automatically display a network selector when you meet the applicability criteria above, if configured according to the following guides. You can migrate to a Stripe-hosted UI to use these features.

For other integrations, you’re fully responsible for making sure your integration complies with the regulation requirements.

If you maintain a custom checkout integration and have access to raw card data APIs, Stripe provides you with tools to make your integration compliant with card brand choice regulations.

You can use the stripe.retrieveCardNetworks method in Stripe.js to identify available networks for customer card numbers, to determine if you must display network preference controls for them.

Load and initialize Stripe.js

Make sure Stripe.js is installed on your website. Always load Stripe.js from js.stripe.com to remain compliant. Don’t include the script in a bundle or host it yourself.

<!-- Somewhere in your site's <head> --> <script src="https://js.stripe.com/v3"></script>
client.js
const stripe = Stripe("pk_test_TYooMQauvdEDq54NiTphI7jx");

You can also import our thin wrapper package, @stripe/stripe-js, to load Stripe.js dynamically in your checkout flow.

client.js
import {loadStripe} from '@stripe/stripe-js/pure'; // Stripe.js won't load until `loadStripe` is called const stripe = await loadStripe('pk_test_TYooMQauvdEDq54NiTphI7jx');

Retrieve available networks for card numbers

Update your current card number event handler to call stripe.retrieveCardNetworks as customers enter their card details. The method returns an object with a single property, networks, which will either be null or an array of network types.

After your customer has typed 8+ digits of their card number, the method starts returning available networks for the card.

client.js
const {networks} = await stripe.retrieveCardNetworks(rawCardNumber)

Render network preference selection to your customers

After identifying available networks with stripe.retrieveCardNetworks, determine if you need to show a selector for your customer to choose their preferred card brand. When only a single network is recognized, you don’t need to show a network selector and can show a single recognized card brand instead. When multiple networks are recognized, show a selector for your customer to choose their preferred card brand. How you implement this UI is up to you, but it’s important to make sure all network options are treated with equal visual priority.

Note

If you’re displaying card brand icons today, it’s likely that you’re immediately identifying brands after one or two numbers are typed in. In supporting card brand choice, change this behavior by delaying presentation of recognized brands until you receive a response from stripe.retrieveCardNetworks.

Changing this behavior avoids a scenario such as presenting Visa immediately, then eventually showing a co-badged network selection after co-badged networks are detected.

Pass the network preference to the Stripe API

Update your payment flow to pass along the customer network preference.

For PaymentMethods, pass the network preference to the card[networks][preferred] parameter.

server.js
await stripe.paymentMethods.create({ type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, });

For Tokens, pass the network preference to the card[networks][preferred] parameter.

server.js
await stripe.tokens.create({ card: { // ...other card data networks: { preferred: networkSelection }, });

For PaymentIntents or SetupIntents, pass the network preference to the payment_method_data[card][networks][preferred] parameter.

server.js
await stripe.paymentIntent.create({ // ...other Payment Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } }); await stripe.paymentIntent.update({ // ...other Payment Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } }); await stripe.paymentIntent.confirm({ // ...other Payment Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } }); await stripe.setupIntent.create({ // ...other Setup Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } }); await stripe.setupIntent.update({ // ...other Setup Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } }); await stripe.setupIntent.confirm({ // ...other Setup Intent data payment_method_data: { type: 'card', card: { // ...other card data networks: { preferred: networkSelection }, } });

Note

The Sources API is deprecated and doesn’t support storing the customer preference. To comply with EU requirements, upgrade your Sources integration to use the Payment Methods API.

OptionalDisplay preferred networks on return use of saved payment methods

OptionalAllow customers to update the network preference for saved payment methods

Identifying network used to process a charge

The charge object associated with a successful payment contains a network field indicating which card network the payment was processed on:

{ "id": "ch_1Ff52K2eZvKYlo2CWe10i0s7", "object": "charge", ... "payment_method_details": { "card": { "brand": "visa", ... "network": "cartes_bancaires", }, "type": "card" } }

Testing

You can use the following co-badged cards to test your integration:

NumberBrandCVCDate
Cartes Bancaires or VisaAny 3 digitsAny future date
Cartes Bancaires or MastercardAny 3 digitsAny future date
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc