---
title: "Create cards"
description: "Learn how to create and activate cards."
url: "https://docs.adyen.com/issuing/create-cards"
source_url: "https://docs.adyen.com/issuing/create-cards.md"
canonical: "https://docs.adyen.com/issuing/create-cards"
last_modified: "2021-01-19T09:45:00+01:00"
language: "en"
---

# Create cards

Learn how to create and activate cards.

After you create an [account holder](/issuing/onboard-users/onboarding-steps) and a [balance account](/issuing/onboard-users/onboarding-steps), you can start issuing cards. Cards can either be virtual or physical. Cards also have to be associated with a Visa or Mastercard pre-approved use case, called a *scheme program*. By default, Adyen handles the scheme program for you in the background.

### PCI compliance

The scope for PCI compliance depends on your use case—the type of cards you'll issue and how the cards will be used. To know whether PCI compliance requirements apply to your use case, reach out to your Adyen contact.

### Visual design for physical cards

Before you can create physical cards in the live environment, you must have a design for the card itself and the mailer it is sent in. Each card design must be approved by Visa or Mastercard.

Your Adyen contact will help you to complete and specify the designs.

## Create a card

To issue a card, create a **paymentInstrument** resource. In the request, specify whether the card is:

* **Virtual**: A card that has no physical form. You receive the card details in the API response.
* **Physical**: A card that is printed and shipped to the user. You *do not* receive the card details in the API response. Sending a request to create a physical card also starts an order to manufacture the card.

### Tab: Physical

When creating a physical card, you must include additional information, such as the card manufacturing profile and the delivery details.

To create a physical card, make a POST [/paymentInstruments](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments) request specifying:

