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

# Create a card invitation

Create an invitation for a virtual [team member card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) for a new, not-yet-onboarded team member.
When the team member completes onboarding before the invitation's expiry date, the invitation will automatically be claimed, and the card will then be issued for the team member immediately.

:::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 card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).

## Endpoint

POST `/card-invitations`

## Request body

Card to create an invitation for

### 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 invitation.
    The deduplication is limited to 24 hours counting from the first request using a given ID.
    :::
    For more information, see the guides: [Manage card invitations - Idempotency](/docs/guides/manage-accounts/cards/manage-card-invitations#idempotency).
- `expiry_period` (string, optional)
    The period after which the card invitation expires if it hasn't been claimed or cancelled. 
    Must be specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) duration format.
    The duration is counted from the card invitation creation.
    - **Minimum duration:** 1 day (`P1D`)
    - **Maximum duration:** 90 days (`P90D`)
    - **Default duration:** 90 days (`P90D`)
- `holder_id` (string)
    The ID of the team member who will be assigned as the holder of the card after the invitation is claimed.
    
    :::tip
    To retrieve a team member's ID, use the [`GET /team-members` operation](/docs/api/business#get-team-members).
    :::
- `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 physical cards, use the [Revolut Business app](https://business.revolut.com).
    :::
    Possible enum values:

    - `true`
- `label` (string, optional)
    The label for the card to be issued, displayed in the UI to help distinguish between cards.
    If not specified, the default label will be set according to the card's type.
    For card invitations created via API, it's always `Virtual`.
- `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

Successfully created card invitation

#### Response attributes

- `id` (string)
    The ID of the card invitation.
- `state` (enum)
    The current state of the card invitation:
    - **`created`**: Invitation has been created but not yet claimed.
    - **`expired`**: Invitation has expired due to expiry date being reached or manual cancellation.
    - **`failed`**: Invitation claim attempt failed.
    - **`redeemed`**: Invitation has been successfully claimed.
    
    To learn more about card invitation lifecycle, see the guide: [Manage card invitations → Card invitation state](/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state).
    Possible enum values:

    - `created`
    - `expired`
    - `failed`
    - `redeemed`
- `created_at` (string)
    The date and time the card invitation was created in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `updated_at` (string)
    The date and time the card invitation was last updated in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `expiry_date` (string, optional)
    The date and time after which this card invitation expires if not claimed or cancelled before then.
    Specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
    :::note
    Only returned for invitations in state `created`.
    :::tip
    For other states, to find out when a card invitation transitioned to its [final state](/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state), check the `updated_at` value. 
    :::
- `holder_id` (string, optional)
    The ID of the team member to be assigned as the holder of the card after the invitation is claimed.
- `virtual` (boolean)
    Specifies whether the issued card will be a virtual (`true`) or physical (`false`) one.
- `label` (string, optional)
    The label of the card.
- `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 will become 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 will be 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 team member will be able to use the card.
    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 accounts that will be linked to the card.

## 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`. |
| 401 | Unauthorised  Returned, for example, when the credentials you used to make the request are invalid. For more information, see the **Authorization** section. |
| 404 | Team member not found  Returned when the team member specified as cardholder in `holder_id` does not exist. |
| 422 | Unprocessable Entity  For example, you try to set more than one periodic limit at a time, create an invitation for a deleted team member, or an unexpected error occurred when the initial request with the same `request_id` was sent. |
| 429 | Concurrent requests with the same idempotency key |
