Issuing Cards Invite Only

    Learn how to create cardholders and issue credit cards to them.

    Issuing a new card using Stripe is a two-step process:

    1. Create a cardholder with some information about them
    2. Create a card for the cardholder

    Issued cards must be activated before they can be used to make purchases.

    Step 1: Create a cardholder

    A cardholder represents an individual or business entity that can be issued cards. To get started, create a cardholder with a name, billing information, entity type, and any additional details you want to provide.

    curl https://api.stripe.com/v1/issuing/cardholders \
     -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
     -d name="Jenny Rosen" \
     -d email="jenny.rosen@example.com" \
     -d phone_number="+18008675309" \
     -d status=active \
     -d type=individual \
     -d billing[name]="Jenny Rosen" \
     -d billing[address][line1]="1234 Main Street" \
     -d billing[address][city]="San Francisco" \
     -d billing[address][state]=CA \
     -d billing[address][postal_code]=94111 \
     -d billing[address][country]=US
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    cardholder = Stripe::Issuing::Cardholder.create({
        name: 'Jenny Rosen',
        email: 'jenny.rosen@example.com',
        phone_number: '+18008675309',
        status: 'active',
        type: 'individual',
        billing: {
            name: 'Jenny Rosen',
            address: {
                line1: '1234 Main Street',
                city: 'San Francisco',
                state: 'CA',
                postal_code: '94111',
                country: 'US',
            },
        },
    })
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    cardholder = stripe.issuing.Cardholder.create(
      name='Jenny Rosen',
      email='jenny.rosen@example.com',
      phone_number='+18008675309',
      status='active',
      type='individual',
      billing={
        'name': 'Jenny Rosen',
        'address': {
          'line1': '1234 Main Street',
          'city': 'San Francisco',
          'state': 'CA',
          'postal_code': '94111',
          'country': 'US',
        }
      }
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    $cardholder = \Stripe\Issuing\Cardholder::create([
        'name' => 'Jenny Rosen',
        'email' => 'jenny.rosen@example.com',
        'phone_number' => '+18008675309',
        'status' => 'active',
        'type' => 'individual',
        'billing' => [
            'name' => 'Jenny Rosen',
            'address' => [
                'line1' => '1234 Main Street',
                'city' => 'San Francisco',
                'state' => 'CA',
                'postal_code' => '94111',
                'country' => 'US',
            ],
        ],
    ]);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    Map<String, Object> addressParams = new HashMap<String, Object>();
    addressParams.put("line1", "1234 Main Street");
    addressParams.put("city", "San Francisco");
    addressParams.put("state", "CA");
    addressParams.put("postal_code", "94111");
    addressParams.put("country", "US");
    
    Map<String, Object> billingParams = new HashMap<String, Object>();
    billingParams.put("name", "Jenny Rosen");
    billingParams.put("address", addressParams);
    
    Map<String, Object> cardholderParams = new HashMap<>();
    cardholderParams.put("name", "Jenny Rosen");
    cardholderParams.put("email", "jenny.rosen@example.com");
    cardholderParams.put("phone_number", "+18008675309");
    cardholderParams.put("status", "active");
    cardholderParams.put("type", "individual");
    cardholderParams.put("billing", billingParams);
    
    Cardholder cardholder = Cardholder.create(cardholderParams);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    const cardholder = stripe.issuing.cardholders.create({
      name: 'Jenny Rosen',
      email: 'jenny.rosen@example.com',
      phone_number: '+18008675309',
      status: 'active',
      type: 'individual',
      billing: {
        name: 'Jenny Rosen',
        address: {
          line1: '1234 Main Street',
          city: 'San Francisco',
          state: 'CA',
          postal_code: '94111',
          country: 'US',
        },
      },
    });
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    cardholder, err := New(&stripe.IssuingCardholderParams{
      Billing: &stripe.IssuingBillingParams{
        Address: &stripe.AddressParams{
          Country:    stripe.String("US"),
          Line1:      stripe.String("1234 Main Street"),
          City:       stripe.String("San Francisco"),
          PostalCode: stripe.String("94111"),
          State:      stripe.String("CA"),
        },
        Name: stripe.String("Jenny Rosen"),
      },
      Email: stripe.String("jenny.rosen@example.com"),
      Name: stripe.String("Jenny Rosen"),
      PhoneNumber: stripe.String("+18008675309"),
      Status: stripe.String(string(stripe.IssuingCardholderStatusActive)),
      Type: stripe.String(string(stripe.IssuingCardholderTypeIndividual)),
    })
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    var options = new CardholderCreateOptions
    {
        Billing = new BillingOptions
        {
            Name = "Jenny Rosen",
            Address = new AddressOptions {
                Line1 = "1234 Main Street",
                City = "San Francisco",
                State = "CA",
                PostalCode = "94111",
                Country = "US",
            },
        },
        Email = "jenny.rosen@example.com",
        PhoneNumber = "+18008675309",
        Name = "Jenny Rosen",
        Status = "active",
        Type = "individual",
    };
    
    var service = new CardholderService();
    Cardholder card = service.Create(options);
    

    Stripe returns a Cardholder object that contains the information you provided, and sends the issuing_cardholder.created webhook event.

    {
      "id": "ich_1Cm3pZIyNTgGDVfzI83rasFP",
      "object": "issuing.cardholder",
      "billing": {
        "address": {
          "city": "San Francisco",
          "country": "US",
          "line1": "1234 Main Street",
          "postal_code": "94111",
          "state": "CA"
    See all 23 lines }, "name": "Jenny Rosen" }, "created": 1531159885, "email": "jenny.rosen@example.com", "livemode": false, "metadata": { }, "name": "Jenny Rosen", "phone_number": "+18008675309", "status": "active", "type": "individual" }

    Step 2: Create a card

    After creating a cardholder, create a card that is assigned to them. This request contains the ID of the Cardholder object, currency, and card type (either physical or virtual). If you’re creating a physical card, a shipping address is required.

    curl https://api.stripe.com/v1/issuing/cards \
       -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
       -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \
       -d type=virtual \
       -d currency=usd
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card = Stripe::Issuing::Card.create({
        cardholder: 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
        type: 'virtual',
        currency: 'usd',
    })
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card = stripe.issuing.Card.create(
      cardholder='ich_1Cm3pZIyNTgGDVfzI83rasFP',
      type='virtual',
      currency='usd'
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    $card = \Stripe\Issuing\Card::create([
        'cardholder' => 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
        'type' => 'virtual',
        'currency' => 'usd',
    ]);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    Map<String, Object> cardParams = new HashMap<>();
    cardParams.put("cardholder", "ich_1Cm3pZIyNTgGDVfzI83rasFP");
    cardParams.put("type", "virtual");
    cardParams.put("currency", "usd");
    Card card = Card.create(cardParams);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    const card = stripe.issuing.cards.create({
      cardholder: 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
      type: 'virtual',
      currency: 'usd',
    });
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card, err := New(&stripe.IssuingCardParams{
      Cardholder: stripe.String("ich_1Cm3pZIyNTgGDVfzI83rasFP"),
      Currency: stripe.String(string(stripe.CurrencyUSD)),
      Type: stripe.String(string(stripe.IssuingCardShippingTypeVirtual)),
    })
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    var options = new CardCreateOptions {
        Cardholder = "ich_1Cm3pZIyNTgGDVfzI83rasFP",
        Type = "virtual",
        Currency = "usd",
    };
    
    var service = new CardService();
    Card card = service.Create(options);
    

    Stripe returns an Issuing Card object upon creation, and sends the issuing_card.created event.

    Stripe handles the printing and shipping of physical cards on a daily basis. If multiple cards are created using the same shipping address, they are combined into a single shipment.

    Activating a card

    Issued cards must be activated before they can be used. To do this, update the card and set its status to active.

    curl https://api.stripe.com/v1/issuing/cards/ic_1CoYuRKEl2ztzE5GIEDjQiUI \
       -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
       -d status=active
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card = Stripe::Issuing::Card.retrieve('ic_1CoYuRKEl2ztzE5GIEDjQiUI')
    card.status = 'active'
    card.save
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card = stripe.issuing.Card.retrieve('ic_1CoYuRKEl2ztzE5GIEDjQiUI')
    card.status = 'active'
    card.save()
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    $card = \Stripe\Issuing\Card::retrieve('ic_1CoYuRKEl2ztzE5GIEDjQiUI');
    $card->status = 'active';
    $card->save();
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    
    Card card = Card.retrieve("ic_1CoYuRKEl2ztzE5GIEDjQiUI");
    Map<String, Object> params = new HashMap<>();
    params.put("status", "active");
    
    card.update(params);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    const card = stripe.issuing.cards.update('ic_1CoYuRKEl2ztzE5GIEDjQiUI', {
      status: 'active',
    });
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    card, err := card.Update("ic_1CoYuRKEl2ztzE5GIEDjQiUI", &stripe.IssuingCardParams{
      Status: stripe.String(string(stripe.IssuingCardStatusActive)),
    })
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    var options = new CardUpdateOptions {
        Status = "active",
    };
    
    var service = new CardService();
    Card card = service.Update("ic_1CoYuRKEl2ztzE5GIEDjQiUI", options);
    

    You can use the API to list issued cards and look up the issued card that needs activating. Additional parameters can be included to filter the results, such as the cardholder ID and card status. Once you have the necessary card ID, you can then activate it.

    curl https://api.stripe.com/v1/issuing/cards \
       -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
       -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \
       -d status=inactive
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    cards = Stripe::Issuing::Card.list({
        status: 'inactive',
        cardholder: 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
    })
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    cards = stripe.issuing.Card.list(
      status='inactive',
      cardholder='ich_1Cm3pZIyNTgGDVfzI83rasFP'
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    $cards = \Stripe\Issuing\Card::all([
        'status' => 'inactive',
        'cardholder' => 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
    ]);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    Map<String, Object> params = new HashMap<>();
    params.put("status", "inactive");
    params.put("cardholder", "ich_1Cm3pZIyNTgGDVfzI83rasFP");
    
    CardCollection cards = Card.list(params);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    const cards = stripe.issuing.cards.list({
      status: 'inactive',
      cardholder: 'ich_1Cm3pZIyNTgGDVfzI83rasFP',
    );
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    list, err := card.List(&stripe.IssuingCardListParams{
      Status: "inactive",
      Cardholder: "ich_1Cm3pZIyNTgGDVfzI83rasFP",
    })
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
    
    var options = new CardListOptions {
        Status = "inactive",
        CardholderId = "ich_1Cm3pZIyNTgGDVfzI83rasFP",
    };
    
    var service = new CardService();
    StripeList<Card> response = service.List(options);
    

    We recommend using Elements to create a card activation form that securely collects the inactive card’s details from your cardholder, then create a Source object. The source can be used to filter the results for listing cards, returning only the card that needs to be activated.

    <script src="https://js.stripe.com/v3/"></script>
    
    <form action="/charge" method="post" id="payment-form">
      <div class="form-row">
        <label for="card-element">
          Credit card to activate
        </label>
        <div id="card-element">
          <!-- A Stripe Element will be inserted here. -->
        </div>
    
        <!-- Used to display form errors. -->
        <div id="card-errors" role="alert"></div>
      </div>
    
      <button>Activate Card</button>
    </form>
    /**
     * The CSS shown here will not be introduced in the Quickstart guide, but shows
     * how you can use CSS to style your Element's container.
     */
    .StripeElement {
      background-color: white;
      height: 40px;
      padding: 10px 12px;
      border-radius: 4px;
      border: 1px solid transparent;
      box-shadow: 0 1px 3px 0 #e6ebf1;
      -webkit-transition: box-shadow 150ms ease;
      transition: box-shadow 150ms ease;
    }
    
    .StripeElement--focus {
      box-shadow: 0 1px 3px 0 #cfd7df;
    }
    
    .StripeElement--invalid {
      border-color: #fa755a;
    }
    
    .StripeElement--webkit-autofill {
      background-color: #fefde5 !important;
    }
    
    // Create a Stripe client.
    var stripe = Stripe('pk_test_TYooMQauvdEDq54NiTphI7jx');
    
    // Create an instance of Elements.
    var elements = stripe.elements();
    
    // Custom styling can be passed to options when creating an Element.
    // (Note that this demo uses a wider set of styles than the guide below.)
    var style = {
      base: {
        color: '#32325d',
        lineHeight: '18px',
        fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
        fontSmoothing: 'antialiased',
        fontSize: '16px',
        '::placeholder': {
          color: '#aab7c4'
        }
      },
      invalid: {
        color: '#fa755a',
        iconColor: '#fa755a'
      }
    };
    
    // Create an instance of the card Element.
    var card = elements.create('card', {style: style});
    
    // Add an instance of the card Element into the `card-element` <div>.
    card.mount('#card-element');
    See all 57 lines // Handle real-time validation errors from the card Element. card.addEventListener('change', function(event) { var displayError = document.getElementById('card-errors'); if (event.error) { displayError.textContent = event.error.message; } else { displayError.textContent = ''; } }); // Handle form submission. var form = document.getElementById('payment-form'); form.addEventListener('submit', function(event) { event.preventDefault(); stripe.createSource(card).then(function(result) { if (result.error) { // Inform the user if there was an error. var errorElement = document.getElementById('card-errors'); errorElement.textContent = result.error.message; } else { // Send the source to your server. stripeSourceHandler(result.source); } }); });

    After creating a source, include its ID as a value for source when you retrieve a list of cards. This filters the list so only the card represented by the source is returned. You can then activate it using the ID returned.

    If necessary, you can also activate a card in the Dashboard. Select the card you wish to activate, then click Activate card.

    Next steps

    Congrats! You can now issue cards to cardholders. You can learn more about managing cards, receiving authorizations, and testing your integration:

    Questions?

    We're always happy to help with code or other questions you might have! Search our documentation, contact support, or connect with our sales team. You can also chat live with other developers in #stripe on freenode.

    Was this page helpful? Yes No

    Send

    Thank you for helping improve Stripe's documentation. If you need help or have any questions, please consider contacting support.