---
api: 'Business API'
---

# Create a card

Create a new [team member card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), or [auto-issued card](/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
- This feature is not available in Sandbox.
- 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](/docs/guides/manage-accounts/cards/manage-cards).

## Endpoint

POST `/cards`

## Request body

Card to create

### Attributes

- `request_id` (string)
    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](/docs/guides/manage-accounts/cards/manage-cards#idempotency).
    :::
- `holder_id` (string, optional)
    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](/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](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)
      - `contact_ids` not specified → [auto-issued card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)
- `contact_ids` (array of string, optional)
    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](/docs/api/business#update-card-contacts).
    
    Allowed only for [company cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`virtual=true`, `holder_id` not specified).
- `product` (object, optional)
    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](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` not specified)
    - Optional for [company cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` specified)
    
    Not allowed for [team member cards](/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).
    :::
  - `product.code` (string)
      The code of the card product.
- `virtual` (enum)
    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).
    :::
    Possible enum values:

    - `true`
- `label` (string, optional)
    The label for the issued card, displayed in the UI to help distinguish between cards.
    If not specified, no label will be added.
- `references` (array of object, optional)
    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](/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](/docs/api/business#update-card-references) up to 10 times.
    
    References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
    They are **not** supported for [team member cards](/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.
    :::
  - `references[].name` (string)
      The name of the card reference.
      Must be unique.
  - `references[].value` (string)
      The value for this reference.
- `spending_limits` (object, optional)
    All spending limits set for the card.
    
    You can have at most 1 periodic (day/week/month/quarter/all-time) and 1 non-periodic (single transaction) limit at a time.
    If you try to specify 2 periodic limits at a time, it will result in an error.
  - `spending_limits.single` (object, optional)
      The limit for a single transaction.
    - `spending_limits.single.amount` (number)
        The value of the spending limit.
    - `spending_limits.single.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.day` (object, optional)
      The daily limit for transactions.
    - `spending_limits.day.amount` (number)
        The value of the spending limit.
    - `spending_limits.day.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.week` (object, optional)
      The weekly limit for transactions.
    - `spending_limits.week.amount` (number)
        The value of the spending limit.
    - `spending_limits.week.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.month` (object, optional)
      The monthly limit for transactions.
    - `spending_limits.month.amount` (number)
        The value of the spending limit.
    - `spending_limits.month.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.quarter` (object, optional)
      The quarterly limit for transactions.
    - `spending_limits.quarter.amount` (number)
        The value of the spending limit.
    - `spending_limits.quarter.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.year` (object, optional)
      The yearly limit for transactions.
    - `spending_limits.year.amount` (number)
        The value of the spending limit.
    - `spending_limits.year.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.all_time` (object, optional)
      The all-time limit for transactions.
    - `spending_limits.all_time.amount` (number)
        The value of the spending limit.
    - `spending_limits.all_time.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
- `spending_period` (object, optional)
    The controls for the card's spending period.
    
    They let you set the dates when the card becomes available or unavailable for spending, and define what happens after the end date.
    
    If specified, you must provide at least one of these:
    - `start_date`
    - `end_date` together with `end_date_action`
    
    The dates provided must be in the future.
  - `spending_period.start_date` (string, optional)
      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`.
  - `spending_period.end_date` (string, optional)
      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`.
  - `spending_period.end_date_action` (enum, optional)
      The action to take after the end date of the spending period.
      Possible enum values:

      - `lock`
      - `terminate`
- `categories` (array of enum, optional)
    The list of merchant categories to be available for card spending.
    If not specified, all categories will be allowed.
    
    :::note
    The `categories` and `merchant_controls` parameters have the following restrictions:
    - If you set `categories`, you **cannot** set `merchant_controls.control_type` to `allow`.
    - You **can** set `merchant_controls.control_type` to `block`.
    - You may also set **either** `categories` or `merchant_controls` independently, or **set neither**.
    - Both parameters can be used together **only** if `merchant_controls.control_type` is `block`.
    :::
- `merchant_controls` (object, optional)
    The merchant-level controls for card spending.
    
    They let you block or allow the card to only transact with specific merchants: 
    - `allow`: permits only the specified merchants (cannot be used if the `categories` parameter is set).
    - `block`: blocks the specified merchants (can be used with or without `categories`).
  - `merchant_controls.control_type` (enum)
      The type of control to apply.
      Possible enum values:

      - `block`
      - `allow`
  - `merchant_controls.merchant_ids` (array of string)
      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](/docs/api/business#get-transaction#response) or for [all transactions](/docs/api/business#get-transactions#response).
      :::
- `countries` (array of string, optional)
    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` (array of string, optional)
    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](/docs/api/business#get-accounts).

## Returns

### 200

Information about the created card

#### Response attributes

- `id` (string)
    The ID of the card.
- `holder_id` (string, optional)
    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](/docs/guides/manage-accounts/cards/manage-cards#create-a-virtual-card).
- `contact_ids` (array of string, optional)
    The list of contacts for a [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).
- `created_at` (string)
    The date and time the card was created in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `updated_at` (string)
    The date and time the card was last updated in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `product` (object, optional)
    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).
    :::
  - `product.code` (string)
      The code of the card product.
- `virtual` (boolean)
    Specifies whether the card is virtual (`true`) or physical (`false`).
- `last_digits` (string)
    The last 4 digits of the card's PAN.
- `expiry` (string)
    The card expiration date.
- `label` (string, optional)
    The label of the card.
- `references` (array of object, optional)
    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](/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](/docs/api/business#update-card-references) up to 10 times.
    
    References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
    They are **not** supported for [team member cards](/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.
    :::
  - `references[].name` (string)
      The name of the card reference.
      Must be unique.
  - `references[].value` (string)
      The value for this reference.
- `state` (enum)
    The state that the card is in.
    Possible enum values:

    - `created`
    - `pending`
    - `active`
    - `frozen`
    - `locked`
- `can_be_unlocked` (boolean, optional)
    Returned for locked cards (`state=locked`).
    Indicates whether the card can be [unlocked](/docs/api/business#unlock-card) manually (via API or in-app).
    If `true`, you'll still need the [necessary scope or permission](/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` (object, optional)
    All spending limits set for the card.
  - `spending_limits.single` (object, optional)
      The limit for a single transaction.
    - `spending_limits.single.amount` (number)
        The value of the spending limit.
    - `spending_limits.single.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.day` (object, optional)
      The daily limit for transactions.
    - `spending_limits.day.amount` (number)
        The value of the spending limit.
    - `spending_limits.day.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.week` (object, optional)
      The weekly limit for transactions.
    - `spending_limits.week.amount` (number)
        The value of the spending limit.
    - `spending_limits.week.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.month` (object, optional)
      The monthly limit for transactions.
    - `spending_limits.month.amount` (number)
        The value of the spending limit.
    - `spending_limits.month.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.quarter` (object, optional)
      The quarterly limit for transactions.
    - `spending_limits.quarter.amount` (number)
        The value of the spending limit.
    - `spending_limits.quarter.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.year` (object, optional)
      The yearly limit for transactions.
    - `spending_limits.year.amount` (number)
        The value of the spending limit.
    - `spending_limits.year.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_limits.all_time` (object, optional)
      The all-time limit for transactions.
    - `spending_limits.all_time.amount` (number)
        The value of the spending limit.
    - `spending_limits.all_time.currency` (string)
        The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
- `spending_period` (object, optional)
    The controls for the card's spending period.
    
    They specify the dates when the card becomes available or unavailable for spending, and define what happens after the end date.
  - `spending_period.start_date` (string, optional)
      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`.
  - `spending_period.end_date` (string, optional)
      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`.
  - `spending_period.end_date_action` (enum, optional)
      The action to take after the end date of the spending period.
      Possible enum values:

      - `lock`
      - `terminate`
- `categories` (array of enum, optional)
    The list of merchant categories that are available for card spending.             
    If this parameter is not specified, categories are not restricted.
- `merchant_controls` (object, optional)
    The merchant-level controls for card spending.
    
    They block or allow the card to only transact with specific merchants: 
    - `allow`: permits only the specified merchants (cannot be used if the `categories` parameter is set)
    - `block`: blocks the specified merchants (can be used with or without `categories`)
  - `merchant_controls.control_type` (enum)
      The type of control to apply.
      Possible enum values:

      - `block`
      - `allow`
  - `merchant_controls.merchant_ids` (array of string)
      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](/docs/api/business#get-transaction#response) or for [all transactions](/docs/api/business#get-transactions#response).
      :::
- `countries` (array of string, optional)
    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` (array of string)
    The list of linked accounts.

## Error responses

| HTTP status code | Description |
| --- | --- |
| 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 |
