---
title: "Create a payment instrument"
method: POST
path: "/paymentInstruments"
tags: ["Payment instruments"]
---

# Create a payment instrument

`POST /paymentInstruments`

Creates a payment instrument to issue a physical card, a virtual card, or a business account to your user.

 For more information, refer to [Issue cards](https://docs.adyen.com/issuing/create-cards) or [Issue business accounts](https://docs.adyen.com/platforms/business-accounts).

## Request body

- PaymentInstrumentInfo
  - `balanceAccountId` string, required — The unique identifier of the [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/balanceAccounts__resParam_id) associated with the payment instrument.
  - `bankAccount` BankAccountModel
    - `formFactor` 'physical' | 'unknown' | 'virtual', nullable — Business accounts with a `formFactor` value of **physical** are business accounts issued under the central bank of that country. The default value is **physical** for NL, US, and UK business accounts. Adyen creates a local IBAN for business accounts when the `formFactor` value is set to **virtual**. The local IBANs that are supported are for DE and FR, which reference a physical NL account, with funds being routed through the central bank of NL.
  - `card` CardInfo
    - `authentication` Authentication
      - `email` string — The email address where the one-time password (OTP) is sent.
      - `password` string — The password used for 3D Secure password-based authentication. The value must be between 1 to 30 characters and must only contain the following supported characters. * Characters between **a-z**, **A-Z**, and **0-9** * Special characters: **äöüßÄÖÜ+-*/ç%()=?!~#'",;:$&àùòâôûáúó**
      - `phone` Phone
        - `number` string, required — The full phone number provided as a single string. For example, **"0031 6 11 22 33 44"**, **"+316/1122-3344"**, or **"(0031) 611223344"**.
        - `type` 'landline' | 'mobile', required — Type of phone number. Possible values: **Landline**, **Mobile**.
    - `brand` string, required — The brand of the physical or the virtual card. Possible values: **visa**, **mc**.
    - `brandVariant` string, required — The brand variant of the physical or the virtual card. For example, **visadebit** or **mcprepaid**. >Reach out to your Adyen contact to get the values relevant for your integration.
    - `cardholderName` string, required — The name of the cardholder. Maximum length: 26 characters.
    - `configuration` CardConfiguration
      - `activation` string — Overrides the activation label design ID defined in the `configurationProfileId`. The activation label is attached to the card and contains the activation instructions.
      - `activationUrl` string — Your app's URL, if you want to activate cards through your app. For example, **my-app://ref1236a7d**. A QR code is created based on this URL, and is included in the carrier. Before you use this field, reach out to your Adyen contact to set up the QR code process. Maximum length: 255 characters.
      - `bulkAddress` BulkAddress
        - `city` string — The name of the city.
        - `company` string — The name of the company.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**.
        - `email` string — The email address.
        - `houseNumberOrName` string — The house number or name.
        - `mobile` string — The full telephone number.
        - `postalCode` string — The postal code. Maximum length: * 5 digits for addresses in the US. * 10 characters for all other countries.
        - `stateOrProvince` string — The two-letter ISO 3166-2 state or province code. Maximum length: 2 characters for addresses in the US.
        - `street` string — The streetname of the house.
      - `cardImageId` string — The ID of the card image. This is the image that will be printed on the full front of the card.
      - `carrier` string — Overrides the carrier design ID defined in the `configurationProfileId`. The carrier is the letter or packaging to which the card is attached.
      - `carrierImageId` string — The ID of the carrier image. This is the image that will printed on the letter to which the card is attached.
      - `configurationProfileId` string, required — The ID of the card configuration profile that contains the settings of the card. For example, the envelope and PIN mailer designs or the logistics company handling the shipment. All the settings in the profile are applied to the card, unless you provide other fields to override them. For example, send the `shipmentMethod` to override the logistics company defined in the card configuration profile.
      - `currency` string — The three-letter [ISO-4217](https://en.wikipedia.org/wiki/ISO_4217) currency code of the card. For example, **EUR**.
      - `envelope` string — Overrides the envelope design ID defined in the `configurationProfileId`.
      - `insert` string — Overrides the insert design ID defined in the `configurationProfileId`. An insert is any additional material, such as marketing materials, that are shipped together with the card.
      - `language` string — The two-letter [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) language code of the card. For example, **en**.
      - `logoImageId` string — The ID of the logo image. This is the image that will be printed on the partial front of the card, such as a logo on the upper right corner.
      - `pinMailer` string — Overrides the PIN mailer design ID defined in the `configurationProfileId`. The PIN mailer is the letter on which the PIN is printed.
      - `shipmentMethod` string — Overrides the logistics company defined in the `configurationProfileId`.
    - `deliveryContact` DeliveryContact
      - `address` DeliveryAddress, required
        - `city` string — The name of the city.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**. >If you don't know the country or are not collecting the country from the shopper, provide `country` as `ZZ`.
        - `line1` string — The name of the street. Do not include the number of the building. For example, if the address is Simon Carmiggeltstraat 6-50, provide **Simon Carmiggeltstraat**.
        - `line2` string — The number of the building. For example, if the address is Simon Carmiggeltstraat 6-50, provide **6-50**.
        - `line3` string — Additional information about the delivery address.
        - `postalCode` string — The postal code. Maximum length: * 5 digits for an address in the US. * 10 characters for an address in all other countries.
        - `stateOrProvince` string — The two-letter ISO 3166-2 state or province code. For example, **CA** in the US or **ON** in Canada. > Required for the US and Canada.
      - `company` string — The company name of the contact.
      - `email` string — The email address of the contact.
      - `fullPhoneNumber` string — The full phone number of the contact provided as a single string. It will be handled as a landline phone. **Examples:** "0031 6 11 22 33 44", "+316/1122-3344", "(0031) 611223344"
      - `name` Name, required
        - `firstName` string, required — The first name.
        - `lastName` string, required — The last name.
      - `phoneNumber` PhoneNumber
        - `phoneCountryCode` string — The two-character ISO-3166-1 alpha-2 country code of the phone number. For example, **US** or **NL**.
        - `phoneNumber` string — The phone number. The inclusion of the phone number country code is not necessary.
        - `phoneType` 'Fax' | 'Landline' | 'Mobile' | 'SIP' — The type of the phone number. Possible values: **Landline**, **Mobile**, **SIP**, **Fax**.
      - `webAddress` string — The URL of the contact's website.
    - `formFactor` 'physical' | 'unknown' | 'virtual', required — The form factor of the card. Possible values: **virtual**, **physical**.
    - `threeDSecure` string — The 3DS configuration of the physical or the virtual card. Possible values: **fullySupported**, **secureCorporate**. > Reach out to your Adyen contact to get the values relevant for your integration.
  - `description` string — Your description for the payment instrument, maximum 300 characters.
  - `issuingCountryCode` string, required — The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code where the payment instrument is issued. For example, **NL** or **US**.
  - `paymentInstrumentGroupId` string — The unique identifier of the [payment instrument group](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/paymentInstrumentGroups__resParam_id) to which the payment instrument belongs.
  - `reference` string — Your reference for the payment instrument, maximum 150 characters.
  - `status` 'active' | 'closed' | 'inactive' | 'suspended' — The status of the payment instrument. If a status is not specified when creating a payment instrument, it is set to **active** by default. However, there can be exceptions for cards based on the `card.formFactor` and the `issuingCountryCode`. For example, when issuing physical cards in the US, the default status is **inactive**. Possible values: * **active**: The payment instrument is active and can be used to make payments. * **inactive**: The payment instrument is inactive and cannot be used to make payments. * **suspended**: The payment instrument is suspended, either because it was stolen or lost. * **closed**: The payment instrument is permanently closed. This action cannot be undone.
  - `statusComment` string — The status comment provides additional information for the statusReason of the payment instrument.
  - `statusReason` 'accountClosure' | 'damaged' | 'endOfLife' | 'expired' | 'lost' | 'other' | 'stolen' | 'suspectedFraud' | 'transactionRule' — The reason for the status of the payment instrument. Possible values: **accountClosure**, **damaged**, **endOfLife**, **expired**, **lost**, **stolen**, **suspectedFraud**, **transactionRule**, **other**. If the reason is **other**, you must also send the `statusComment` parameter describing the status change.
  - `type` 'bankAccount' | 'card', required — The type of payment instrument. Possible values: **card**, **bankAccount**.

## Response `200`

OK - the request has succeeded.

- PaymentInstrument
  - `additionalBankAccountIdentifications` IbanAccountIdentification[] — Contains optional, additional business account details. Returned when you create a payment instrument with `type` **bankAccount**.
    - `iban` string, required — The international bank account number as defined in the [ISO-13616](https://www.iso.org/standard/81090.html) standard.
    - `type` 'iban', required — **iban**
  - `balanceAccountId` string, required — The unique identifier of the [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/balanceAccounts__resParam_id) associated with the payment instrument.
  - `bankAccount` BankAccountDetails
    - `accountNumber` string — The bank account number, without separators or whitespace.
    - `accountType` string — The bank account type. Possible values: **checking** or **savings**. Defaults to **checking**.
    - `branchNumber` string — The bank account branch number, without separators or whitespace
    - `formFactor` string — Business accounts with a `formFactor` value of **physical** are business accounts issued under the central bank of that country. The default value is **physical** for NL, US, and UK business accounts. Adyen creates a local IBAN for business accounts when the `formFactor` value is set to **virtual**. The local IBANs that are supported are for DE and FR, which reference a physical NL account, with funds being routed through the central bank of NL.
    - `iban` string — The international bank account number as defined in the [ISO-13616](https://www.iso.org/standard/81090.html) standard.
    - `routingNumber` string — The [routing number](https://en.wikipedia.org/wiki/ABA_routing_transit_number), without separators or whitespace.
    - `sortCode` string — The [sort code](https://en.wikipedia.org/wiki/Sort_code), without separators or whitespace.
    - `type` string, required — **iban** or **usLocal** or **ukLocal**
  - `card` Card
    - `authentication` Authentication
      - `email` string — The email address where the one-time password (OTP) is sent.
      - `password` string — The password used for 3D Secure password-based authentication. The value must be between 1 to 30 characters and must only contain the following supported characters. * Characters between **a-z**, **A-Z**, and **0-9** * Special characters: **äöüßÄÖÜ+-*/ç%()=?!~#'",;:$&àùòâôûáúó**
      - `phone` Phone
        - `number` string, required — The full phone number provided as a single string. For example, **"0031 6 11 22 33 44"**, **"+316/1122-3344"**, or **"(0031) 611223344"**.
        - `type` 'landline' | 'mobile', required — Type of phone number. Possible values: **Landline**, **Mobile**.
    - `bin` string — The bank identification number (BIN) of the card number.
    - `brand` string, required — The brand of the physical or the virtual card. Possible values: **visa**, **mc**.
    - `brandVariant` string, required — The brand variant of the physical or the virtual card. For example, **visadebit** or **mcprepaid**. >Reach out to your Adyen contact to get the values relevant for your integration.
    - `cardholderName` string, required — The name of the cardholder. Maximum length: 26 characters.
    - `configuration` CardConfiguration
      - `activation` string — Overrides the activation label design ID defined in the `configurationProfileId`. The activation label is attached to the card and contains the activation instructions.
      - `activationUrl` string — Your app's URL, if you want to activate cards through your app. For example, **my-app://ref1236a7d**. A QR code is created based on this URL, and is included in the carrier. Before you use this field, reach out to your Adyen contact to set up the QR code process. Maximum length: 255 characters.
      - `bulkAddress` BulkAddress
        - `city` string — The name of the city.
        - `company` string — The name of the company.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**.
        - `email` string — The email address.
        - `houseNumberOrName` string — The house number or name.
        - `mobile` string — The full telephone number.
        - `postalCode` string — The postal code. Maximum length: * 5 digits for addresses in the US. * 10 characters for all other countries.
        - `stateOrProvince` string — The two-letter ISO 3166-2 state or province code. Maximum length: 2 characters for addresses in the US.
        - `street` string — The streetname of the house.
      - `cardImageId` string — The ID of the card image. This is the image that will be printed on the full front of the card.
      - `carrier` string — Overrides the carrier design ID defined in the `configurationProfileId`. The carrier is the letter or packaging to which the card is attached.
      - `carrierImageId` string — The ID of the carrier image. This is the image that will printed on the letter to which the card is attached.
      - `configurationProfileId` string, required — The ID of the card configuration profile that contains the settings of the card. For example, the envelope and PIN mailer designs or the logistics company handling the shipment. All the settings in the profile are applied to the card, unless you provide other fields to override them. For example, send the `shipmentMethod` to override the logistics company defined in the card configuration profile.
      - `currency` string — The three-letter [ISO-4217](https://en.wikipedia.org/wiki/ISO_4217) currency code of the card. For example, **EUR**.
      - `envelope` string — Overrides the envelope design ID defined in the `configurationProfileId`.
      - `insert` string — Overrides the insert design ID defined in the `configurationProfileId`. An insert is any additional material, such as marketing materials, that are shipped together with the card.
      - `language` string — The two-letter [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) language code of the card. For example, **en**.
      - `logoImageId` string — The ID of the logo image. This is the image that will be printed on the partial front of the card, such as a logo on the upper right corner.
      - `pinMailer` string — Overrides the PIN mailer design ID defined in the `configurationProfileId`. The PIN mailer is the letter on which the PIN is printed.
      - `shipmentMethod` string — Overrides the logistics company defined in the `configurationProfileId`.
    - `cvc` string — The CVC2 value of the card. > The CVC2 is not sent by default. This is only returned in the `POST` response for single-use virtual cards.
    - `deliveryContact` DeliveryContact
      - `address` DeliveryAddress, required
        - `city` string — The name of the city.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**. >If you don't know the country or are not collecting the country from the shopper, provide `country` as `ZZ`.
        - `line1` string — The name of the street. Do not include the number of the building. For example, if the address is Simon Carmiggeltstraat 6-50, provide **Simon Carmiggeltstraat**.
        - `line2` string — The number of the building. For example, if the address is Simon Carmiggeltstraat 6-50, provide **6-50**.
        - `line3` string — Additional information about the delivery address.
        - `postalCode` string — The postal code. Maximum length: * 5 digits for an address in the US. * 10 characters for an address in all other countries.
        - `stateOrProvince` string — The two-letter ISO 3166-2 state or province code. For example, **CA** in the US or **ON** in Canada. > Required for the US and Canada.
      - `company` string — The company name of the contact.
      - `email` string — The email address of the contact.
      - `fullPhoneNumber` string — The full phone number of the contact provided as a single string. It will be handled as a landline phone. **Examples:** "0031 6 11 22 33 44", "+316/1122-3344", "(0031) 611223344"
      - `name` Name, required
        - `firstName` string, required — The first name.
        - `lastName` string, required — The last name.
      - `phoneNumber` PhoneNumber
        - `phoneCountryCode` string — The two-character ISO-3166-1 alpha-2 country code of the phone number. For example, **US** or **NL**.
        - `phoneNumber` string — The phone number. The inclusion of the phone number country code is not necessary.
        - `phoneType` 'Fax' | 'Landline' | 'Mobile' | 'SIP' — The type of the phone number. Possible values: **Landline**, **Mobile**, **SIP**, **Fax**.
      - `webAddress` string — The URL of the contact's website.
    - `expiration` Expiry
      - `month` string — The month in which the card will expire.
      - `year` string — The year in which the card will expire.
    - `formFactor` 'physical' | 'unknown' | 'virtual', required — The form factor of the card. Possible values: **virtual**, **physical**.
    - `lastFour` string — Last last four digits of the card number.
    - `number` string, required — The primary account number (PAN) of the card. > The PAN is masked by default and returned only for single-use virtual cards.
    - `threeDSecure` string — The 3DS configuration of the physical or the virtual card. Possible values: **fullySupported**, **secureCorporate**. > Reach out to your Adyen contact to get the values relevant for your integration.
  - `description` string — Your description for the payment instrument, maximum 300 characters.
  - `id` string, required — The unique identifier of the payment instrument.
  - `issuingCountryCode` string, required — The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code where the payment instrument is issued. For example, **NL** or **US**.
  - `paymentInstrumentGroupId` string — The unique identifier of the [payment instrument group](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/paymentInstrumentGroups__resParam_id) to which the payment instrument belongs.
  - `reference` string — Your reference for the payment instrument, maximum 150 characters.
  - `replacedById` string — The unique identifier of the payment instrument that replaced this payment instrument.
  - `replacementOfId` string — The unique identifier of the payment instrument that is replaced by this payment instrument.
  - `status` 'active' | 'closed' | 'inactive' | 'suspended' — The status of the payment instrument. If a status is not specified when creating a payment instrument, it is set to **active** by default. However, there can be exceptions for cards based on the `card.formFactor` and the `issuingCountryCode`. For example, when issuing physical cards in the US, the default status is **inactive**. Possible values: * **active**: The payment instrument is active and can be used to make payments. * **inactive**: The payment instrument is inactive and cannot be used to make payments. * **suspended**: The payment instrument is suspended, either because it was stolen or lost. * **closed**: The payment instrument is permanently closed. This action cannot be undone.
  - `statusComment` string — The status comment provides additional information for the statusReason of the payment instrument.
  - `statusReason` 'accountClosure' | 'damaged' | 'endOfLife' | 'expired' | 'lost' | 'other' | 'stolen' | 'suspectedFraud' | 'transactionRule' — The reason for the status of the payment instrument. Possible values: **accountClosure**, **damaged**, **endOfLife**, **expired**, **lost**, **stolen**, **suspectedFraud**, **transactionRule**, **other**. If the reason is **other**, you must also send the `statusComment` parameter describing the status change.
  - `type` 'bankAccount' | 'card', required — The type of payment instrument. Possible values: **card**, **bankAccount**.

## Other responses

- `400` — Bad Request - a problem reading or understanding the request.
- `401` — Unauthorized - authentication required.
- `403` — Forbidden - insufficient permissions to process the request.
- `422` — Unprocessable Entity - a request validation error.
- `500` — Internal Server Error - the server could not process the request.

## Changes

- **2025-04-29** (v2) `508e86c65b0b` — 2 info
  - added the optional property `replacedById` to the response with the `200` status
  - added the optional property `replacementOfId` to the response with the `200` status
- **2024-10-10** (v2) `80dfacd37eec` — 1 info
  - added the optional property `bankAccount/branchNumber` to the response with the `200` status
- **2024-06-20** (v2) `f874764bcf8b` — 2 info
  - added the new optional request property `statusComment`
  - added the optional property `statusComment` to the response with the `200` status
- **2024-04-26** (v2) `6f1fad79c6c0` — 1 breaking, 1 warning, 13 info
  - the `bankAccount` response's property type changed from no type to `object` for status `200`
  - removed the optional property `additionalBankAccountIdentifications/items/oneOf[#/components/schemas/IbanAccountIdentification]/formFactor` from the response with the `200` status
  - added the new optional request property `card/deliveryContact/company`
  - the request property `bankAccount/formFactor` became nullable
  - …11 more
- **2024-03-04** (v2) `12b2826f3990` — 1 breaking, 1 info
  - added `#/components/schemas/UKLocalAccountIdentification` to the `bankAccount` response property `oneOf` list for the response status `200`
  - added the optional property `additionalBankAccountIdentifications` to the response with the `200` status

[Full history](https://skmtc.dev/adyen/apis/balanceplatformservice/changes/paymentInstruments/post.md)

---

[API](https://skmtc.dev/adyen/apis/balanceplatformservice.md) · [All operations](https://skmtc.dev/adyen/apis/balanceplatformservice/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/adyen/balanceplatformservice/revisions/95d64ff71f9a/schema)