| Parameter                                                                                                                             | Required                                                                                    | Description                                                                                                                                                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [type](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-type)                               | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The payment instrument type, set to **card**.                                                                                                                                                                                                                                                                     |
| [balanceAccountId](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-balanceAccountId)       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The balance account ID to associate with the card. You can [change the balance account associated with a card at a later time](/issuing/manage-cards#update-balance-account-id) as long as the card `status` is set to **inactive**.                                                                              |
| [card.formFactor](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card-formFactor)     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The form factor of the card, set to **physical**.                                                                                                                                                                                                                                                                 |
| [card.cardholderName](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-cardholderName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The name of the cardholder.                                                                                                                                                                                                                                                                                       |
| [card.brand](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card-brand)               | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The card brand.                                                                                                                                                                                                                                                                                                   |
| [card.brandVariant](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-brandVariant)     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The brand variant of the card.                                                                                                                                                                                                                                                                                    |
| [card.configuration](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-configuration)   | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Object that contains the settings for the physical card, including [design](#visual-design) and the [configurationProfileId](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card-configuration-configurationProfileId).                                           |
| [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-status)                           |                                                                                             | By default, cards are created with an **active** [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-status). We recommended that you create physical cards with an **inactive** status, to keep them secure from use until they are delivered to the cardholder. |

In your request, you can also include optional parameters such as a human-readable [description](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-description) to help your staff differentiate between multiple cards under one balance account.

The following example shows how to create a physical card linked to a balance account with `id` **BA1234123412341234**. In this example, we create a card with **inactive** status.

**Create a physical card**

#### curl

```bash
curl https://balanceplatform-api-test.adyen.com/bcl/v2/paymentInstruments \
-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \
-H 'content-type: application/json' \
-X POST \
-d '{
    "type": "card",
    "issuingCountryCode": "NL",
    "balanceAccountId": "BA1234123412341234",
    "status": "inactive",
    "card": {
      "formFactor": "physical",
      "brand": "mc",
      "brandVariant": "mcdebit",
      "cardholderName": "Sam Hopper",
      "deliveryContact": {
        "address": {
          "city": "Amsterdam",
          "country": "NL",
          "stateOrProvince": "NH",
          "line1": "274 Brannan Street, Suite 600",
          "line2": "50",
          "postalCode": "1020CD"
        },
        "name": {
          "firstName": "Sam",
          "lastName": "Hopper"
        }
      },
      "configuration": {
        "configurationProfileId": "YOUR_CONFIGURATION_PROFILE_ID"
      }
    },
    "description": "{hint:Your human-readable description for the card.}S. Hopper - Main card{/hint}"
}'
```

#### Java

```java
// Adyen Java API Library v25.0.0
import com.adyen.Client;
import com.adyen.enums.Environment;
import com.adyen.model.balancePlatform.*;
import java.time.OffsetDateTime;
import java.util.*;
import com.adyen.service.balancePlatform.*;

Client client = new Client("ADYEN_API_KEY", Environment.TEST);

// Create the request object(s)
DeliveryAddress deliveryAddress = new DeliveryAddress()
  .country("NL")
  .stateOrProvince("NH")
  .city("Amsterdam")
  .postalCode("1020CD")
  .line2("50")
  .line1("274 Brannan Street, Suite 600");

Name name = new Name()
  .firstName("Sam")
  .lastName("Hopper");

CardConfiguration cardConfiguration = new CardConfiguration()
  .configurationProfileId("YOUR_CONFIGURATION_PROFILE_ID");

DeliveryContact deliveryContact = new DeliveryContact()
  .address(deliveryAddress)
  .name(name);

CardInfo cardInfo = new CardInfo()
  .brandVariant("mcdebit")
  .configuration(cardConfiguration)
  .formFactor(CardInfo.FormFactorEnum.PHYSICAL)
  .cardholderName("Sam Hopper")
  .deliveryContact(deliveryContact)
  .brand("mc");

PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo()
  .balanceAccountId("BA1234123412341234")
  .description("S. Hopper - Main card")
  .type(PaymentInstrumentInfo.TypeEnum.CARD)
  .issuingCountryCode("NL")
  .card(cardInfo)
  .status(PaymentInstrumentInfo.StatusEnum.INACTIVE);

// Make the API call
PaymentInstrumentsApi service = new PaymentInstrumentsApi(client);
PaymentInstrument response = service.createPaymentInstrument(paymentInstrumentInfo, null);
```

#### PHP

```php
// Adyen PHP API Library v17.4.0
use Adyen\Client;
use Adyen\Environment;
use Adyen\Model\BalancePlatform\CardConfiguration;
use Adyen\Model\BalancePlatform\DeliveryContact;
use Adyen\Model\BalancePlatform\DeliveryAddress;
use Adyen\Model\BalancePlatform\Name;
use Adyen\Model\BalancePlatform\CardInfo;
use Adyen\Model\BalancePlatform\PaymentInstrumentInfo;
use Adyen\Service\BalancePlatform\PaymentInstrumentsApi;

$client = new Client();
$client->setXApiKey("ADYEN_API_KEY");
$client->setEnvironment(Environment::TEST);


// Create the request object(s)
$deliveryAddress = new DeliveryAddress();
$deliveryAddress
  ->setCountry("NL")
  ->setStateOrProvince("NH")
  ->setCity("Amsterdam")
  ->setPostalCode("1020CD")
  ->setLine2("50")
  ->setLine1("274 Brannan Street, Suite 600");

$name = new Name();
$name
  ->setFirstName("Sam")
  ->setLastName("Hopper");

$cardConfiguration = new CardConfiguration();
$cardConfiguration
  ->setConfigurationProfileId("YOUR_CONFIGURATION_PROFILE_ID");

$deliveryContact = new DeliveryContact();
$deliveryContact
  ->setAddress($deliveryAddress)
  ->setName($name);

$cardInfo = new CardInfo();
$cardInfo
  ->setBrandVariant("mcdebit")
  ->setConfiguration($cardConfiguration)
  ->setFormFactor("physical")
  ->setCardholderName("Sam Hopper")
  ->setDeliveryContact($deliveryContact)
  ->setBrand("mc");

$paymentInstrumentInfo = new PaymentInstrumentInfo();
$paymentInstrumentInfo
  ->setBalanceAccountId("BA1234123412341234")
  ->setDescription("S. Hopper - Main card")
  ->setType("card")
  ->setIssuingCountryCode("NL")
  ->setCard($cardInfo)
  ->setStatus("inactive");

// Make the API call
$service = new PaymentInstrumentsApi($client);
$response = $service->createPaymentInstrument($paymentInstrumentInfo);
```

#### C\#

```cs
// Adyen .net API Library v14.4.0
using Adyen;
using Environment = Adyen.Model.Environment;
using Adyen.Model;
using Adyen.Model.BalancePlatform;
using Adyen.Service.BalancePlatform;

var config = new Config()
{
    XApiKey = "ADYEN_API_KEY",
    Environment = Environment.Test
};
var client = new Client(config);

// Create the request object(s)
DeliveryAddress deliveryAddress = new DeliveryAddress
{
  Country = "NL",
  StateOrProvince = "NH",
  City = "Amsterdam",
  PostalCode = "1020CD",
  Line2 = "50",
  Line1 = "274 Brannan Street, Suite 600"
};

Name name = new Name
{
  FirstName = "Sam",
  LastName = "Hopper"
};

CardConfiguration cardConfiguration = new CardConfiguration
{
  ConfigurationProfileId = "YOUR_CONFIGURATION_PROFILE_ID"
};

DeliveryContact deliveryContact = new DeliveryContact
{
  Address = deliveryAddress,
  Name = name
};

CardInfo cardInfo = new CardInfo
{
  BrandVariant = "mcdebit",
  Configuration = cardConfiguration,
  FormFactor = CardInfo.FormFactorEnum.Physical,
  CardholderName = "Sam Hopper",
  DeliveryContact = deliveryContact,
  Brand = "mc"
};

PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo
{
  BalanceAccountId = "BA1234123412341234",
  Description = "S. Hopper - Main card",
  Type = PaymentInstrumentInfo.TypeEnum.Card,
  IssuingCountryCode = "NL",
  Card = cardInfo,
  Status = PaymentInstrumentInfo.StatusEnum.Inactive
};

// Make the API call
var service = new PaymentInstrumentsService(client);
var response = service.CreatePaymentInstrument(paymentInstrumentInfo);
```

#### NodeJS (JavaScript)

```js
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
const { Client, BalancePlatformAPI } = require('@adyen/api-library');
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

// Create the request object(s)
const paymentInstrumentInfo = {
  type: "card",
  issuingCountryCode: "NL",
  balanceAccountId: "BA1234123412341234",
  status: "inactive",
  card: {
    formFactor: "physical",
    brand: "mc",
    brandVariant: "mcdebit",
    cardholderName: "Sam Hopper",
    deliveryContact: {
      address: {
        city: "Amsterdam",
        country: "NL",
        stateOrProvince: "NH",
        line1: "274 Brannan Street, Suite 600",
        line2: "50",
        postalCode: "1020CD"
      },
      name: {
        firstName: "Sam",
        lastName: "Hopper"
      }
    },
    configuration: {
      configurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID"
    }
  },
  description: "S. Hopper - Main card"
}

// Make the API call
const balancePlatformAPI = new BalancePlatformAPI(client);
const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);
```

#### Go

```go
// Adyen Go API Library v9.3.0
import (
  "context"
  "github.com/adyen/adyen-go-api-library/v9/src/common"
  "github.com/adyen/adyen-go-api-library/v9/src/adyen"
  "github.com/adyen/adyen-go-api-library/v9/src/balancePlatform"
)
client := adyen.NewClient(&common.Config{
  ApiKey:      "ADYEN_API_KEY",
  Environment: common.TestEnv,
})

// Create the request object(s)
deliveryAddress := balancePlatform.DeliveryAddress{
  Country: "NL",
  StateOrProvince: common.PtrString("NH"),
  City: common.PtrString("Amsterdam"),
  PostalCode: common.PtrString("1020CD"),
  Line2: common.PtrString("50"),
  Line1: common.PtrString("274 Brannan Street, Suite 600"),
}

name := balancePlatform.Name{
  FirstName: "Sam",
  LastName: "Hopper",
}

cardConfiguration := balancePlatform.CardConfiguration{
  ConfigurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID",
}

deliveryContact := balancePlatform.DeliveryContact{
  Address: deliveryAddress,
  Name: name,
}

cardInfo := balancePlatform.CardInfo{
  BrandVariant: "mcdebit",
  Configuration: &cardConfiguration,
  FormFactor: "physical",
  CardholderName: "Sam Hopper",
  DeliveryContact: &deliveryContact,
  Brand: "mc",
}

paymentInstrumentInfo := balancePlatform.PaymentInstrumentInfo{
  BalanceAccountId: "BA1234123412341234",
  Description: common.PtrString("S. Hopper - Main card"),
  Type: "card",
  IssuingCountryCode: "NL",
  Card: &cardInfo,
  Status: common.PtrString("inactive"),
}

// Make the API call
service := client.BalancePlatform()
req := service.PaymentInstrumentsApi.CreatePaymentInstrumentInput().PaymentInstrumentInfo(paymentInstrumentInfo)
res, httpRes, err := service.PaymentInstrumentsApi.CreatePaymentInstrument(context.Background(), req)
```

#### Python

```py
# Adyen Python API Library v12.2.0
import Adyen

adyen = Adyen.Adyen()
adyen.client.xapikey = "ADYEN_API_KEY"
adyen.client.platform = "test" # The environment to use library in.

# Create the request object(s)
json_request = {
  "type": "card",
  "issuingCountryCode": "NL",
  "balanceAccountId": "BA1234123412341234",
  "status": "inactive",
  "card": {
    "formFactor": "physical",
    "brand": "mc",
    "brandVariant": "mcdebit",
    "cardholderName": "Sam Hopper",
    "deliveryContact": {
      "address": {
        "city": "Amsterdam",
        "country": "NL",
        "stateOrProvince": "NH",
        "line1": "274 Brannan Street, Suite 600",
        "line2": "50",
        "postalCode": "1020CD"
      },
      "name": {
        "firstName": "Sam",
        "lastName": "Hopper"
      }
    },
    "configuration": {
      "configurationProfileId": "YOUR_CONFIGURATION_PROFILE_ID"
    }
  },
  "description": "S. Hopper - Main card"
}

# Make the API call
result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request=json_request)
```

#### Ruby

```rb
# Adyen Ruby API Library v9.3.0
require "adyen-ruby-api-library"

adyen = Adyen::Client.new
adyen.api_key = 'ADYEN_API_KEY'
adyen.env = :test # Set to "live" for live environment

# Create the request object(s)
request_body = {
  :type => 'card',
  :issuingCountryCode => 'NL',
  :balanceAccountId => 'BA1234123412341234',
  :status => 'inactive',
  :card => {
    :formFactor => 'physical',
    :brand => 'mc',
    :brandVariant => 'mcdebit',
    :cardholderName => 'Sam Hopper',
    :deliveryContact => {
      :address => {
        :city => 'Amsterdam',
        :country => 'NL',
        :stateOrProvince => 'NH',
        :line1 => '274 Brannan Street, Suite 600',
        :line2 => '50',
        :postalCode => '1020CD'
      },
      :name => {
        :firstName => 'Sam',
        :lastName => 'Hopper'
      }
    },
    :configuration => {
      :configurationProfileId => 'YOUR_CONFIGURATION_PROFILE_ID'
    }
  },
  :description => 'S. Hopper - Main card'
}

# Make the API call
result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request_body)
```

#### NodeJS (TypeScript)

```ts
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
import { Client, BalancePlatformAPI, Types } from "@adyen/api-library";
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

// Create the request object(s)
const deliveryAddress: Types.balancePlatform.DeliveryAddress = {
  country: "NL",
  stateOrProvince: "NH",
  city: "Amsterdam",
  postalCode: "1020CD",
  line2: "50",
  line1: "274 Brannan Street, Suite 600"
};

const name: Types.balancePlatform.Name = {
  firstName: "Sam",
  lastName: "Hopper"
};

const cardConfiguration: Types.balancePlatform.CardConfiguration = {
  configurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID"
};

const deliveryContact: Types.balancePlatform.DeliveryContact = {
  address: deliveryAddress,
  name: name
};

const cardInfo: Types.balancePlatform.CardInfo = {
  brandVariant: "mcdebit",
  configuration: cardConfiguration,
  formFactor: Types.balancePlatform.CardInfo.FormFactorEnum.Physical,
  cardholderName: "Sam Hopper",
  deliveryContact: deliveryContact,
  brand: "mc"
};

const paymentInstrumentInfo: Types.balancePlatform.PaymentInstrumentInfo = {
  balanceAccountId: "BA1234123412341234",
  description: "S. Hopper - Main card",
  type: Types.balancePlatform.PaymentInstrumentInfo.TypeEnum.Card,
  issuingCountryCode: "NL",
  card: cardInfo,
  status: Types.balancePlatform.PaymentInstrumentInfo.StatusEnum.Inactive
};

// Make the API call
const balancePlatformAPI = new BalancePlatformAPI(client);
const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);
```

The response returns the **paymentInstrument** resource, identified by its unique `id`.

**Response**

```json
{
  "balanceAccountId": "BA1234123412341234",
  "description": "S.Hopper - Main card",
  "issuingCountryCode": "NL",
  "status": "inactive",
  "type": "card",
  "card": {
    "brand": "mc",
    "brandVariant": "mcdebit",
    "cardholderName": "Sam Hopper",
    "configuration": {
      "configurationProfileId": "YOUR_CONFIGURATION_PROFILE_ID"
    },
    "deliveryContact": {
      "address": {
        "city": "Amsterdam",
        "country": "NL",
        "stateOrProvince": "NH",
        "line1": "274 Brannan Street, Suite 600",
        "line2": "50",
        "postalCode": "1020CD"
      },
      "name": {
        "firstName": "Sam",
        "lastName": "Hopper"
      }
    },
    "formFactor": "physical",
    "bin":"555544",
    "expiration":{
      "month":"08",
      "year":"2024"
    },
    "lastFour":"1589"
  },
  "id": "PI3227C223222B5BPCMFXD2XG"
}
```

In the test environment, you can create physical cards but you will not receive them.

However, you will asynchronously receive updates about your physical card order:

1. [balancePlatform.cardorder.created](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.cardorder.created): card order created.
2. [balancePlatform.cardorder.updated](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.cardorder.updated): card order updated.

### Tab: Virtual

To create a virtual card, make a POST [/paymentInstruments](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments) request specifying:

| Parameter                                                                                                                       | Required                                                                                    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [type](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-type)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The payment instrument type, set to **card**.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| [balanceAccountId](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-balanceAccountId) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The balance account ID that should be associated with the card. You can also [update the balance account associated with a card at a later time](/issuing/manage-cards#update-balance-account-id) as long as the card `status` is **inactive**.                                                                                                                                                                                                                                                                                                                                                                                                           |
| [card](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card)                     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Object that contains the card configuration, such as:- The card [formFactor](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-formFactor), set to **virtual**.
- The [cardholderName](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card-cardholderName) to be shown on the card.
- The card [brand](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-brand).
- The card [brandVariant](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__reqParam_card-brandVariant). |
| [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-status)                     |                                                                                             | By default, cards are created with an **active** [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-status). Depending on your use case, you might want to set the status to **inactive**.                                                                                                                                                                                                                                                                                                                                                                                                               |

In your request, you can also include optional parameters such as a human-readable [description](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-description) to help your staff differentiate between multiple cards under one balance account.

The following example shows how to create a virtual card linked to a balance account with `id` **BA1234123412341234**:

**Create a virtual card**

#### curl

```bash
curl https://balanceplatform-api-test.adyen.com/bcl/v2/paymentInstruments \
-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \
-H 'content-type: application/json' \
-X POST \
-d '{
    "type": "card",
    "description": "{hint:Your human-readable description for this card}S.Hopper - Main card{/hint}",
    "balanceAccountId": "BA1234123412341234",
    "issuingCountryCode": "NL",
    "card": {
      "cardholderName": "Sam Hopper",
      "brand": "mc",
      "brandVariant": "mcdebit",
      "formFactor": "virtual"
    }
}'
```

#### Java

```java
// Adyen Java API Library v25.0.0
import com.adyen.Client;
import com.adyen.enums.Environment;
import com.adyen.model.balancePlatform.*;
import java.time.OffsetDateTime;
import java.util.*;
import com.adyen.service.balancePlatform.*;

Client client = new Client("ADYEN_API_KEY", Environment.TEST);

// Create the request object(s)
CardInfo cardInfo = new CardInfo()
  .brandVariant("mcdebit")
  .formFactor(CardInfo.FormFactorEnum.VIRTUAL)
  .cardholderName("Sam Hopper")
  .brand("mc");

PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo()
  .balanceAccountId("BA1234123412341234")
  .description("S.Hopper - Main card")
  .type(PaymentInstrumentInfo.TypeEnum.CARD)
  .issuingCountryCode("NL")
  .card(cardInfo);

// Make the API call
PaymentInstrumentsApi service = new PaymentInstrumentsApi(client);
PaymentInstrument response = service.createPaymentInstrument(paymentInstrumentInfo, null);
```

#### PHP

```php
// Adyen PHP API Library v17.4.0
use Adyen\Client;
use Adyen\Environment;
use Adyen\Model\BalancePlatform\CardInfo;
use Adyen\Model\BalancePlatform\PaymentInstrumentInfo;
use Adyen\Service\BalancePlatform\PaymentInstrumentsApi;

$client = new Client();
$client->setXApiKey("ADYEN_API_KEY");
$client->setEnvironment(Environment::TEST);


// Create the request object(s)
$cardInfo = new CardInfo();
$cardInfo
  ->setBrandVariant("mcdebit")
  ->setFormFactor("virtual")
  ->setCardholderName("Sam Hopper")
  ->setBrand("mc");

$paymentInstrumentInfo = new PaymentInstrumentInfo();
$paymentInstrumentInfo
  ->setBalanceAccountId("BA1234123412341234")
  ->setDescription("S.Hopper - Main card")
  ->setType("card")
  ->setIssuingCountryCode("NL")
  ->setCard($cardInfo);

// Make the API call
$service = new PaymentInstrumentsApi($client);
$response = $service->createPaymentInstrument($paymentInstrumentInfo);
```

#### C\#

```cs
// Adyen .net API Library v14.4.0
using Adyen;
using Environment = Adyen.Model.Environment;
using Adyen.Model;
using Adyen.Model.BalancePlatform;
using Adyen.Service.BalancePlatform;

var config = new Config()
{
    XApiKey = "ADYEN_API_KEY",
    Environment = Environment.Test
};
var client = new Client(config);

// Create the request object(s)
CardInfo cardInfo = new CardInfo
{
  BrandVariant = "mcdebit",
  FormFactor = CardInfo.FormFactorEnum.Virtual,
  CardholderName = "Sam Hopper",
  Brand = "mc"
};

PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo
{
  BalanceAccountId = "BA1234123412341234",
  Description = "S.Hopper - Main card",
  Type = PaymentInstrumentInfo.TypeEnum.Card,
  IssuingCountryCode = "NL",
  Card = cardInfo
};

// Make the API call
var service = new PaymentInstrumentsService(client);
var response = service.CreatePaymentInstrument(paymentInstrumentInfo);
```

#### NodeJS (JavaScript)

```js
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
const { Client, BalancePlatformAPI } = require('@adyen/api-library');
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

// Create the request object(s)
const paymentInstrumentInfo = {
  type: "card",
  description: "S.Hopper - Main card",
  balanceAccountId: "BA1234123412341234",
  issuingCountryCode: "NL",
  card: {
    cardholderName: "Sam Hopper",
    brand: "mc",
    brandVariant: "mcdebit",
    formFactor: "virtual"
  }
}

// Make the API call
const balancePlatformAPI = new BalancePlatformAPI(client);
const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);
```

#### Go

```go
// Adyen Go API Library v9.3.0
import (
  "context"
  "github.com/adyen/adyen-go-api-library/v9/src/common"
  "github.com/adyen/adyen-go-api-library/v9/src/adyen"
  "github.com/adyen/adyen-go-api-library/v9/src/balancePlatform"
)
client := adyen.NewClient(&common.Config{
  ApiKey:      "ADYEN_API_KEY",
  Environment: common.TestEnv,
})

// Create the request object(s)
cardInfo := balancePlatform.CardInfo{
  BrandVariant: "mcdebit",
  FormFactor: "virtual",
  CardholderName: "Sam Hopper",
  Brand: "mc",
}

paymentInstrumentInfo := balancePlatform.PaymentInstrumentInfo{
  BalanceAccountId: "BA1234123412341234",
  Description: common.PtrString("S.Hopper - Main card"),
  Type: "card",
  IssuingCountryCode: "NL",
  Card: &cardInfo,
}

// Make the API call
service := client.BalancePlatform()
req := service.PaymentInstrumentsApi.CreatePaymentInstrumentInput().PaymentInstrumentInfo(paymentInstrumentInfo)
res, httpRes, err := service.PaymentInstrumentsApi.CreatePaymentInstrument(context.Background(), req)
```

#### Python

```py
# Adyen Python API Library v12.2.0
import Adyen

adyen = Adyen.Adyen()
adyen.client.xapikey = "ADYEN_API_KEY"
adyen.client.platform = "test" # The environment to use library in.

# Create the request object(s)
json_request = {
  "type": "card",
  "description": "S.Hopper - Main card",
  "balanceAccountId": "BA1234123412341234",
  "issuingCountryCode": "NL",
  "card": {
    "cardholderName": "Sam Hopper",
    "brand": "mc",
    "brandVariant": "mcdebit",
    "formFactor": "virtual"
  }
}

# Make the API call
result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request=json_request)
```

#### Ruby

```rb
# Adyen Ruby API Library v9.3.0
require "adyen-ruby-api-library"

adyen = Adyen::Client.new
adyen.api_key = 'ADYEN_API_KEY'
adyen.env = :test # Set to "live" for live environment

# Create the request object(s)
request_body = {
  :type => 'card',
  :description => 'S.Hopper - Main card',
  :balanceAccountId => 'BA1234123412341234',
  :issuingCountryCode => 'NL',
  :card => {
    :cardholderName => 'Sam Hopper',
    :brand => 'mc',
    :brandVariant => 'mcdebit',
    :formFactor => 'virtual'
  }
}

# Make the API call
result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request_body)
```

#### NodeJS (TypeScript)

```ts
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
import { Client, BalancePlatformAPI, Types } from "@adyen/api-library";
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

// Create the request object(s)
const cardInfo: Types.balancePlatform.CardInfo = {
  brandVariant: "mcdebit",
  formFactor: Types.balancePlatform.CardInfo.FormFactorEnum.Virtual,
  cardholderName: "Sam Hopper",
  brand: "mc"
};

const paymentInstrumentInfo: Types.balancePlatform.PaymentInstrumentInfo = {
  balanceAccountId: "BA1234123412341234",
  description: "S.Hopper - Main card",
  type: Types.balancePlatform.PaymentInstrumentInfo.TypeEnum.Card,
  issuingCountryCode: "NL",
  card: cardInfo
};

// Make the API call
const balancePlatformAPI = new BalancePlatformAPI(client);
const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);
```

The response returns the **paymentInstrument** resource, identified by its unique `id`.

**Response**

```json
{
    "balanceAccountId": "BA1234123412341234",
    "description": "S.Hopper - Main card",
    "issuingCountryCode": "NL",
    "status": "active",
    "type": "card",
    "card": {
        "brand": "mc",
        "brandVariant": "mcdebit",
        "cardholderName": "Sam Hopper",
        "formFactor": "virtual",
        "bin": "555544",
        "cvc": "686",
        "expiration": {
            "month": "07",
            "year": "2023"
        },
        "lastFour": "2787",
        "number": "5555444400092787"
    },
    "id": "PI3227C223222B5BPCMFXD2XG"
}
```

## Assign authorized users to an issued card

If the account holder is a company, they may want to assign multiple employees as authorized users for the issued company cards they create. If a card has multiple users, all users of a card must be identified when the card(s) is created. We refer to these individuals as authorized users.

### Requirements

Before you begin, take into account the following requirements, limitations, and preparations.

| Requirement                                                                | Description                                                                                                                                                                                                               |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration type**                                                       | This feature is supported with an [issuing integration](/issuing).                                                                                                                                                        |
| **[API credentials](/issuing/manage-access/api-credentials-web-service/)** | API credentials for both the [Configuration API](https://docs.adyen.com/api-explorer/balanceplatform/latest/overview) and [Legal Entity Management API](https://docs.adyen.com/api-explorer/legalentity/latest/overview). |
| **Limitations**                                                            | Before reaching out to your Adyen contact to enable this feature, you must update all issued cards that will have multiple authorized users.                                                                              |
| **[Capabilities](/issuing/verification-overview/capabilities)**            | Authorized users must have the **authorisedPaymentInstrumentUser** capability to be able to use the card. Request this capability for all users before creating the card and assigning the users to it.                   |

To create and assign an authorized user to an issued card:

1. Create a legal entity for the user by making a POST [/legalEntities](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities) request. The following information must be provided for each authorized user:

   * First and last name
   * Date of birth (in **YYYY-MM-DD** format)
   * Country of residence

   You need to request the **authorisedPaymentInstrumentUser** capability for the user by adding the [capabilities](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities#request-capabilities) array to your request. For an existing legal entity, make a PATCH [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/patch/legalEntities/\(id\)) request with the [capabilities](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities#request-capabilities) array in the request body. The initial status of the capability is `pending`.

   The user must pass [verification checks](/issuing/verification-overview/?tab=you_request_capabilities_for_users_0_1) and be allowed to use the **authorisedPaymentInstrumentUser** capability. It can take up to 48 hours for a legal entity to pass all verification checks. Therefore, we recommend that you wait at least 48 hours to check the status of the legal entity before you assign them as an authorized user.

2. To check the user's [verificationStatus](https://docs.adyen.com/api-explorer/legalentity/latest/patch/legalEntities/\(id\)#responses-200-capabilities-verificationStatus), make a GET [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)) request, specifying the [id](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities#responses-200-id) as a path parameter. You must resolve any errors before assigning the legal entity as an authorized user of the card. All users must have the **authorisedPaymentInstrumentUser** allowed to be able to use the card.

   If the status is `invalid`, you need to provide additional information to pass the verification checks. If the status is `rejected`, this is final and the user cannot use the card.

   Note that Adyen performs daily sanction checks against the legal entities of your cards' assigned authorized users. If their capability status changes to `invalid` or `rejected`, the card [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-status) is **suspended** and it cannot be used.

3. [Create a physical or virtual card](#create).

4. Assign authorized users to the card by making a POST [/paymentInstruments/{id}/AuthorisedCardUsers](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments/\(paymentInstrumentId\)/authorisedCardUsers) request with the ID of the payment instrument in the path. Include the [id](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities#responses-200-id) of the authorized users you want to assign in your request.

   Only the corresponding **204** HTTP response code is returned if the request is successful.

5. (Optional) To see the authorized card users for a card, make a GET [/paymentInstruments/{id}/AuthorisedCardUsers](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/paymentInstruments/\(paymentInstrumentId\)/authorisedCardUsers) request with the ID of the payment instrument in the path.

To update the authorized users for a card, make a PATCH [/paymentInstruments/{id}/AuthorisedCardUsers](https://docs.adyen.com/api-explorer/balanceplatform/latest/patch/paymentInstruments/\(paymentInstrumentId\)/authorisedCardUsers) request with the ID of the payment instrument in the path. Note that this request replaces the entire list of authorized users for the card. For example, to remove one user from the list, include an updated list of users in your PATCH request. Only the corresponding **204** HTTP response code is returned if the request is successful.

To delete all users for a card, make a DELETE [/paymentInstruments/{id}/AuthorisedCardUsers](https://docs.adyen.com/api-explorer/balanceplatform/latest/delete/paymentInstruments/\(paymentInstrumentId\)/authorisedCardUsers) request with the ID of the payment instrument in the path. Only the corresponding **204** HTTP response code is returned if the request is successful.

## Physical cards in live environment

Before you can create live physical cards, you must have a [design for the card itself and the mailer](#visual-design).

After you [create a card](/issuing/create-cards?tab=physical_2), it is personalized, printed, and shipped with the information that you provided. If you need to stop a card from being personalized, update the status before it is sent to the manufacturer. Reach out to your Adyen contact to know the schedule for your balance platform.

## Next steps

Before your users can start making purchases with the newly issued card, you will have to choose how to fund the accounts, process payments, and manage the card lifecycle.

[required](/issuing/authorisation)

[Process payments](/issuing/authorisation)

[Choose how to authorise card payments.](/issuing/authorisation)

[required](/issuing/add-manage-funds)

[Manage funds](/issuing/add-manage-funds)

[Add funds to balance accounts.](/issuing/add-manage-funds)

[required](/issuing/manage-cards)

[Manage cards](/issuing/manage-cards)

[Activate, suspend, or close a card.](/issuing/manage-cards)
