---
title: "Create a card"
method: POST
path: "/cards"
tags: ["Cards"]
---

# Create a card

`POST /cards`

## Request

- Base URL: `https://b2b.revolut.com/api/1.0`
- URL: `https://b2b.revolut.com/api/1.0/cards`
- Auth: HTTP bearer

Create a new [team member card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), [company card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), or [auto-issued card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).

When using the API, you can create only virtual cards.
To create a physical card, use the [Revolut Business app](https://business.revolut.com).

:::note
To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
:::

For more information, see the guides: [Manage cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards).

## Request body

- object
  - `request_id` string, required: A unique ID of the request that you provide. There is no strict requirement on the format of this ID, but we suggest using v4 UUIDs. :::warning This ID is used to prevent duplicate card creation requests in case of a lost connection or client error, so make sure you use the same `request_id` for requests related to the same card. The deduplication is limited to 24 hours counting from the first request using a given ID. For more information, see the guides: [Manage cards - Idempotency](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#idempotency). :::
  - `holder_id` string, uuid: The ID of the team member to assign as the holder of the card. :::tip To retrieve a team member's ID, use the [`GET /team-members` operation](https://developer.revolut.com/docs/api/business#get-team-members). ::: For virtual cards (`virtual=true`), this field is optional. If not provided, the type of the issued card depends on `contact_ids`: - `contact_ids` provided → [company card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) - `contact_ids` not specified → [auto-issued card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)
  - `contact_ids` string[]: The list of [contacts](https://help.revolut.com/business/help/cards/more-on-cards/company-cards/) for the card. Up to 5 team members sharing the card, much like co-holders. Can be [edited](https://developer.revolut.com/docs/api/business#update-card-contacts). Allowed only for [company cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`virtual=true`, `holder_id` not specified).
  - `product` object: The card product offered by the card provider for this card. In other words, the program that the card is issued under. Provided only for virtual cards with no holder ID (`virtual=true`, and `holder_id` not specified): - **Required** for [auto-issued cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` not specified) - Optional for [company cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` specified) Not allowed for [team member cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`holder_id` present). :::note This property is only available to travel intermediaries using our travel solution. To use it, please contact [Revolut API Support](mailto:api-requests@revolut.com). :::
    - `code` string, required: The code of the card product.
  - `virtual` true, required: Specifies the type of the card. Must be set to `true`, as with the API, you can create only virtual cards. :::tip To create a physical card, use the [Revolut Business app](https://business.revolut.com). :::
  - `label` string: The label for the issued card, displayed in the UI to help distinguish between cards. If not specified, no label will be added.
  - `references` CardReference[]: References for the card. Up to 5 name-value pairs assigned to the card for tracking. :::info Each time the card is used, the references are recorded in the [transaction details](https://developer.revolut.com/docs/api/business#get-transaction#response) (`card.references`), helping track transactions made with this card. ::: The names must be unique. The references can be [amended](https://developer.revolut.com/docs/api/business#update-card-references) up to 10 times. References are only supported for cards owned by the business (i.e. [company](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)). They are **not** supported for [team member cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present). :::note The references recorded on a transaction are those assigned to the card at the time the transaction took place. If the references are amended, they will only be applied to future transactions. Existing transaction are not affected. :::
    - `name` string, required: The name of the card reference. Must be unique.
    - `value` string, required: The value for this reference.
  - `spending_limits` SpendingLimitsSchema
    - `single` SpendingLimitSingleTransaction: The limit for a single transaction.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `day` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `week` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `month` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `quarter` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `year` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `all_time` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_period` union
    - object
      - `start_date` string, date, required: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate': The action to take after the end date of the spending period.
    - object
      - `start_date` string, date: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date, required: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate', required: The action to take after the end date of the spending period.
  - `categories` BusinessMerchantCategory[]: The list of merchant categories to be available for card spending. If not specified, all categories will be allowed.
  - `merchant_controls` MerchantControlsSchema: The merchant-level controls for card spending.
    - `control_type` 'block' | 'allow', required: The type of control to apply. Possible values: | Value | Description | | --- | --- | | **`allow`** | Permits only the specified merchants. | | **`block`** | Blocks the specified merchants. |
    - `merchant_ids` string[], required: The list of IDs of merchants to which the control applies. :::tip To find merchant IDs, check transaction details (→ `merchant.id`). You can fetch transaction details for a [specific transaction](https://developer.revolut.com/docs/api/business#get-transaction#response) or for [all transactions](https://developer.revolut.com/docs/api/business#get-transactions#response). :::
  - `mcc_controls` MccControlsSchema: The MCC controls for card spending. They restrict card spending to merchants with the specified [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes (MCCs). :::tip MCCs are 4-digit codes used by payment card networks to classify businesses by the type of goods or services they provide — for example, `5411` for grocery stores or `7011` for hotels. :::
    - `control_type` 'allow', required: The type of control to apply.
    - `mccs` string[], required: The list of [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes to which the control applies.
  - `countries` string[]: Restricts card use to specified countries, provided as 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) codes.
  - `accounts` string[]: The list of accounts to link to the card. If not specified, all accounts will be linked. To retrieve account IDs, use the [`GET /accounts` operation](https://developer.revolut.com/docs/api/business#get-accounts).

## Response `200`

Information about the created card

- CardCreatedResponse
  - `id` string, uuid, required: The ID of the card.
  - `holder_id` string, uuid: The ID of the team member who is the holder of the card. If the card belongs to the business, this will be empty. For more information, see the guides: [Manage Cards - Create a virtual card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#create-a-virtual-card).
  - `contact_ids` CardContact[]: The list of contacts for a [company card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).
  - `created_at` string, date-time, required: The date and time the card was created in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `updated_at` string, date-time, required: The date and time the card was last updated in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `product` CardProduct: The card product offered by the card provider for this card. In other words, the program that the card was issued under. :::note This property is only available to travel intermediaries using our travel solution. To use it, please contact [Revolut API Support](mailto:api-requests@revolut.com). :::
    - `code` string, required: The code of the card product.
  - `virtual` boolean, required: Specifies whether the card is virtual (`true`) or physical (`false`).
  - `last_digits` string, required: The last 4 digits of the card's PAN.
  - `expiry` string, MM/YYYY, required: The card expiration date.
  - `label` string: The label of the card.
  - `references` CardReference[]: References for the card. Up to 5 name-value pairs assigned to the card for tracking. :::info Each time the card is used, the references are recorded in the [transaction details](https://developer.revolut.com/docs/api/business#get-transaction#response) (`card.references`), helping track transactions made with this card. ::: The names must be unique. The references can be [amended](https://developer.revolut.com/docs/api/business#update-card-references) up to 10 times. References are only supported for cards owned by the business (i.e. [company](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)). They are **not** supported for [team member cards](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present). :::note The references recorded on a transaction are those assigned to the card at the time the transaction took place. If the references are amended, they will only be applied to future transactions. Existing transaction are not affected. :::
    - `name` string, required: The name of the card reference. Must be unique.
    - `value` string, required: The value for this reference.
  - `state` 'created' | 'pending' | 'active' | 'frozen' | 'locked', required: The state that the card is in. Possible values: | Value | Description | | --- | --- | | **`active`** | The card is available for spending. Newly created cards typically go into `active` unless subject to certain conditions, for example, spending period starting in the future. | | **`frozen`** | The card has been frozen and is temporarily unavailable for spending. | | **`locked`** | The card is locked, typically due to an [admin lock](https://developer.revolut.com/docs/api/business#lock-card) or spending period settings, i.e. when its `spending_period.start_date` is in the future or `spending_period.end_date` is in the past. A locked card is unavailable for spending until it's [unlocked](https://developer.revolut.com/docs/api/business#unlock-card) and active. | | **`created`** | The card has been created but is not yet active. Used only for a specific type of cards. | | **`pending`** | This status is currently not in use. | :::tip[Card locked?] To see if the card can be unlocked, check the `can_be_unlocked` parameter. Note that you'll still need the [necessary scope or permission](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#lock-or-unlock-cards) to unlock it. :::
  - `can_be_unlocked` boolean: Returned for locked cards (`state=locked`). Indicates whether the card can be [unlocked](https://developer.revolut.com/docs/api/business#unlock-card) manually (via API or in-app). If `true`, you'll still need the [necessary scope or permission](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#lock-or-unlock-cards) to unlock the card. :::info Cards can be locked for various reasons. For example, a card can be locked by the user, due to spending period settings, or automatically by the system. Only certain types of lock can be lifted manually. :::
  - `spending_limits` SpendingLimitsSchema
    - `single` SpendingLimitSingleTransaction: The limit for a single transaction.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `day` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `week` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `month` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `quarter` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `year` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `all_time` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_period` union
    - object
      - `start_date` string, date, required: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate': The action to take after the end date of the spending period.
    - object
      - `start_date` string, date: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date, required: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate', required: The action to take after the end date of the spending period.
  - `categories` BusinessMerchantCategory[]: The list of merchant categories that are available for card spending. If not specified, categories are not restricted.
  - `merchant_controls` CardMerchantControls: The merchant-level controls for card spending.
    - `control_type` 'block' | 'allow', required: The type of control to apply. Possible values: | Value | Description | | --- | --- | | **`allow`** | Permits only the specified merchants. | | **`block`** | Blocks the specified merchants. |
    - `merchant_ids` string[], required: The list of IDs of merchants to which the control applies. :::tip To find merchant IDs, check transaction details (→ `merchant.id`). You can fetch transaction details for a [specific transaction](https://developer.revolut.com/docs/api/business#get-transaction#response) or for [all transactions](https://developer.revolut.com/docs/api/business#get-transactions#response). :::
  - `mcc_controls` MccControlsSchema: The MCC controls for card spending. They restrict card spending to merchants with the specified [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes (MCCs). :::tip MCCs are 4-digit codes used by payment card networks to classify businesses by the type of goods or services they provide — for example, `5411` for grocery stores or `7011` for hotels. :::
    - `control_type` 'allow', required: The type of control to apply.
    - `mccs` string[], required: The list of [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes to which the control applies.
  - `countries` string[]: The list of countries where the card can be used, specified as 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) codes.
  - `accounts` string[], required: The list of linked accounts.

## Other responses

- `400`: Bad Request Returned, for example, when your request is malformed, missing required fields, or when it contains fields that cannot co-exist or unsupported values. If the invalid value is an array item, the error might indicate the array index of this faulty item, counting from `0`. For example, if you provide the list of countries, such as `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index `0`, the second item (`USA`) has index `1`, and so on. In the example, `USA` is invalid, because it should be a 2-letter code. In such a case, the error will indicate that `countries[1]` is invalid, thus pointing to the second item in the array, i.e. `USA`.
- `404`: Team member not found Returned when the team member specified as cardholder in `holder_id` does not exist.
- `422`: Unprocessable entity For example, the team member exceeds the limit for virtual cards per account, or an unexpected error occurred when the initial request with the same `request_id` was sent.
- `429`: Concurrent requests with the same idempotency key
- `default`: Unexpected error

---

[API](https://skmtc.dev/revolut/apis/business-api.md) - [All operations](https://skmtc.dev/revolut/apis/business-api/llms.txt) - [OpenAPI document](https://skmtc.dev/revolut/apis/business-api/revisions/be089d9fa8b4?raw)
