--- title: Create a design subtitle: Create and name your bundle design. route: /issuing/cards/physical/create-design --- # Create a design Create and name your bundle design. To create and name your design in the Issuing Dashboard or API before issuing cards to your cardholders, go directly to the [Designs](https://dashboard.stripe.com/test/issuing/personalization-designs) tab and click on **New design**. The standard option is always available, while the custom option becomes available after you order a custom bundle. ## Use a standard bundle 1. Visit the [Designs tab](https://dashboard.stripe.com/test/issuing/personalization-designs) in the Issuing Dashboard. ![Personalization designs](https://b.stripecdn.com/docs-statics-srv/assets/card-issuing-designs-tab.8005cf6843cfad8a17067f2cb7eef4e3.png) 1. Click **New design** on the upper right and select the **Standard** physical bundle type. 1. Select a white or black card. ![Choose a physical bundle](https://b.stripecdn.com/docs-statics-srv/assets/choose-physical-bundle.b72ce7b9da304477e2c8ef84993a5599.png) 1. Upload your card logo. The logo must be in .PNG format, with a legible size of 1000px by 200px. It must be a binary image containing a black logo on a white background with no grayscale. 1. Set your carrier text. ![Custom carrier letter](https://b.stripecdn.com/docs-statics-srv/assets/customize-carrier-letter.de2468a680e90b169109fd1c95e1db8d.png) 1. Review the design summary and set a name used to specify the physical bundle when [issuing cards](https://stripe.com/issuing/cards/physical/issue-cards) to your cardholders. 1. Click **Submit** to send your [design for review](#design-review). ## Use a custom bundle 1. Visit the [Designs tab](https://dashboard.stripe.com/test/issuing/personalization-designs) in the Issuing Dashboard. ![Personalization designs](https://b.stripecdn.com/docs-statics-srv/assets/card-issuing-designs-tab.8005cf6843cfad8a17067f2cb7eef4e3.png) 1. Click **New design** on the upper right and select the **Custom** physical bundle type. 1. Select the custom bundle from the drop-down list. Stripe enables visibility of the bundle in the Dashboard after the order has been manufactured and made live. See [Order a custom bundle](https://stripe.com/issuing/cards/physical/order-custom-bundle) for more details. 1. If you’ve chosen to add an additional logo during [personalization](https://stripe.com/issuing/cards/choose-bundle#manufacturing-personalization), you’re prompted to upload your card logo next. Ensure the logo is in .PNG format, with a legible size of 1000px by 200px. It must be a binary image containing a black logo on a white background with no grayscale. 1. If you’ve chosen the standard carrier, you’re prompted to upload your carrier text next. ![Custom physical bundle](https://b.stripecdn.com/docs-statics-srv/assets/custom-physical-bundle.a5d0bb3b3206c19d3aba48e3d18f859f.png) 1. Review design summary and set a personalization design name. The personalization design name is used to specify the physical bundle when [issuing cards](https://stripe.com/issuing/cards/physical/issue-cards) to your cardholders. ![Custom design summary](https://b.stripecdn.com/docs-statics-srv/assets/custom-design-summary.feda6552ffa73fc575d217cf45b03008.png) 1. Click **Submit** to send your design for review. This is only applicable when an additional logo is added on the card or text is added on the standard carriers. ## Use a bundle While we recommend using the Dashboard for managing personalization designs, you can also handle them with the [Personalization Design API](https://stripe.com/api/issuing/personalization_designs). Here’s how to create a personalization design using the API: 1. List the physical bundles available to you using the [Physical Bundles API](https://stripe.com/api/issuing/physical_bundles/retrieve): Code snippet calling get /v1/issuing/physical_bundles in curl (resource-based pattern). ```curl curl https://api.stripe.com/v1/issuing/physical_bundles \ -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2:" ``` Code snippet calling get /v1/issuing/physical_bundles in cli (resource-based pattern). ```cli stripe issuing physical_bundles list ``` Code snippet calling get /v1/issuing/physical_bundles in ruby (resource-based pattern). ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2' physical_bundles = Stripe::Issuing::PhysicalBundle.list() ``` Code snippet calling get /v1/issuing/physical_bundles in ruby (service-based pattern). ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("sk_test_BQokikJOvBiI2HlWgH4olfQ2") physical_bundles = client.v1.issuing.physical_bundles.list() ``` Code snippet calling get /v1/issuing/physical_bundles in python (resource-based pattern). ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys import stripe stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" physical_bundles = stripe.issuing.PhysicalBundle.list() ``` Code snippet calling get /v1/issuing/physical_bundles in python (service-based pattern). ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2") physical_bundles = client.issuing.physical_bundles.list() ``` Code snippet calling get /v1/issuing/physical_bundles in php (resource-based pattern). ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('sk_test_BQokikJOvBiI2HlWgH4olfQ2'); $physicalBundles = $stripe->issuing->physicalBundles->all([]); ``` Code snippet calling get /v1/issuing/physical_bundles in java (resource-based pattern). ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; PhysicalBundleListParams params = PhysicalBundleListParams.builder().build(); PhysicalBundleCollection physicalBundles = PhysicalBundle.list(params); ``` Code snippet calling get /v1/issuing/physical_bundles in java (service-based pattern). ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); PhysicalBundleListParams params = PhysicalBundleListParams.builder().build(); StripeCollection stripeCollection = client.issuing().physicalBundles().list(params); ``` Code snippet calling get /v1/issuing/physical_bundles in node (resource-based pattern). ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('sk_test_BQokikJOvBiI2HlWgH4olfQ2'); const physicalBundles = await stripe.issuing.physicalBundles.list(); ``` Code snippet calling get /v1/issuing/physical_bundles in go (resource-based pattern). ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys stripe.Key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" params := &stripe.IssuingPhysicalBundleListParams{}; result := physicalbundle.List(params); ``` Code snippet calling get /v1/issuing/physical_bundles in go (service-based pattern). ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); params := &stripe.IssuingPhysicalBundleListParams{}; result := sc.V1IssuingPhysicalBundles.List(context.TODO(), params); ``` Code snippet calling get /v1/issuing/physical_bundles in dotnet (resource-based pattern). ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeConfiguration.ApiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; var service = new Stripe.Issuing.PhysicalBundleService(); StripeList physicalBundles = service.List(); ``` Code snippet calling get /v1/issuing/physical_bundles in dotnet (service-based pattern). ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var client = new StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); var service = client.V1.Issuing.PhysicalBundles; StripeList physicalBundles = service.List(); ``` ```json "data": [ { id: "ics_Kc3MX9PPsUFFMp", object: "issuing.physical_bundle", livemode: true, name: "US Visa Credit White", type: "standard", status: "active" }, ... ] ``` 1. Choose a physical bundle from the response and note its `id`. The bundle determines the card’s color. 1. Upload a .PNG file of your card logo using the [Files API](https://stripe.com/api/files/create), and specify the purpose as `issuing_logo`: ```bash curl https://files.stripe.com/v1/files \ -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \ -F "file"="@/path/to/a/file.jpg" \ -F "purpose"="issuing_logo" ``` 1. [Create a personalization design](https://stripe.com/api/issuing/personalization_designs/create) with the physical bundle ID and the file ID from the previous steps. You can also supply carrier text here. Code snippet calling post /v1/issuing/personalization_designs in curl (resource-based pattern). ```curl curl https://api.stripe.com/v1/issuing/personalization_designs \ -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2:" \ -d physical_bundle=ics_Kc3MX9PPsUFFMp \ -d card_logo="{{FILE_ID}}" \ -d "carrier_text[header_title]"=Hello ``` Code snippet calling post /v1/issuing/personalization_designs in cli (resource-based pattern). ```cli stripe issuing personalization_designs create \ --physical-bundle=ics_Kc3MX9PPsUFFMp \ --card-logo="{{FILE_ID}}" \ -d "carrier_text[header_title]"=Hello ``` Code snippet calling post /v1/issuing/personalization_designs in ruby (resource-based pattern). ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2' personalization_design = Stripe::Issuing::PersonalizationDesign.create({ physical_bundle: 'ics_Kc3MX9PPsUFFMp', card_logo: '{{FILE_ID}}', carrier_text: {header_title: 'Hello'}, }) ``` Code snippet calling post /v1/issuing/personalization_designs in ruby (service-based pattern). ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("sk_test_BQokikJOvBiI2HlWgH4olfQ2") personalization_design = client.v1.issuing.personalization_designs.create({ physical_bundle: 'ics_Kc3MX9PPsUFFMp', card_logo: '{{FILE_ID}}', carrier_text: {header_title: 'Hello'}, }) ``` Code snippet calling post /v1/issuing/personalization_designs in python (resource-based pattern). ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys import stripe stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" personalization_design = stripe.issuing.PersonalizationDesign.create( physical_bundle="ics_Kc3MX9PPsUFFMp", card_logo="{{FILE_ID}}", carrier_text={"header_title": "Hello"}, ) ``` Code snippet calling post /v1/issuing/personalization_designs in python (service-based pattern). ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2") personalization_design = client.issuing.personalization_designs.create({ "physical_bundle": "ics_Kc3MX9PPsUFFMp", "card_logo": "{{FILE_ID}}", "carrier_text": {"header_title": "Hello"}, }) ``` Code snippet calling post /v1/issuing/personalization_designs in php (resource-based pattern). ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('sk_test_BQokikJOvBiI2HlWgH4olfQ2'); $personalizationDesign = $stripe->issuing->personalizationDesigns->create([ 'physical_bundle' => 'ics_Kc3MX9PPsUFFMp', 'card_logo' => '{{FILE_ID}}', 'carrier_text' => ['header_title' => 'Hello'], ]); ``` Code snippet calling post /v1/issuing/personalization_designs in java (resource-based pattern). ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; PersonalizationDesignCreateParams params = PersonalizationDesignCreateParams.builder() .setPhysicalBundle("ics_Kc3MX9PPsUFFMp") .setCardLogo("{{FILE_ID}}") .setCarrierText( PersonalizationDesignCreateParams.CarrierText.builder() .setHeaderTitle("Hello") .build() ) .build(); PersonalizationDesign personalizationDesign = PersonalizationDesign.create(params); ``` Code snippet calling post /v1/issuing/personalization_designs in java (service-based pattern). ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); PersonalizationDesignCreateParams params = PersonalizationDesignCreateParams.builder() .setPhysicalBundle("ics_Kc3MX9PPsUFFMp") .setCardLogo("{{FILE_ID}}") .setCarrierText( PersonalizationDesignCreateParams.CarrierText.builder() .setHeaderTitle("Hello") .build() ) .build(); PersonalizationDesign personalizationDesign = client.issuing().personalizationDesigns().create(params); ``` Code snippet calling post /v1/issuing/personalization_designs in node (resource-based pattern). ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('sk_test_BQokikJOvBiI2HlWgH4olfQ2'); const personalizationDesign = await stripe.issuing.personalizationDesigns.create({ physical_bundle: 'ics_Kc3MX9PPsUFFMp', card_logo: '{{FILE_ID}}', carrier_text: { header_title: 'Hello', }, }); ``` Code snippet calling post /v1/issuing/personalization_designs in go (resource-based pattern). ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys stripe.Key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" params := &stripe.IssuingPersonalizationDesignParams{ PhysicalBundle: stripe.String("ics_Kc3MX9PPsUFFMp"), CardLogo: stripe.String("{{FILE_ID}}"), CarrierText: &stripe.IssuingPersonalizationDesignCarrierTextParams{ HeaderTitle: stripe.String("Hello"), }, }; result, err := personalizationdesign.New(params); ``` Code snippet calling post /v1/issuing/personalization_designs in go (service-based pattern). ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); params := &stripe.IssuingPersonalizationDesignCreateParams{ PhysicalBundle: stripe.String("ics_Kc3MX9PPsUFFMp"), CardLogo: stripe.String("{{FILE_ID}}"), CarrierText: &stripe.IssuingPersonalizationDesignCreateCarrierTextParams{ HeaderTitle: stripe.String("Hello"), }, }; result, err := sc.V1IssuingPersonalizationDesigns.Create(context.TODO(), params); ``` Code snippet calling post /v1/issuing/personalization_designs in dotnet (resource-based pattern). ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeConfiguration.ApiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; var options = new Stripe.Issuing.PersonalizationDesignCreateOptions { PhysicalBundle = "ics_Kc3MX9PPsUFFMp", CardLogo = "{{FILE_ID}}", CarrierText = new Stripe.Issuing.PersonalizationDesignCarrierTextOptions { HeaderTitle = "Hello", }, }; var service = new Stripe.Issuing.PersonalizationDesignService(); Stripe.Issuing.PersonalizationDesign personalizationDesign = service.Create(options); ``` Code snippet calling post /v1/issuing/personalization_designs in dotnet (service-based pattern). ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new Stripe.Issuing.PersonalizationDesignCreateOptions { PhysicalBundle = "ics_Kc3MX9PPsUFFMp", CardLogo = "{{FILE_ID}}", CarrierText = new Stripe.Issuing.PersonalizationDesignCarrierTextOptions { HeaderTitle = "Hello", }, }; var client = new StripeClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2"); var service = client.V1.Issuing.PersonalizationDesigns; Stripe.Issuing.PersonalizationDesign personalizationDesign = service.Create(options); ``` 1. After creating your personalization design, it’s sent for review. ## Design review Stripe reviews all logos and carrier text to make sure they comply with the guidelines set by our partner networks. We approve almost all designs, but we might reject yours if it contains: - The name of another legal entity. - A reference to a different network (for example, Mastercard if you’re issuing on Visa). - The name of a geographic location. - A reference to non-fiat currency (for example, cryptocurrency). - Advertising or promotional language. - Inappropriate text or imagery. ## Design rejection If Stripe rejects your design, we notify you by email within 2 business days and ask you to resubmit an updated design. When Stripe approves your design, we submit any cards that you issued using the design to the vendor. To issue cards with your newly created personalization design, see [Issue cards](https://stripe.com/issuing/cards/physical/issue-cards).